all adjustments

This commit is contained in:
Alireza Ahmadi
2025-01-03 23:32:03 +01:00
parent ed48cdca33
commit fe428ed412
62 changed files with 2352 additions and 1975 deletions
+108 -10
View File
@@ -1,9 +1,11 @@
package api
import (
"encoding/json"
"s-ui/logger"
"s-ui/service"
"s-ui/util"
"s-ui/util/common"
"strconv"
"strings"
@@ -17,6 +19,8 @@ type APIHandler struct {
service.ClientService
service.TlsService
service.InboundService
service.OutboundService
service.EndpointService
service.PanelService
service.StatsService
service.ServerService
@@ -43,6 +47,7 @@ func (a *APIHandler) postHandler(c *gin.Context) {
var err error
action := c.Param("postAction")
remoteIP := getRemoteIp(c)
loginUser := GetLoginUser(c)
switch action {
case "login":
@@ -79,13 +84,21 @@ func (a *APIHandler) postHandler(c *gin.Context) {
jsonMsg(c, "", err)
}
case "save":
loginUser := GetLoginUser(c)
data := map[string]string{}
err = c.ShouldBind(&data)
if err == nil {
err = a.ConfigService.SaveChanges(data, loginUser)
obj := c.Request.FormValue("object")
act := c.Request.FormValue("action")
data := c.Request.FormValue("data")
userLinks := c.Request.FormValue("userLinks")
outJsons := c.Request.FormValue("outJsons")
err = a.ConfigService.Save(obj, act, json.RawMessage(data), json.RawMessage(userLinks), json.RawMessage(outJsons), loginUser)
if err != nil {
jsonMsg(c, "save", err)
return
}
jsonMsg(c, "save", err)
err = a.loadPartialData(c, obj, len(outJsons) > 5, len(userLinks) > 5)
if err != nil {
jsonMsg(c, obj, err)
}
return
case "restartApp":
err = a.PanelService.RestartPanel(3)
jsonMsg(c, "restartApp", err)
@@ -97,7 +110,7 @@ func (a *APIHandler) postHandler(c *gin.Context) {
result, _, err := util.GetOutbound(link, 0)
jsonObj(c, result, err)
default:
jsonMsg(c, "API call", nil)
jsonMsg(c, "failed", common.NewError("unknown action: ", action))
}
}
@@ -119,6 +132,12 @@ func (a *APIHandler) getHandler(c *gin.Context) {
return
}
jsonObj(c, data, nil)
case "inbounds", "outbounds", "endpoints", "tls", "clients", "config":
err := a.loadPartialData(c, action, false, false)
if err != nil {
jsonMsg(c, action, err)
}
return
case "users":
users, err := a.UserService.GetUsers()
if err != nil {
@@ -170,7 +189,7 @@ func (a *APIHandler) getHandler(c *gin.Context) {
keypair := a.ServerService.GenKeypair(kType, options)
jsonObj(c, keypair, nil)
default:
jsonMsg(c, "API call", nil)
jsonMsg(c, "failed", common.NewError("unknown action: ", action))
}
}
@@ -195,7 +214,7 @@ func (a *APIHandler) loadData(c *gin.Context) (interface{}, error) {
return "", err
}
if isUpdated {
config, err := a.ConfigService.GetConfig()
config, err := a.SettingService.GetConfig()
if err != nil {
return "", err
}
@@ -211,14 +230,24 @@ func (a *APIHandler) loadData(c *gin.Context) (interface{}, error) {
if err != nil {
return "", err
}
outbounds, err := a.OutboundService.GetAll()
if err != nil {
return "", err
}
endpoints, err := a.EndpointService.GetAll()
if err != nil {
return "", err
}
subURI, err := a.SettingService.GetFinalSubURI(strings.Split(c.Request.Host, ":")[0])
if err != nil {
return "", err
}
data["config"] = *config
data["config"] = json.RawMessage(config)
data["clients"] = clients
data["tls"] = tlsConfigs
data["inbounds"] = inbounds
data["outbounds"] = outbounds
data["endpoints"] = endpoints
data["subURI"] = subURI
data["onlines"] = onlines
} else {
@@ -227,3 +256,72 @@ func (a *APIHandler) loadData(c *gin.Context) (interface{}, error) {
return data, nil
}
func (a *APIHandler) loadPartialData(c *gin.Context, obj string, plusInbounds bool, plusClients bool) error {
data := make(map[string]interface{}, 0)
switch obj {
case "inbounds":
id := c.Query("id")
inbounds, err := a.InboundService.Get(id)
if err != nil {
return err
}
data[obj] = inbounds
case "outbounds":
outbounds, err := a.OutboundService.GetAll()
if err != nil {
return err
}
data[obj] = outbounds
case "endpoints":
endpoints, err := a.EndpointService.GetAll()
if err != nil {
return err
}
data[obj] = endpoints
case "tls":
tlsConfigs, err := a.TlsService.GetAll()
if err != nil {
return err
}
data[obj] = tlsConfigs
case "clients":
clients, err := a.ClientService.GetAll()
if err != nil {
return err
}
data[obj] = clients
case "config":
config, err := a.SettingService.GetConfig()
if err != nil {
return err
}
data[obj] = json.RawMessage(config)
}
if plusInbounds {
inbounds, err := a.InboundService.GetAll()
if err != nil {
return err
}
data["inbounds"] = inbounds
}
if plusClients {
clients, err := a.ClientService.GetAll()
if err != nil {
return err
}
data["clients"] = clients
}
jsonObj(c, data, nil)
return nil
}
func (a *APIHandler) postActions(c *gin.Context) (string, json.RawMessage, error) {
var data map[string]json.RawMessage
err := c.ShouldBind(&data)
if err != nil {
return "", nil, err
}
return string(data["action"]), data["data"], nil
}
+1 -1
View File
@@ -46,7 +46,7 @@ func jsonMsgObj(c *gin.Context, msg string, obj interface{}, err error) {
}
} else {
m.Success = false
m.Msg = msg + err.Error()
m.Msg = msg + ": " + err.Error()
logger.Warning("failed :", err)
}
c.JSON(http.StatusOK, m)