2023-12-21 16:04:04 +00:00
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
2024-01-20 18:13:11 +00:00
|
|
|
"git.myservermanager.com/varakh/upda/util"
|
2023-12-21 16:04:04 +00:00
|
|
|
"github.com/google/uuid"
|
|
|
|
"gorm.io/gorm"
|
2024-01-20 18:13:11 +00:00
|
|
|
"os"
|
2023-12-21 16:04:04 +00:00
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (u *Update) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
u.ID = uuid.New()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update entity holding information for updates
|
|
|
|
type Update struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
Application string `gorm:"uniqueIndex:idx_a_p_h;not null"`
|
|
|
|
Provider string `gorm:"uniqueIndex:idx_a_p_h;not null"`
|
|
|
|
Host string `gorm:"uniqueIndex:idx_a_p_h;not null"`
|
|
|
|
Version string `gorm:"not null"`
|
|
|
|
State string `gorm:"not null"`
|
|
|
|
Metadata JSONMap `gorm:"jsonb"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|
|
|
|
|
2024-01-20 18:13:11 +00:00
|
|
|
// BeforeCreate encrypts secret value before storing to database
|
|
|
|
func (wh *Webhook) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var encryptedToken string
|
|
|
|
|
|
|
|
if encryptedToken, er = util.EncryptAndEncode(wh.Token, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
wh.ID = uuid.New()
|
|
|
|
wh.Token = encryptedToken
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// AfterSave decrypt secret value after encrypted value has been retrieved from database
|
|
|
|
func (wh *Webhook) AfterSave(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var decrypted string
|
|
|
|
if decrypted, er = util.DecryptAndDecode(wh.Token, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
wh.Token = decrypted
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-12-21 16:04:04 +00:00
|
|
|
// Webhook entity holding information for webhooks
|
|
|
|
type Webhook struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
Type string `gorm:"not null"`
|
|
|
|
Label string `gorm:"not null"`
|
|
|
|
Token string `gorm:"not null"`
|
|
|
|
IgnoreHost bool `gorm:"default:false;not null"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|
|
|
|
|
2024-01-20 18:13:11 +00:00
|
|
|
func (e *Event) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
e.ID = uuid.New()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-12-21 16:04:04 +00:00
|
|
|
// Event entity holding information for events
|
|
|
|
type Event struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
Name string `gorm:"not null"`
|
|
|
|
State string `gorm:"not null"`
|
|
|
|
Payload JSONMap `gorm:"jsonb"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|
2024-01-20 18:13:11 +00:00
|
|
|
|
|
|
|
// BeforeCreate encrypts secret value before storing to database
|
|
|
|
func (e *Secret) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var encryptedValue string
|
|
|
|
|
|
|
|
if encryptedValue, er = util.EncryptAndEncode(e.Value, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
e.ID = uuid.New()
|
|
|
|
e.Value = encryptedValue
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// BeforeUpdate encrypts secret value before storing to database
|
|
|
|
func (e *Secret) BeforeUpdate(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var encryptedValue string
|
|
|
|
|
|
|
|
if encryptedValue, er = util.EncryptAndEncode(e.Value, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
e.Value = encryptedValue
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// AfterSave decrypt secret value after encrypted value has been retrieved from database
|
|
|
|
func (e *Secret) AfterSave(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var decrypted string
|
|
|
|
if decrypted, er = util.DecryptAndDecode(e.Value, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
e.Value = decrypted
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// AfterFind decrypt secret value after encrypted value has been retrieved from database
|
|
|
|
func (e *Secret) AfterFind(tx *gorm.DB) (err error) {
|
|
|
|
var er error
|
|
|
|
var decrypted string
|
|
|
|
if decrypted, er = util.DecryptAndDecode(e.Value, os.Getenv(envSecret)); er != nil {
|
|
|
|
return er
|
|
|
|
}
|
|
|
|
|
|
|
|
e.Value = decrypted
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Secret entity holding information for secrets
|
|
|
|
type Secret struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
Key string `gorm:"unique;not null"`
|
|
|
|
Value string `gorm:"not null"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *Action) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
e.ID = uuid.New()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Action entity holding information for actions
|
|
|
|
type Action struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
Label string `gorm:"not null"`
|
|
|
|
Type string `gorm:"not null"`
|
|
|
|
MatchEvent *string `gorm:""`
|
|
|
|
MatchApplication *string `gorm:""`
|
|
|
|
MatchProvider *string `gorm:""`
|
|
|
|
MatchHost *string `gorm:""`
|
|
|
|
Payload JSONMap `gorm:"jsonb"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *ActionInvocation) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
e.ID = uuid.New()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// ActionInvocation entity holding information for invocations of actions
|
|
|
|
type ActionInvocation struct {
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;unique;not null"`
|
|
|
|
RetryCount int `gorm:"not null;default:1"`
|
|
|
|
State string `gorm:"not null"`
|
2024-04-21 21:09:25 +00:00
|
|
|
Message *string
|
2024-01-20 18:13:11 +00:00
|
|
|
Event Event `gorm:"foreignKey:EventID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
|
|
|
|
EventID string `gorm:"not null"`
|
|
|
|
Action Action `gorm:"foreignKey:ActionID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
|
|
|
|
ActionID string `gorm:"not null"`
|
|
|
|
CreatedAt time.Time `gorm:"time;autoCreateTime;not null"`
|
|
|
|
UpdatedAt time.Time `gorm:"time;autoUpdateTime;not null"`
|
|
|
|
}
|