mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-07-02 04:52:08 +00:00
Delete database directory
This commit is contained in:
parent
2fc674dd4f
commit
d3d276e37c
2 changed files with 0 additions and 241 deletions
138
database/db.go
138
database/db.go
|
@ -1,138 +0,0 @@
|
||||||
package database
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
"io/fs"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
|
|
||||||
"x-ui/config"
|
|
||||||
"x-ui/database/model"
|
|
||||||
"x-ui/xray"
|
|
||||||
|
|
||||||
"gorm.io/driver/sqlite"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
)
|
|
||||||
|
|
||||||
var db *gorm.DB
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultUsername = "admin"
|
|
||||||
defaultPassword = "admin"
|
|
||||||
defaultSecret = ""
|
|
||||||
)
|
|
||||||
|
|
||||||
func initModels() error {
|
|
||||||
models := []interface{}{
|
|
||||||
&model.User{},
|
|
||||||
&model.Inbound{},
|
|
||||||
&model.OutboundTraffics{},
|
|
||||||
&model.Setting{},
|
|
||||||
&model.InboundClientIps{},
|
|
||||||
&xray.ClientTraffic{},
|
|
||||||
}
|
|
||||||
for _, model := range models {
|
|
||||||
if err := db.AutoMigrate(model); err != nil {
|
|
||||||
log.Printf("Error auto migrating model: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func initUser() error {
|
|
||||||
empty, err := isTableEmpty("users")
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Error checking if users table is empty: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if empty {
|
|
||||||
user := &model.User{
|
|
||||||
Username: defaultUsername,
|
|
||||||
Password: defaultPassword,
|
|
||||||
LoginSecret: defaultSecret,
|
|
||||||
}
|
|
||||||
return db.Create(user).Error
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func isTableEmpty(tableName string) (bool, error) {
|
|
||||||
var count int64
|
|
||||||
err := db.Table(tableName).Count(&count).Error
|
|
||||||
return count == 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func InitDB(dbPath string) error {
|
|
||||||
dir := path.Dir(dbPath)
|
|
||||||
err := os.MkdirAll(dir, fs.ModePerm)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var gormLogger logger.Interface
|
|
||||||
|
|
||||||
if config.IsDebug() {
|
|
||||||
gormLogger = logger.Default
|
|
||||||
} else {
|
|
||||||
gormLogger = logger.Discard
|
|
||||||
}
|
|
||||||
|
|
||||||
c := &gorm.Config{
|
|
||||||
Logger: gormLogger,
|
|
||||||
}
|
|
||||||
db, err = gorm.Open(sqlite.Open(dbPath), c)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := initModels(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := initUser(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func CloseDB() error {
|
|
||||||
if db != nil {
|
|
||||||
sqlDB, err := db.DB()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return sqlDB.Close()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetDB() *gorm.DB {
|
|
||||||
return db
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsNotFound(err error) bool {
|
|
||||||
return err == gorm.ErrRecordNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsSQLiteDB(file io.ReaderAt) (bool, error) {
|
|
||||||
signature := []byte("SQLite format 3\x00")
|
|
||||||
buf := make([]byte, len(signature))
|
|
||||||
_, err := file.ReadAt(buf, 0)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return bytes.Equal(buf, signature), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Checkpoint() error {
|
|
||||||
// Update WAL
|
|
||||||
err := db.Exec("PRAGMA wal_checkpoint;").Error
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
|
@ -1,103 +0,0 @@
|
||||||
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:"-"`
|
|
||||||
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" json:"clientStats" form:"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"`
|
|
||||||
}
|
|
Loading…
Reference in a new issue