69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
"time"
|
|
)
|
|
|
|
const AdminSettingsOverrideFilename = "admin_settings_overrides.json"
|
|
|
|
type adminSettingsOverrideFile struct {
|
|
Format string `json:"format"`
|
|
SavedAt string `json:"saved_at"`
|
|
Overrides map[string]string `json:"overrides"`
|
|
}
|
|
|
|
func ReadAdminSettingsOverrides(path string) (map[string]string, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return map[string]string{}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
var payload adminSettingsOverrideFile
|
|
if err := json.Unmarshal(data, &payload); err != nil {
|
|
return nil, err
|
|
}
|
|
if payload.Overrides == nil {
|
|
return map[string]string{}, nil
|
|
}
|
|
return payload.Overrides, nil
|
|
}
|
|
|
|
func WriteAdminSettingsOverrides(path string, overrides map[string]string) error {
|
|
if overrides == nil {
|
|
overrides = map[string]string{}
|
|
}
|
|
|
|
keys := make([]string, 0, len(overrides))
|
|
for key := range overrides {
|
|
keys = append(keys, key)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
normalized := make(map[string]string, len(overrides))
|
|
for _, key := range keys {
|
|
normalized[key] = overrides[key]
|
|
}
|
|
|
|
payload := adminSettingsOverrideFile{
|
|
Format: "warpbox.admin.settings.overrides.v1",
|
|
SavedAt: time.Now().UTC().Format(time.RFC3339),
|
|
Overrides: normalized,
|
|
}
|
|
data, err := json.MarshalIndent(payload, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, data, 0644)
|
|
}
|