Files
museum-digital-webdav-uploader/src/webui/serveApiUpdateSettings.go
2025-03-02 22:59:51 +01:00

60 lines
1.7 KiB
Go

package webui
import (
"encoding/json"
"fmt"
"net/http"
"gitea.armuli.eu/museum-digital/museum-digital-webdav-uploader/src/configloader"
)
type updateSettingsResponse struct {
Success bool `json:"success"`
ValidationError string `json:"error"`
}
// Provides the API for updating the general configuration.
func serveApiUpdateSettings(w http.ResponseWriter, r *http.Request) {
setHeadersForJson(w)
// Parse POST data
parseErr := r.ParseForm()
if parseErr != nil {
fmt.Println("Failed to load form data")
return
}
// Load new config from a POST variable 'settings' that provides the full
// settings as a JSON-encoded string.
rawInputConfig := r.PostForm.Get("settings")
var newConfig configloader.MDWebDavUploaderConfig
unmarshalErr := json.Unmarshal([]byte(rawInputConfig), &newConfig)
if unmarshalErr != nil {
fmt.Fprint(w, "{\"success\": false, \"error\": \"Invalid input JSON\"}")
return
}
// Attempt to store the new settings. Validation takes place while storing
var output updateSettingsResponse
validationErr := configloader.StoreConfigToFile(newConfig, "")
if validationErr == nil {
output = updateSettingsResponse{Success: true, ValidationError: ""}
// Reload config
config, setupRequired, _ = configloader.LoadFromFile("")
} else {
output = updateSettingsResponse{Success: false, ValidationError: validationErr.Error()}
}
// Format response in JSON, then print it
outputJson, encodeErr := json.Marshal(output)
if encodeErr != nil {
panic("Failed to create JSON")
}
fmt.Fprint(w, string(outputJson))
}