63 lines
2.0 KiB
Go
63 lines
2.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"github.com/Silo-Server/silo-server/internal/catalog"
|
|
)
|
|
|
|
// SectionsAllowProfileCustomSettingKey is the server_settings key controlling
|
|
// whether non-admin profiles may add user-added sections of admin-only recipes.
|
|
const SectionsAllowProfileCustomSettingKey = "sections.allow_profile_custom_sections"
|
|
|
|
// SectionSettingsHandler exposes GET/PUT for the sections-related server setting.
|
|
type SectionSettingsHandler struct {
|
|
Settings *catalog.ServerSettingsRepo
|
|
}
|
|
|
|
type sectionsSettingResponse struct {
|
|
AllowProfileCustomSections bool `json:"allow_profile_custom_sections"`
|
|
}
|
|
|
|
// HandleGet handles GET /api/admin/settings/sections.
|
|
func (h *SectionSettingsHandler) HandleGet(w http.ResponseWriter, r *http.Request) {
|
|
var resp sectionsSettingResponse
|
|
if h.Settings != nil {
|
|
v, _ := h.Settings.Get(r.Context(), SectionsAllowProfileCustomSettingKey)
|
|
resp.AllowProfileCustomSections = v == "true"
|
|
}
|
|
writeJSON(w, http.StatusOK, resp)
|
|
}
|
|
|
|
// HandleGetProfileFlag exposes the allow_profile_custom_sections setting to any
|
|
// authenticated profile (no admin required). Read-only.
|
|
func (h *SectionSettingsHandler) HandleGetProfileFlag(w http.ResponseWriter, r *http.Request) {
|
|
var resp sectionsSettingResponse
|
|
if h.Settings != nil {
|
|
v, _ := h.Settings.Get(r.Context(), SectionsAllowProfileCustomSettingKey)
|
|
resp.AllowProfileCustomSections = v == "true"
|
|
}
|
|
writeJSON(w, http.StatusOK, resp)
|
|
}
|
|
|
|
// HandlePut handles PUT /api/admin/settings/sections.
|
|
func (h *SectionSettingsHandler) HandlePut(w http.ResponseWriter, r *http.Request) {
|
|
var req sectionsSettingResponse
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
writeError(w, http.StatusBadRequest, "bad_json", err.Error())
|
|
return
|
|
}
|
|
if h.Settings != nil {
|
|
value := "false"
|
|
if req.AllowProfileCustomSections {
|
|
value = "true"
|
|
}
|
|
if err := h.Settings.Set(r.Context(), SectionsAllowProfileCustomSettingKey, value); err != nil {
|
|
writeError(w, http.StatusInternalServerError, "save_failed", err.Error())
|
|
return
|
|
}
|
|
}
|
|
writeJSON(w, http.StatusOK, req)
|
|
}
|