From d1e8b085e2b3447d2a1c6bb692e1036a51fb72a9 Mon Sep 17 00:00:00 2001
From: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
Date: Mon, 22 Mar 2021 11:45:17 +0100
Subject: [PATCH] feat: use embedded assets by default

Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
---
 server/server.go    | 22 +++++++++++++++-------
 server/templates.go |  7 -------
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/server/server.go b/server/server.go
index 17d72af3..93ab9f16 100644
--- a/server/server.go
+++ b/server/server.go
@@ -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,
diff --git a/server/templates.go b/server/templates.go
index ca5e4d24..ac484301 100644
--- a/server/templates.go
+++ b/server/templates.go
@@ -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"
 	}
-- 
GitLab