diff --git a/backend/api/api.go b/backend/api/api.go index da0dc4c..a883947 100644 --- a/backend/api/api.go +++ b/backend/api/api.go @@ -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) } diff --git a/backend/database/db.go b/backend/database/db.go index a6b1d96..efbe99b 100644 --- a/backend/database/db.go +++ b/backend/database/db.go @@ -54,6 +54,7 @@ func InitDB(dbPath string) error { err = db.AutoMigrate( &model.Setting{}, + &model.Tls{}, &model.User{}, &model.Stats{}, &model.Client{}, diff --git a/backend/database/model/model.go b/backend/database/model/model.go index 8e42549..9f06842 100644 --- a/backend/database/model/model.go +++ b/backend/database/model/model.go @@ -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"` diff --git a/backend/service/config.go b/backend/service/config.go index 0816afb..d30c0cf 100644 --- a/backend/service/config.go +++ b/backend/service/config.go @@ -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 diff --git a/backend/service/tls.go b/backend/service/tls.go new file mode 100644 index 0000000..578aef1 --- /dev/null +++ b/backend/service/tls.go @@ -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 +} diff --git a/frontend/src/components/Acme.vue b/frontend/src/components/Acme.vue new file mode 100644 index 0000000..9fcc3d3 --- /dev/null +++ b/frontend/src/components/Acme.vue @@ -0,0 +1,252 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/Ech.vue b/frontend/src/components/Ech.vue new file mode 100644 index 0000000..1c0edb9 --- /dev/null +++ b/frontend/src/components/Ech.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/InTLS.vue b/frontend/src/components/InTLS.vue index 09cb00b..87732a4 100644 --- a/frontend/src/components/InTLS.vue +++ b/frontend/src/components/InTLS.vue @@ -1,11 +1,20 @@