Полный продакшен-рефактор fix25: split peer/admin, удаление legacy, шифрование secret, auth_id, новые API/роуты и зачистка subscription
This commit is contained in:
@@ -3,10 +3,11 @@ package bo
|
||||
import "time"
|
||||
|
||||
type AccountBo struct {
|
||||
Id int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
Deleted int64 `json:"deleted"`
|
||||
Id int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
Deleted int64 `json:"deleted"`
|
||||
TokenVersion int64 `json:"tokenVersion"`
|
||||
}
|
||||
|
||||
type AccountExport struct {
|
||||
@@ -28,3 +29,18 @@ type AccountExport struct {
|
||||
ConAt int64 `json:"conAt"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
type PeerExport struct {
|
||||
Id int64 `json:"id,omitempty"`
|
||||
Name string `json:"name"`
|
||||
Remark string `json:"remark"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
QuotaBytes int64 `json:"quotaBytes"`
|
||||
DownloadBytes int64 `json:"downloadBytes,omitempty"`
|
||||
UploadBytes int64 `json:"uploadBytes,omitempty"`
|
||||
ExpiresAt int64 `json:"expiresAt"`
|
||||
MaxDevices int64 `json:"maxDevices"`
|
||||
Disabled int64 `json:"disabled"`
|
||||
BannedUntil int64 `json:"bannedUntil,omitempty"`
|
||||
LastConnectionAt int64 `json:"lastConnectionAt,omitempty"`
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
package bo
|
||||
|
||||
type Hysteria2 struct {
|
||||
Name string `yaml:"name"`
|
||||
Type string `yaml:"type"`
|
||||
Server string `yaml:"server"`
|
||||
Port string `yaml:"port"`
|
||||
Ports string `yaml:"ports,omitempty"`
|
||||
Password string `yaml:"password"`
|
||||
Up string `yaml:"up,omitempty"`
|
||||
Down string `yaml:"down,omitempty"`
|
||||
Obfs string `yaml:"obfs,omitempty"`
|
||||
ObfsPassword string `yaml:"obfs-password,omitempty"`
|
||||
Sni string `yaml:"sni,omitempty"`
|
||||
SkipCertVerify bool `yaml:"skip-cert-verify,omitempty"`
|
||||
}
|
||||
|
||||
type ProxyGroup struct {
|
||||
Name string `yaml:"name"`
|
||||
Type string `yaml:"type"`
|
||||
Proxies []string `yaml:"proxies"`
|
||||
}
|
||||
|
||||
type ClashConfig struct {
|
||||
Proxies []interface{} `yaml:"proxies"`
|
||||
ProxyGroups []ProxyGroup `yaml:"proxy-groups"`
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package constant
|
||||
|
||||
const (
|
||||
Shadowrocket = "shadowrocket"
|
||||
Clash = "clash"
|
||||
V2rayN = "v2rayn"
|
||||
NekoBox = "nekobox"
|
||||
)
|
||||
@@ -6,6 +6,8 @@ const (
|
||||
HUICrtPath = "H_UI_CRT_PATH"
|
||||
HUIKeyPath = "H_UI_KEY_PATH"
|
||||
JwtSecret = "JWT_SECRET"
|
||||
PeerSecretKey = "PEER_SECRET_KEY"
|
||||
PeerSecretEncryptionKey = "PEER_SECRET_ENCRYPTION_KEY"
|
||||
Hysteria2TrafficStatsSecret = "HYSTERIA2_TRAFFIC_STATS_SECRET"
|
||||
Hysteria2Enable = "HYSTERIA2_ENABLE"
|
||||
Hysteria2Config = "HYSTERIA2_CONFIG"
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
package dto
|
||||
|
||||
type PeerPageDto struct {
|
||||
BaseDto
|
||||
Username *string `json:"username" form:"username" validate:"omitempty,min=1,max=32"`
|
||||
Deleted *int64 `json:"deleted" form:"deleted" validate:"omitempty,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=32"`
|
||||
}
|
||||
|
||||
type LoginDto struct {
|
||||
Username *string `json:"username" form:"username" validate:"required,min=6,max=32,validateStr"`
|
||||
Pass *string `json:"pass" form:"pass" validate:"required,min=6,max=32,validateStr"`
|
||||
}
|
||||
|
||||
type AccountSaveDto struct {
|
||||
Username *string `json:"username" form:"username" validate:"required,min=6,max=32,validateStr"`
|
||||
Pass *string `json:"pass" form:"pass" validate:"required,min=6,max=32,validateStr"`
|
||||
ConPass *string `json:"conPass" form:"conPass" validate:"required,min=6,max=32,validateStr"`
|
||||
Quota *int64 `json:"quota" form:"quota" validate:"required,min=-1"`
|
||||
ExpireTime *int64 `json:"expireTime" form:"expireTime" validate:"required,min=0"`
|
||||
DeviceNo *int64 `json:"deviceNo" form:"deviceNo" validate:"required,min=1"`
|
||||
Deleted *int64 `json:"deleted" form:"deleted" validate:"required,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=32"`
|
||||
}
|
||||
|
||||
type AccountUpdateDto struct {
|
||||
IdDto
|
||||
Username *string `json:"username" form:"username" validate:"omitempty,min=6,max=32,validateStr"`
|
||||
Pass *string `json:"pass" form:"pass" validate:"omitempty,min=6,max=32,validateStr"`
|
||||
ConPass *string `json:"conPass" form:"conPass" validate:"omitempty,min=6,max=32,validateStr"`
|
||||
Quota *int64 `json:"quota" form:"quota" validate:"omitempty,min=-1"`
|
||||
ExpireTime *int64 `json:"expireTime" form:"expireTime" validate:"omitempty,min=0"`
|
||||
DeviceNo *int64 `json:"deviceNo" form:"deviceNo" validate:"omitempty,min=1"`
|
||||
Deleted *int64 `json:"deleted" form:"deleted" validate:"omitempty,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=32"`
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dto
|
||||
|
||||
type LoginDto struct {
|
||||
Username *string `json:"username" form:"username" validate:"required,min=6,max=32,validateStr"`
|
||||
Pass *string `json:"pass" form:"pass" validate:"required,min=6,max=64"`
|
||||
}
|
||||
|
||||
@@ -6,15 +6,6 @@ type Hysteria2AuthDto struct {
|
||||
Tx *int64 `json:"tx" form:"tx" validate:"required"`
|
||||
}
|
||||
|
||||
type Hysteria2KickDto struct {
|
||||
Ids []int64 `json:"ids" form:"ids" validate:"required"`
|
||||
KickUtilTime *int64 `json:"kickUtilTime" form:"kickUtilTime" validate:"required"` // Время снятия блокировки
|
||||
}
|
||||
|
||||
type Hysteria2VersionDto struct {
|
||||
Version *string `json:"version" form:"version" validate:"required,min=1,max=10"`
|
||||
}
|
||||
|
||||
type Hysteria2UrlDto struct {
|
||||
AccountId *int64 `json:"accountId" form:"accountId" validate:"required,gt=0"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package dto
|
||||
|
||||
type PeerPageDto struct {
|
||||
BaseDto
|
||||
Name *string `json:"name" form:"name" validate:"omitempty,min=1,max=32"`
|
||||
Disabled *int64 `json:"disabled" form:"disabled" validate:"omitempty,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=64"`
|
||||
}
|
||||
|
||||
type PeerSaveDto struct {
|
||||
Name *string `json:"name" form:"name" validate:"required,min=1,max=32,validateStr"`
|
||||
Secret *string `json:"secret" form:"secret" validate:"omitempty,min=6,max=128"`
|
||||
QuotaBytes *int64 `json:"quotaBytes" form:"quotaBytes" validate:"required,min=-1"`
|
||||
ExpiresAt *int64 `json:"expiresAt" form:"expiresAt" validate:"required,min=0"`
|
||||
MaxDevices *int64 `json:"maxDevices" form:"maxDevices" validate:"required,min=1"`
|
||||
Disabled *int64 `json:"disabled" form:"disabled" validate:"required,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=64"`
|
||||
}
|
||||
|
||||
type PeerUpdateDto struct {
|
||||
IdDto
|
||||
Name *string `json:"name" form:"name" validate:"omitempty,min=1,max=32,validateStr"`
|
||||
Secret *string `json:"secret" form:"secret" validate:"omitempty,min=6,max=128"`
|
||||
QuotaBytes *int64 `json:"quotaBytes" form:"quotaBytes" validate:"omitempty,min=-1"`
|
||||
ExpiresAt *int64 `json:"expiresAt" form:"expiresAt" validate:"omitempty,min=0"`
|
||||
MaxDevices *int64 `json:"maxDevices" form:"maxDevices" validate:"omitempty,min=1"`
|
||||
Disabled *int64 `json:"disabled" form:"disabled" validate:"omitempty,oneof=0 1"`
|
||||
Remark *string `json:"remark" form:"remark" validate:"omitempty,min=0,max=64"`
|
||||
}
|
||||
|
||||
type PeerKickDto struct {
|
||||
BannedUntil *int64 `json:"bannedUntil" form:"bannedUntil" validate:"required,min=0"`
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ type Peer struct {
|
||||
Remark *string `gorm:"column:remark;default:''" json:"remark"`
|
||||
AuthId *string `gorm:"column:auth_id;default:''" json:"authId"`
|
||||
SecretDigest *string `gorm:"column:secret_digest;default:''" json:"secretDigest"`
|
||||
SecretCiphertext *string `gorm:"column:secret_ciphertext;default:''" json:"secretCiphertext"`
|
||||
SecretEncrypted *string `gorm:"column:secret_ciphertext;default:''" json:"-"`
|
||||
QuotaBytes *int64 `gorm:"column:quota_bytes;default:0" json:"quotaBytes"`
|
||||
DownloadBytes *int64 `gorm:"column:download_bytes;default:0" json:"downloadBytes"`
|
||||
UploadBytes *int64 `gorm:"column:upload_bytes;default:0" json:"uploadBytes"`
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
package vo
|
||||
|
||||
type AccountVo struct {
|
||||
BaseVo
|
||||
Username string `json:"username"`
|
||||
Quota int64 `json:"quota"`
|
||||
Download int64 `json:"download"`
|
||||
Upload int64 `json:"upload"`
|
||||
ExpireTime int64 `json:"expireTime"`
|
||||
KickUtilTime int64 `json:"kickUtilTime"` // Offline remaining time
|
||||
DeviceNo int64 `json:"deviceNo"` // Limit the number of devices
|
||||
Role string `json:"role"`
|
||||
Deleted int64 `json:"deleted"`
|
||||
|
||||
Online bool `json:"online"` // online status
|
||||
Device int64 `json:"device"` // Number of online devices
|
||||
|
||||
LoginAt int64 `json:"loginAt"`
|
||||
ConAt int64 `json:"conAt"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
type AccountPageVo struct {
|
||||
AccountVos []AccountVo `json:"records"`
|
||||
Total int64 `json:"total"`
|
||||
}
|
||||
|
||||
type AccountInfoVo struct {
|
||||
Id int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package vo
|
||||
|
||||
type AdminInfoVo struct {
|
||||
Id int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
ForcePasswordChange bool `json:"forcePasswordChange"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package vo
|
||||
|
||||
type PeerVo struct {
|
||||
BaseVo
|
||||
Name string `json:"name"`
|
||||
Remark string `json:"remark"`
|
||||
AuthId string `json:"authId"`
|
||||
QuotaBytes int64 `json:"quotaBytes"`
|
||||
DownloadBytes int64 `json:"downloadBytes"`
|
||||
UploadBytes int64 `json:"uploadBytes"`
|
||||
ExpiresAt int64 `json:"expiresAt"`
|
||||
MaxDevices int64 `json:"maxDevices"`
|
||||
Disabled int64 `json:"disabled"`
|
||||
BannedUntil int64 `json:"bannedUntil"`
|
||||
LastConnectionAt int64 `json:"lastConnectionAt"`
|
||||
|
||||
Online bool `json:"online"`
|
||||
OnlineDevices int64 `json:"onlineDevices"`
|
||||
}
|
||||
|
||||
type PeerPageVo struct {
|
||||
Records []PeerVo `json:"records"`
|
||||
Total int64 `json:"total"`
|
||||
}
|
||||
|
||||
type PeerClientConfigVo struct {
|
||||
Url string `json:"url"`
|
||||
QrCode []byte `json:"qrCode"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user