1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2024-11-25 01:16:21 +02:00
pocketbase/daos/param.go

76 lines
1.7 KiB
Go
Raw Normal View History

2022-07-06 23:19:05 +02:00
package daos
import (
"encoding/json"
"github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/tools/security"
"github.com/pocketbase/pocketbase/tools/types"
)
// ParamQuery returns a new Param select query.
func (dao *Dao) ParamQuery() *dbx.SelectQuery {
return dao.ModelQuery(&models.Param{})
}
// FindParamByKey finds the first Param model with the provided key.
func (dao *Dao) FindParamByKey(key string) (*models.Param, error) {
param := &models.Param{}
err := dao.ParamQuery().
AndWhere(dbx.HashExp{"key": key}).
Limit(1).
One(param)
if err != nil {
return nil, err
}
return param, nil
}
// SaveParam creates or updates a Param model by the provided key-value pair.
// The value argument will be encoded as json string.
//
// If `optEncryptionKey` is provided it will encrypt the value before storing it.
func (dao *Dao) SaveParam(key string, value any, optEncryptionKey ...string) error {
param, _ := dao.FindParamByKey(key)
if param == nil {
param = &models.Param{Key: key}
}
var normalizedValue any
// encrypt if optEncryptionKey is set
if len(optEncryptionKey) > 0 && optEncryptionKey[0] != "" {
encoded, encodingErr := json.Marshal(value)
if encodingErr != nil {
return encodingErr
}
encryptVal, encryptErr := security.Encrypt(encoded, optEncryptionKey[0])
if encryptErr != nil {
return encryptErr
}
normalizedValue = encryptVal
} else {
normalizedValue = value
}
encodedValue := types.JsonRaw{}
if err := encodedValue.Scan(normalizedValue); err != nil {
return err
}
param.Value = encodedValue
return dao.Save(param)
}
// DeleteParam deletes the provided Param model.
func (dao *Dao) DeleteParam(param *models.Param) error {
return dao.Delete(param)
}