From 9cf1428517483e02aa15633b9b4e1d5b75085665 Mon Sep 17 00:00:00 2001 From: Melora Hugues Date: Wed, 8 May 2024 16:07:40 +0200 Subject: [PATCH] fix: allow setting base path for static files --- polyculeconnect/cmd/serve/serve.go | 2 +- polyculeconnect/config/config.go | 20 ++++++++++++-------- polyculeconnect/controller/ui/static.go | 19 ++++++++++++++----- polyculeconnect/server/server.go | 4 ++-- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/polyculeconnect/cmd/serve/serve.go b/polyculeconnect/cmd/serve/serve.go index 57badd8..e572f60 100644 --- a/polyculeconnect/cmd/serve/serve.go +++ b/polyculeconnect/cmd/serve/serve.go @@ -43,7 +43,7 @@ func serve() { logger.L.Infof("Initialized storage backend %q", conf.StorageType) dexConf := dex_server.Config{ Web: dex_server.WebConfig{ - Dir: "./", + Dir: conf.StaticDir, Theme: "default", }, Storage: storageType, diff --git a/polyculeconnect/config/config.go b/polyculeconnect/config/config.go index ae245c6..34c6f80 100644 --- a/polyculeconnect/config/config.go +++ b/polyculeconnect/config/config.go @@ -17,10 +17,11 @@ type envVar string const ( varLogLevel envVar = "LOG_LEVEL" - varServerMode envVar = "SERVER_MODE" - varServerHost envVar = "SERVER_HOST" - varServerPort envVar = "SERVER_PORT" - varServerSocket envVar = "SERVER_SOCK_PATH" + varServerMode envVar = "SERVER_MODE" + varServerHost envVar = "SERVER_HOST" + varServerPort envVar = "SERVER_PORT" + varServerSocket envVar = "SERVER_SOCK_PATH" + varServerStaticDir envVar = "SERVER_STATIC_DIR" varIssuer envVar = "ISSUER" @@ -52,10 +53,11 @@ const ( const ( defaultLogLevel = logrus.InfoLevel - defaultServerMode = ModeNet - defaultServerHost = "0.0.0.0" - defaultServerPort = 5000 - defaultServerSocket = "" + defaultServerMode = ModeNet + defaultServerHost = "0.0.0.0" + defaultServerPort = 5000 + defaultServerSocket = "" + defaultServerStaticDir = "./" defaultIssuer = "locahost" @@ -112,6 +114,7 @@ type AppConfig struct { StorageType string StorageConfig *StorageConfig OpenConnectConfig *OpenConnectConfig + StaticDir string } func parseLevel(lvlStr string) logrus.Level { @@ -142,6 +145,7 @@ func (ac *AppConfig) getConfFromEnv() { ac.Host = getStringFromEnv(varServerHost, defaultServerHost) ac.Port = getIntFromEnv(varServerPort, defaultServerPort) ac.SockPath = getStringFromEnv(varServerSocket, defaultServerSocket) + ac.StaticDir = getStringFromEnv(varServerStaticDir, defaultServerStaticDir) ac.StorageType = getStringFromEnv(varStorageType, string(defaultStorageType)) ac.StorageConfig.Database = getStringFromEnv(varStorageDB, defaultStorageDB) diff --git a/polyculeconnect/controller/ui/static.go b/polyculeconnect/controller/ui/static.go index 0678a2d..1145194 100644 --- a/polyculeconnect/controller/ui/static.go +++ b/polyculeconnect/controller/ui/static.go @@ -15,22 +15,31 @@ import ( const StaticRoute = "/static/" type StaticController struct { + baseDir string +} + +func NewStaticController(baseDir string) *StaticController { + return &StaticController{ + baseDir: baseDir, + } } func (sc *StaticController) ServeHTTP(w http.ResponseWriter, r *http.Request) { - fs := http.FileServer(http.Dir("./static")) + fs := http.FileServer(http.Dir(sc.baseDir + "/static")) http.StripPrefix(StaticRoute, fs).ServeHTTP(w, r) } type IndexController struct { l *logrus.Logger downstreamConstroller http.Handler + baseDir string } -func NewIndexController(l *logrus.Logger, downstream http.Handler) *IndexController { +func NewIndexController(l *logrus.Logger, downstream http.Handler, baseDir string) *IndexController { return &IndexController{ l: l, downstreamConstroller: downstream, + baseDir: baseDir, } } @@ -39,9 +48,9 @@ func (ic IndexController) serveUI(w http.ResponseWriter, r *http.Request) (int, "issuer": func() string { return "toto" }, } - lp := filepath.Join("templates", "index.html") - hdrTpl := filepath.Join("templates", "header.html") - footTpl := filepath.Join("templates", "footer.html") + lp := filepath.Join(ic.baseDir, "templates", "index.html") + hdrTpl := filepath.Join(ic.baseDir, "templates", "header.html") + footTpl := filepath.Join(ic.baseDir, "templates", "footer.html") tmpl, err := template.New("index.html").Funcs(funcs).ParseFiles(hdrTpl, footTpl, lp) if err != nil { return http.StatusInternalServerError, -1, fmt.Errorf("failed to init template: %w", err) diff --git a/polyculeconnect/server/server.go b/polyculeconnect/server/server.go index f225e4b..84a8b5e 100644 --- a/polyculeconnect/server/server.go +++ b/polyculeconnect/server/server.go @@ -64,8 +64,8 @@ func New(appConf *config.AppConfig, dexSrv *dex_server.Server, logger *logrus.Lo } controllers := map[string]http.Handler{ - ui.StaticRoute: middlewares.WithLogger(&ui.StaticController{}, logger), - "/": middlewares.WithLogger(ui.NewIndexController(logger, dexSrv), logger), + ui.StaticRoute: middlewares.WithLogger(ui.NewStaticController(appConf.StaticDir), logger), + "/": middlewares.WithLogger(ui.NewIndexController(logger, dexSrv, appConf.StaticDir), logger), } m := http.NewServeMux()