feat(setting): Implemented the settings administrative menu
This commit is contained in:
68
lib/config/override_store.go
Normal file
68
lib/config/override_store.go
Normal file
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user