This commit is contained in:
Alireza Ahmadi
2024-06-06 08:24:08 +02:00
parent f136229539
commit c994f4b24a
26 changed files with 1335 additions and 81 deletions
+7 -2
View File
@@ -15,6 +15,7 @@ type APIHandler struct {
service.UserService
service.ConfigService
service.ClientService
service.TlsService
service.PanelService
service.StatsService
service.ServerService
@@ -159,7 +160,7 @@ func (a *APIHandler) getHandler(c *gin.Context) {
func (a *APIHandler) loadData(c *gin.Context) (string, error) {
var data string
lu := c.Query("lu")
isUpdated, err := a.ConfigService.CheckChnages(lu)
isUpdated, err := a.ConfigService.CheckChanges(lu)
if err != nil {
return "", err
}
@@ -176,11 +177,15 @@ func (a *APIHandler) loadData(c *gin.Context) (string, error) {
if err != nil {
return "", err
}
tlsConfigs, err := a.TlsService.GetAll()
if err != nil {
return "", err
}
subURI, err := a.SettingService.GetFinalSubURI(strings.Split(c.Request.Host, ":")[0])
if err != nil {
return "", err
}
data = fmt.Sprintf(`{"config": %s,"clients": %s,"subURI": "%s", "onlines": %s}`, string(*config), clients, subURI, onlines)
data = fmt.Sprintf(`{"config": %s, "clients": %s, "tls": %s, "subURI": "%s", "onlines": %s}`, string(*config), clients, tlsConfigs, subURI, onlines)
} else {
data = fmt.Sprintf(`{"onlines": %s}`, onlines)
}
+1
View File
@@ -54,6 +54,7 @@ func InitDB(dbPath string) error {
err = db.AutoMigrate(
&model.Setting{},
&model.Tls{},
&model.User{},
&model.Stats{},
&model.Client{},
+8
View File
@@ -8,6 +8,14 @@ type Setting struct {
Value string `json:"value" form:"value"`
}
type Tls struct {
Id uint `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
Name string `json:"name" form:"name"`
Inbounds json.RawMessage `json:"inbounds" form:"inbounds"`
Server json.RawMessage `json:"server" form:"server"`
Client json.RawMessage `json:"client" form:"client"`
}
type User struct {
Id uint `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
Username string `json:"username" form:"username"`
+15 -2
View File
@@ -16,6 +16,7 @@ var LastUpdate int64
type ConfigService struct {
ClientService
TlsService
singbox.Controller
SettingService
}
@@ -67,13 +68,19 @@ func (s *ConfigService) GetConfig() (*[]byte, error) {
func (s *ConfigService) SaveChanges(changes map[string]string, loginUser string) error {
var err error
var clientChanges, settingChanges, configChanges []model.Changes
var clientChanges, tlsChanges, settingChanges, configChanges []model.Changes
if _, ok := changes["clients"]; ok {
err = json.Unmarshal([]byte(changes["clients"]), &clientChanges)
if err != nil {
return err
}
}
if _, ok := changes["tls"]; ok {
err = json.Unmarshal([]byte(changes["tls"]), &tlsChanges)
if err != nil {
return err
}
}
if _, ok := changes["settings"]; ok {
err = json.Unmarshal([]byte(changes["settings"]), &settingChanges)
if err != nil {
@@ -103,6 +110,12 @@ func (s *ConfigService) SaveChanges(changes map[string]string, loginUser string)
return err
}
}
if len(tlsChanges) > 0 {
err = s.TlsService.Save(tx, tlsChanges)
if err != nil {
return err
}
}
if len(settingChanges) > 0 {
err = s.SettingService.Save(tx, settingChanges)
if err != nil {
@@ -169,7 +182,7 @@ func (s *ConfigService) SaveChanges(changes map[string]string, loginUser string)
// Log changes
dt := time.Now().Unix()
allChanges := append(append(clientChanges, settingChanges...), configChanges...)
allChanges := append(append(clientChanges, settingChanges...), append(configChanges, tlsChanges...)...)
for index := range allChanges {
allChanges[index].DateTime = dt
allChanges[index].Actor = loginUser
+49
View File
@@ -0,0 +1,49 @@
package service
import (
"encoding/json"
"s-ui/database"
"s-ui/database/model"
"gorm.io/gorm"
)
type TlsService struct {
}
func (s *TlsService) GetAll() (string, error) {
db := database.GetDB()
tlsConfig := []model.Tls{}
err := db.Model(model.Tls{}).Scan(&tlsConfig).Error
if err != nil {
return "", err
}
data, err := json.Marshal(tlsConfig)
if err != nil {
return "", err
}
return string(data), nil
}
func (s *TlsService) Save(tx *gorm.DB, changes []model.Changes) error {
var err error
for _, change := range changes {
tlsConfig := model.Tls{}
err = json.Unmarshal(change.Obj, &tlsConfig)
if err != nil {
return err
}
switch change.Action {
case "new":
err = tx.Create(&tlsConfig).Error
case "del":
err = tx.Where("id = ?", change.Index).Delete(model.Tls{}).Error
default:
err = tx.Save(tlsConfig).Error
}
if err != nil {
return err
}
}
return err
}