mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-25 01:16:21 +02:00
64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package daos
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/pocketbase/pocketbase/models"
|
|
"github.com/pocketbase/pocketbase/models/settings"
|
|
"github.com/pocketbase/pocketbase/tools/security"
|
|
)
|
|
|
|
// FindSettings returns and decode the serialized app settings param value.
|
|
//
|
|
// The method will first try to decode the param value without decryption.
|
|
// If it fails and optEncryptionKey is set, it will try again by first
|
|
// decrypting the value and then decode it again.
|
|
//
|
|
// Returns an error if it fails to decode the stored serialized param value.
|
|
func (dao *Dao) FindSettings(optEncryptionKey ...string) (*settings.Settings, error) {
|
|
param, err := dao.FindParamByKey(models.ParamAppSettings)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := settings.New()
|
|
|
|
// try first without decryption
|
|
plainDecodeErr := json.Unmarshal(param.Value, result)
|
|
|
|
// failed, try to decrypt
|
|
if plainDecodeErr != nil {
|
|
var encryptionKey string
|
|
if len(optEncryptionKey) > 0 && optEncryptionKey[0] != "" {
|
|
encryptionKey = optEncryptionKey[0]
|
|
}
|
|
|
|
// load without decrypt has failed and there is no encryption key to use for decrypt
|
|
if encryptionKey == "" {
|
|
return nil, errors.New("failed to load the stored app settings - missing or invalid encryption key")
|
|
}
|
|
|
|
// decrypt
|
|
decrypted, decryptErr := security.Decrypt(string(param.Value), encryptionKey)
|
|
if decryptErr != nil {
|
|
return nil, decryptErr
|
|
}
|
|
|
|
// decode again
|
|
decryptedDecodeErr := json.Unmarshal(decrypted, result)
|
|
if decryptedDecodeErr != nil {
|
|
return nil, decryptedDecodeErr
|
|
}
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
// SaveSettings persists the specified settings configuration.
|
|
//
|
|
// If optEncryptionKey is set, then the stored serialized value will be encrypted with it.
|
|
func (dao *Dao) SaveSettings(newSettings *settings.Settings, optEncryptionKey ...string) error {
|
|
return dao.SaveParam(models.ParamAppSettings, newSettings, optEncryptionKey...)
|
|
}
|