package server import ( "net/http" "github.com/gin-gonic/gin" "warpbox/lib/config" "warpbox/lib/metastore" ) func (app *App) handleAdminSettings(ctx *gin.Context) { if !app.requireAdminFlag(ctx, func(perms metastore.EffectivePermissions) bool { return perms.AdminSettingsManage }) { return } app.renderAdminSettings(ctx, "") } func (app *App) handleAdminSettingsPost(ctx *gin.Context) { if !app.requireAdminFlag(ctx, func(perms metastore.EffectivePermissions) bool { return perms.AdminSettingsManage }) { return } if !app.config.AllowAdminSettingsOverride { app.renderAdminSettings(ctx, "Admin settings overrides are disabled by environment configuration.") return } for _, def := range config.EditableDefinitions() { value := ctx.PostForm(def.Key) if def.Type == config.SettingTypeBool { value = "false" if ctx.PostForm(def.Key) == "true" { value = "true" } } if err := app.config.ApplyOverride(def.Key, value); err != nil { app.renderAdminSettings(ctx, err.Error()) return } if err := app.store.SetSetting(def.Key, value); err != nil { app.renderAdminSettings(ctx, err.Error()) return } } applyBoxstoreRuntimeConfig(app.config) ctx.Redirect(http.StatusSeeOther, "/admin/settings") } func (app *App) renderAdminSettings(ctx *gin.Context, errorMessage string) { ctx.HTML(http.StatusOK, "admin_settings.html", gin.H{ "AdminSection": "settings", "CurrentUser": app.currentAdminUsername(ctx), "CSRFToken": app.currentCSRFToken(ctx), "Rows": app.config.SettingRows(), "OverridesAllowed": app.config.AllowAdminSettingsOverride, "Error": errorMessage, }) }