vaulterm/server/models/keychain.go

54 lines
878 B
Go

package models
import (
"encoding/json"
"rul.sh/vaulterm/lib"
)
const (
KeychainTypeUserPass = "user"
KeychainTypeRSA = "rsa"
KeychainTypeCertificate = "cert"
)
type Keychain struct {
BaseModel
Label string `json:"label"`
Type string `json:"type" gorm:"not null;index:keychains_type_idx;type:varchar(12)"`
Data string `json:"-" gorm:"type:text"`
Timestamps
SoftDeletes
}
func (k *Keychain) EncryptData(data interface{}) error {
// Encrypt data
jsonData, err := json.Marshal(data)
if err != nil {
return err
}
enc, err := lib.Encrypt(string(jsonData))
if err == nil {
k.Data = enc
}
return err
}
func (k *Keychain) DecryptData(data interface{}) error {
// Decrypt stored data
dec, err := lib.Decrypt(k.Data)
if err != nil {
return err
}
err = json.Unmarshal([]byte(dec), &data)
if err != nil {
return err
}
return nil
}