diff --git a/.gitignore b/.gitignore index 4e0f1b0f0a..2a4d1b88e6 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ console/src/app/proto/generated/ openapi/**/*.json /internal/api/assets/authz.go /internal/api/assets/router.go +/internal/api/ui/console/static/* # local build/local/cloud.env diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 2f69f14aee..87ee398cce 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -13,6 +13,7 @@ before: - sh -c "cp -r .artifacts/grpc/go-client/* ." - docker build -f build/console/Dockerfile . -t zitadel-npm-base --target npm-copy -o .artifacts/grpc/js-client - docker build -f build/console/Dockerfile . -t zitadel-npm-base --target angular-export -o .artifacts/console + - sh -c "cp -r .artifacts/console/* internal/api/ui/console/static/" builds: - env: - CGO_ENABLED=0 diff --git a/cmd/admin/start/start.go b/cmd/admin/start/start.go index ccb7317d8a..b66d48ee94 100644 --- a/cmd/admin/start/start.go +++ b/cmd/admin/start/start.go @@ -185,7 +185,7 @@ func startAPIs(ctx context.Context, router *mux.Router, commands *command.Comman } apis.RegisterHandler(console.HandlerPrefix, c) - l, err := login.CreateLogin(config.Login, commands, queries, authRepo, store, config.SystemDefaults, console.HandlerPrefix, config.ExternalDomain, baseURL, oidc.AuthCallback, config.ExternalSecure, userAgentInterceptor, instanceInterceptor.Handler, keys.User, keys.IDPConfig, keys.CSRFCookieKey) + l, err := login.CreateLogin(config.Login, commands, queries, authRepo, store, config.SystemDefaults, console.HandlerPrefix+"/", config.ExternalDomain, baseURL, oidc.AuthCallback, config.ExternalSecure, userAgentInterceptor, instanceInterceptor.Handler, keys.User, keys.IDPConfig, keys.CSRFCookieKey) if err != nil { return fmt.Errorf("unable to start login: %w", err) } diff --git a/console/package.json b/console/package.json index 1999dd083f..cbd47fbc5b 100644 --- a/console/package.json +++ b/console/package.json @@ -5,7 +5,7 @@ "ng": "ng", "start": "ng serve", "build": "ng build", - "prodbuild": "ng build --aot=true --buildOptimizer=true", + "prodbuild": "ng build --aot=true --buildOptimizer=true --base-href=/ui/console/", "lint": "ng lint && stylelint './src/**/*.scss' --syntax scss" }, "private": true, diff --git a/internal/api/ui/console/console.go b/internal/api/ui/console/console.go index a4b30d14c7..0cc408e32a 100644 --- a/internal/api/ui/console/console.go +++ b/internal/api/ui/console/console.go @@ -1,8 +1,10 @@ package console import ( + "embed" "encoding/json" "fmt" + "io/fs" "net/http" "os" "path" @@ -26,10 +28,14 @@ type spaHandler struct { fileSystem http.FileSystem } +var ( + //go:embed static/* + static embed.FS +) + const ( - envRequestPath = "/assets/environment.json" - consoleDefaultDir = "./console/" - HandlerPrefix = "/ui/console" + envRequestPath = "/assets/environment.json" + HandlerPrefix = "/ui/console" ) var ( @@ -54,12 +60,10 @@ func (i *spaHandler) Open(name string) (http.File, error) { } func Start(config Config, domain, url, issuer string, instanceHandler func(http.Handler) http.Handler) (http.Handler, error) { - consoleDir := consoleDefaultDir - if config.ConsoleOverwriteDir != "" { - consoleDir = config.ConsoleOverwriteDir + fSys, err := fs.Sub(static, "static") + if err != nil { + return nil, err } - consoleHTTPDir := http.Dir(consoleDir) - cache := assetsCacheInterceptorIgnoreManifest( config.ShortCache.MaxAge, config.ShortCache.SharedMaxAge, @@ -69,7 +73,7 @@ func Start(config Config, domain, url, issuer string, instanceHandler func(http. security := middleware.SecurityHeaders(csp(domain), nil) handler := &http.ServeMux{} - handler.Handle("/", cache(security(http.FileServer(&spaHandler{consoleHTTPDir})))) + handler.Handle("/", cache(security(http.FileServer(&spaHandler{http.FS(fSys)})))) handler.Handle(envRequestPath, instanceHandler(cache(security(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { instance := authz.GetInstance(r.Context()) if instance.InstanceID() == "" { diff --git a/internal/api/ui/console/static/.gitkeep b/internal/api/ui/console/static/.gitkeep new file mode 100644 index 0000000000..e69de29bb2