mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-12-01 02:56:49 +02:00
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
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)
|
|
}
|