mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-03-01 01:20:49 +03:00
104 lines
3.5 KiB
Go
104 lines
3.5 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"x-ui/util/json_util"
|
|
"x-ui/xray"
|
|
)
|
|
|
|
type Protocol string
|
|
|
|
const (
|
|
VMESS Protocol = "vmess"
|
|
VLESS Protocol = "vless"
|
|
DOKODEMO Protocol = "dokodemo-door"
|
|
HTTP Protocol = "http"
|
|
Trojan Protocol = "trojan"
|
|
Shadowsocks Protocol = "shadowsocks"
|
|
Socks Protocol = "socks"
|
|
WireGuard Protocol = "wireguard"
|
|
)
|
|
|
|
type User struct {
|
|
Id int `json:"id" gorm:"primaryKey;autoIncrement"`
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
LoginSecret string `json:"loginSecret"`
|
|
}
|
|
|
|
type Inbound struct {
|
|
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
|
|
UserId int `json:"-" gorm:"index"`
|
|
Up int64 `json:"up" form:"up"`
|
|
Down int64 `json:"down" form:"down"`
|
|
Total int64 `json:"total" form:"total"`
|
|
Remark string `json:"remark" form:"remark"`
|
|
Enable bool `json:"enable" form:"enable"`
|
|
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`
|
|
ClientStats []xray.ClientTraffic `gorm:"foreignKey:InboundId;references:Id;constraint:OnDelete:CASCADE" json:"clientStats"`
|
|
|
|
// config part
|
|
Listen string `json:"listen" form:"listen"`
|
|
Port int `json:"port" form:"port"`
|
|
Protocol Protocol `json:"protocol" form:"protocol"`
|
|
Settings string `json:"settings" form:"settings"`
|
|
StreamSettings string `json:"streamSettings" form:"streamSettings"`
|
|
Tag string `json:"tag" form:"tag" gorm:"unique"`
|
|
Sniffing string `json:"sniffing" form:"sniffing"`
|
|
Allocate string `json:"allocate" form:"allocate"`
|
|
}
|
|
|
|
type OutboundTraffics struct {
|
|
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
|
|
Tag string `json:"tag" form:"tag" gorm:"unique"`
|
|
Up int64 `json:"up" form:"up" gorm:"default:0"`
|
|
Down int64 `json:"down" form:"down" gorm:"default:0"`
|
|
Total int64 `json:"total" form:"total" gorm:"default:0"`
|
|
}
|
|
|
|
type InboundClientIps struct {
|
|
Id int `json:"id" gorm:"primaryKey;autoIncrement"`
|
|
ClientEmail string `json:"clientEmail" form:"clientEmail" gorm:"unique"`
|
|
Ips string `json:"ips" form:"ips"`
|
|
}
|
|
|
|
func (i *Inbound) GenXrayInboundConfig() *xray.InboundConfig {
|
|
listen := i.Listen
|
|
if listen != "" {
|
|
listen = fmt.Sprintf("\"%v\"", listen)
|
|
}
|
|
return &xray.InboundConfig{
|
|
Listen: json_util.RawMessage(listen),
|
|
Port: i.Port,
|
|
Protocol: string(i.Protocol),
|
|
Settings: json_util.RawMessage(i.Settings),
|
|
StreamSettings: json_util.RawMessage(i.StreamSettings),
|
|
Tag: i.Tag,
|
|
Sniffing: json_util.RawMessage(i.Sniffing),
|
|
Allocate: json_util.RawMessage(i.Allocate),
|
|
}
|
|
}
|
|
|
|
type Setting struct {
|
|
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
|
|
Key string `json:"key" form:"key"`
|
|
Value string `json:"value" form:"value"`
|
|
}
|
|
|
|
type Client struct {
|
|
ID string `json:"id"`
|
|
Security string `json:"security"`
|
|
Password string `json:"password"`
|
|
Flow string `json:"flow"`
|
|
Email string `json:"email"`
|
|
LimitIP int `json:"limitIp"`
|
|
TotalGB int64 `json:"totalGB" form:"totalGB"`
|
|
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`
|
|
Enable bool `json:"enable" form:"enable"`
|
|
TgID int64 `json:"tgId" form:"tgId"`
|
|
SubID string `json:"subId" form:"subId"`
|
|
Comment string `json:"comment" form:"comment"`
|
|
Reset int `json:"reset" form:"reset"`
|
|
}
|