all adjustments
This commit is contained in:
+108
-10
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user