mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.6 KiB
Go
145 lines
3.6 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/synctv-org/synctv/utils"
|
|
"github.com/zijiren233/stream"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type BilibiliVendor struct {
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
Cookies map[string]string `gorm:"not null;serializer:fastjson;type:text"`
|
|
UserID string `gorm:"primaryKey;type:char(32)"`
|
|
Backend string `gorm:"type:varchar(64)"`
|
|
}
|
|
|
|
func (b *BilibiliVendor) BeforeSave(tx *gorm.DB) error {
|
|
key := []byte(b.UserID)
|
|
for k, v := range b.Cookies {
|
|
value, err := utils.CryptoToBase64([]byte(v), key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
b.Cookies[k] = value
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (b *BilibiliVendor) AfterSave(tx *gorm.DB) error {
|
|
key := []byte(b.UserID)
|
|
for k, v := range b.Cookies {
|
|
value, err := utils.DecryptoFromBase64(v, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
b.Cookies[k] = stream.BytesToString(value)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (b *BilibiliVendor) AfterFind(tx *gorm.DB) error {
|
|
return b.AfterSave(tx)
|
|
}
|
|
|
|
type AlistVendor struct {
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
UserID string `gorm:"primaryKey;type:char(32)"`
|
|
Backend string `gorm:"type:varchar(64)"`
|
|
ServerID string `gorm:"primaryKey;type:char(32)"`
|
|
Host string `gorm:"not null;type:varchar(256)"`
|
|
Username string `gorm:"type:varchar(256)"`
|
|
HashedPassword []byte
|
|
}
|
|
|
|
func GenAlistServerID(a *AlistVendor) {
|
|
if a.ServerID == "" {
|
|
a.ServerID = utils.SortUUIDWithUUID(uuid.NewMD5(uuid.NameSpaceURL, []byte(a.Host)))
|
|
}
|
|
}
|
|
|
|
func (a *AlistVendor) BeforeSave(tx *gorm.DB) error {
|
|
key := utils.GenCryptoKey(a.UserID)
|
|
var err error
|
|
if a.Host, err = utils.CryptoToBase64([]byte(a.Host), key); err != nil {
|
|
return err
|
|
}
|
|
if a.Username, err = utils.CryptoToBase64([]byte(a.Username), key); err != nil {
|
|
return err
|
|
}
|
|
if a.HashedPassword, err = utils.Crypto(a.HashedPassword, key); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *AlistVendor) AfterSave(tx *gorm.DB) error {
|
|
key := utils.GenCryptoKey(a.UserID)
|
|
host, err := utils.DecryptoFromBase64(a.Host, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a.Host = stream.BytesToString(host)
|
|
username, err := utils.DecryptoFromBase64(a.Username, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a.Username = stream.BytesToString(username)
|
|
hashedPassword, err := utils.Decrypto(a.HashedPassword, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a.HashedPassword = hashedPassword
|
|
return nil
|
|
}
|
|
|
|
func (a *AlistVendor) AfterFind(tx *gorm.DB) error {
|
|
return a.AfterSave(tx)
|
|
}
|
|
|
|
type EmbyVendor struct {
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
UserID string `gorm:"primaryKey;type:char(32)"`
|
|
Backend string `gorm:"type:varchar(64)"`
|
|
ServerID string `gorm:"primaryKey;type:char(32)"`
|
|
Host string `gorm:"not null;type:varchar(256)"`
|
|
APIKey string `gorm:"not null;type:varchar(256)"`
|
|
EmbyUserID string `gorm:"type:varchar(32)"`
|
|
}
|
|
|
|
func (e *EmbyVendor) BeforeSave(tx *gorm.DB) error {
|
|
key := utils.GenCryptoKey(e.ServerID)
|
|
var err error
|
|
if e.Host, err = utils.CryptoToBase64(stream.StringToBytes(e.Host), key); err != nil {
|
|
return err
|
|
}
|
|
if e.APIKey, err = utils.CryptoToBase64(stream.StringToBytes(e.APIKey), key); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (e *EmbyVendor) AfterSave(tx *gorm.DB) error {
|
|
key := utils.GenCryptoKey(e.ServerID)
|
|
host, err := utils.DecryptoFromBase64(e.Host, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
e.Host = stream.BytesToString(host)
|
|
apiKey, err := utils.DecryptoFromBase64(e.APIKey, key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
e.APIKey = stream.BytesToString(apiKey)
|
|
return nil
|
|
}
|
|
|
|
func (e *EmbyVendor) AfterFind(tx *gorm.DB) error {
|
|
return e.AfterSave(tx)
|
|
}
|