AnP/Go/Managers/SettingsManager.go

85 lines
2.3 KiB
Go

package Managers
import (
"AnP/Models"
"AnP/Utils"
)
var default_settings map[string]any = map[string]any{
"default_settings_files": []any{
"/Public/json/AnP.settings.json",
"/JSON/AnP.settings.json",
"/Public/json/AnP.go.settings.json",
"/JSON/AnP.go.settings.json",
"AnP.go.settings.json",
},
"default_secrets_files": []any{
"/Public/json/AnP.secrets.json",
"/JSON/AnP.secrets.json",
"/Public/json/AnP.go.secrets.json",
"/JSON/AnP.go.secrets.json",
"AnP.go.secrets.json",
},
}
type SettingsManager struct {
anp Models.AnPModel
inputs map[string]any
settings map[string]any
secrets map[string]any
}
func NewSettingsManager(anp Models.AnPModel, inputs any) SettingsManager {
var settings SettingsManager = SettingsManager{
anp: anp,
inputs: Utils.GetDictionary(inputs, true),
settings: map[string]any{},
secrets: map[string]any{},
}
for _, key := range []string{"default_settings_files", "default_settings", "settings_files", "settings"} {
settings.Add(settings.Get(key, nil, nil), true, "AnP")
}
for _, key := range []string{"default_secrets_files", "default_secrets", "secrets_files", "secrets"} {
settings.AddSecrets(settings.Get(key, nil, nil), true, "AnP")
}
return settings
}
func GetSettings[T any](_self SettingsManager, keys any, inputs any, _default *T) T {
return Utils.GetValue(keys, []any{inputs, _self.secrets, _self.inputs, _self.settings, default_settings}, _default)
}
func (_self SettingsManager) Get(keys any, inputs any, _default *any) any {
return GetSettings(_self, keys, inputs, _default)
}
func (_self *SettingsManager) Add(inputs any, overwrite bool, header string) {
_self.anp.Request.LoadJSON(inputs, func(data any) {
for key, value := range Utils.Get[map[string]any](data, nil) {
if !Utils.IsAnPKey(key, header) {
_, exists := _self.settings[key]
if overwrite || !exists {
_self.settings[key] = value
}
}
}
}, true)
}
func (_self *SettingsManager) AddSecrets(inputs any, overwrite bool, header string) {
_self.anp.Request.LoadJSON(inputs, func(data any) {
for key, value := range Utils.Get[map[string]any](data, nil) {
if !Utils.IsAnPKey(key, header) {
_, exists := _self.secrets[key]
if overwrite || !exists {
_self.secrets[key] = value
}
}
}
}, true)
}