Merge pull request #2054 from dexidp/embed-web

Embed web assets
This commit is contained in:
Márk Sági-Kazár 2021-03-22 17:38:09 +01:00 committed by GitHub
commit 1ec5cf07f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 21 deletions

View file

@ -54,16 +54,12 @@ COPY --from=builder /usr/local/src/dex/go.mod /usr/local/src/dex/go.sum /usr/loc
COPY --from=builder /usr/local/src/dex/api/v2/go.mod /usr/local/src/dex/api/v2/go.sum /usr/local/src/dex/api/v2/
COPY --from=builder /go/bin/dex /usr/local/bin/dex
COPY --from=builder /usr/local/src/dex/web /srv/dex/web
COPY --from=gomplate /usr/local/bin/gomplate /usr/local/bin/gomplate
USER 1001:1001
# Import frontend assets and set the correct CWD directory so the assets
# are in the default path.
COPY --from=builder /usr/local/src/dex/web /web
USER 1001:1001
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -523,4 +523,8 @@ func applyConfigOverrides(options serveOptions, config *Config) {
if options.grpcAddr != "" {
config.GRPC.Addr = options.grpcAddr
}
if config.Frontend.Dir == "" {
config.Frontend.Dir = os.Getenv("DEX_FRONTEND_DIR")
}
}

View file

@ -60,7 +60,7 @@ web:
# frontend:
# issuer: dex
# logoURL: theme/logo.png
# dir: web/
# dir: ""
# theme: light
# Telemetry configuration

View file

@ -9,6 +9,7 @@ import (
"io/fs"
"net/http"
"net/url"
"os"
"path"
"strconv"
"strings"
@ -41,6 +42,7 @@ import (
"github.com/dexidp/dex/connector/saml"
"github.com/dexidp/dex/pkg/log"
"github.com/dexidp/dex/storage"
"github.com/dexidp/dex/web"
)
// LocalConnector is the local passwordDB connector which is an internal
@ -101,20 +103,20 @@ type Config struct {
// WebConfig holds the server's frontend templates and asset configuration.
type WebConfig struct {
// A file path to web static. If set, WebFS will be ignored.
// A file path to static web assets.
//
// It is expected to contain the following directories:
//
// * static - Static static served at "( issuer URL )/static".
// * templates - HTML templates controlled by dex.
// * themes/(theme) - Static static served at "( issuer URL )/theme".
//
Dir string
// Alternative way to configure web static filesystem. Dir overrides this.
// It's expected to contain the same files and directories as mentioned
// above in Dir doc.
// Alternative way to programatically configure static web assets.
// If Dir is specified, WebFS is ignored.
// It's expected to contain the same files and directories as mentioned above.
//
// Note: this is experimental. Might get removed without notice!
WebFS fs.FS
// Defaults to "( issuer URL )/theme/logo.png"
@ -210,9 +212,15 @@ func newServer(ctx context.Context, c Config, rotationStrategy rotationStrategy)
supported[respType] = true
}
webFS := web.FS()
if c.Web.Dir != "" {
webFS = os.DirFS(c.Web.Dir)
} else if c.Web.WebFS != nil {
webFS = c.Web.WebFS
}
web := webConfig{
dir: c.Web.Dir,
webFS: c.Web.WebFS,
webFS: webFS,
logoURL: c.Web.LogoURL,
issuerURL: c.Issuer,
issuer: c.Web.Issuer,

View file

@ -7,7 +7,6 @@ import (
"io/fs"
"net/http"
"net/url"
"os"
"path"
"path/filepath"
"sort"
@ -45,7 +44,6 @@ type templates struct {
}
type webConfig struct {
dir string
webFS fs.FS
logoURL string
issuer string
@ -77,11 +75,6 @@ func loadWebConfig(c webConfig) (http.Handler, http.Handler, *templates, error)
if c.issuer == "" {
c.issuer = "dex"
}
if c.dir != "" {
c.webFS = os.DirFS(c.dir)
} else if c.webFS == nil {
c.webFS = os.DirFS("./web")
}
if c.logoURL == "" {
c.logoURL = "theme/logo.png"
}

14
web/web.go Normal file
View file

@ -0,0 +1,14 @@
package web
import (
"embed"
"io/fs"
)
//go:embed static/* templates/* themes/*
var files embed.FS
// FS returns a filesystem with the default web assets.
func FS() fs.FS {
return files
}