59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
|
|
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,
|
||
|
|
})
|
||
|
|
}
|