vaulterm/server/models/keychain.go

75 lines
1.5 KiB
Go
Raw Normal View History

2024-11-07 19:07:41 +00:00
package models
import (
"encoding/json"
2024-11-16 02:34:07 +07:00
"rul.sh/vaulterm/server/lib"
2024-11-07 19:07:41 +00:00
)
const (
KeychainTypeUserPass = "user"
2024-11-09 14:37:09 +00:00
KeychainTypePVE = "pve"
2024-11-07 19:07:41 +00:00
KeychainTypeRSA = "rsa"
KeychainTypeCertificate = "cert"
)
type Keychain struct {
2024-11-09 10:33:07 +00:00
Model
2024-11-07 19:07:41 +00:00
2024-11-12 17:17:10 +00:00
OwnerID *string `json:"userId" gorm:"type:varchar(26)"`
Owner *User `json:"user" gorm:"foreignKey:OwnerID"`
TeamID *string `json:"teamId" gorm:"type:varchar(26)"`
Team *Team `json:"team" gorm:"foreignKey:TeamID"`
2024-11-07 19:07:41 +00:00
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
}
2024-11-12 17:17:10 +00:00
func (k *Keychain) HasAccess(user *User) bool {
if user.IsAdmin() {
return true
}
return *k.OwnerID == user.ID || user.IsInTeam(k.TeamID)
}
func (k *Keychain) CanWrite(user *User) bool {
if user.IsAdmin() {
return true
}
teamRole := user.GetTeamRole(k.TeamID)
return *k.OwnerID == user.ID || teamRole == TeamRoleOwner || teamRole == TeamRoleAdmin
}