refactor: project directory structure
|
@ -1,4 +1,4 @@
|
|||
.git
|
||||
frontend/node_modules
|
||||
app/node_modules
|
||||
.idea
|
||||
tmp
|
||||
|
|
|
@ -2,8 +2,8 @@ package api
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
analytic2 "github.com/0xJacky/Nginx-UI/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
"github.com/shirou/gopsutil/v3/host"
|
||||
"github.com/shirou/gopsutil/v3/load"
|
||||
|
@ -28,8 +28,8 @@ type Stat struct {
|
|||
Uptime uint64 `json:"uptime"`
|
||||
LoadAvg *load.AvgStat `json:"loadavg"`
|
||||
CPU CPUStat `json:"cpu"`
|
||||
Memory analytic.MemStat `json:"memory"`
|
||||
Disk analytic.DiskStat `json:"disk"`
|
||||
Memory analytic2.MemStat `json:"memory"`
|
||||
Disk analytic2.DiskStat `json:"disk"`
|
||||
Network net.IOCountersStat `json:"network"`
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ func Analytic(c *gin.Context) {
|
|||
var stat Stat
|
||||
|
||||
for {
|
||||
stat.Memory, err = analytic.GetMemoryStat()
|
||||
stat.Memory, err = analytic2.GetMemoryStat()
|
||||
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
@ -76,7 +76,7 @@ func Analytic(c *gin.Context) {
|
|||
|
||||
stat.LoadAvg, _ = load.Avg()
|
||||
|
||||
stat.Disk, err = analytic.GetDiskStat()
|
||||
stat.Disk, err = analytic2.GetDiskStat()
|
||||
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
@ -105,14 +105,14 @@ func Analytic(c *gin.Context) {
|
|||
func GetAnalyticInit(c *gin.Context) {
|
||||
cpuInfo, _ := cpu.Info()
|
||||
network, _ := net.IOCounters(false)
|
||||
memory, err := analytic.GetMemoryStat()
|
||||
memory, err := analytic2.GetMemoryStat()
|
||||
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
diskStat, err := analytic.GetDiskStat()
|
||||
diskStat, err := analytic2.GetDiskStat()
|
||||
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
@ -138,17 +138,17 @@ func GetAnalyticInit(c *gin.Context) {
|
|||
"host": hostInfo,
|
||||
"cpu": gin.H{
|
||||
"info": cpuInfo,
|
||||
"user": analytic.CpuUserRecord,
|
||||
"total": analytic.CpuTotalRecord,
|
||||
"user": analytic2.CpuUserRecord,
|
||||
"total": analytic2.CpuTotalRecord,
|
||||
},
|
||||
"network": gin.H{
|
||||
"init": _net,
|
||||
"bytesRecv": analytic.NetRecvRecord,
|
||||
"bytesSent": analytic.NetSentRecord,
|
||||
"bytesRecv": analytic2.NetRecvRecord,
|
||||
"bytesSent": analytic2.NetSentRecord,
|
||||
},
|
||||
"disk_io": gin.H{
|
||||
"writes": analytic.DiskWriteRecord,
|
||||
"reads": analytic.DiskReadRecord,
|
||||
"writes": analytic2.DiskWriteRecord,
|
||||
"reads": analytic2.DiskReadRecord,
|
||||
},
|
||||
"memory": memory,
|
||||
"disk": diskStat,
|
||||
|
@ -173,7 +173,7 @@ func GetNodeStat(c *gin.Context) {
|
|||
|
||||
for {
|
||||
// write
|
||||
err = ws.WriteJSON(analytic.GetNodeStat())
|
||||
err = ws.WriteJSON(analytic2.GetNodeStat())
|
||||
if err != nil || websocket.IsUnexpectedCloseError(err,
|
||||
websocket.CloseGoingAway,
|
||||
websocket.CloseNoStatusReceived,
|
||||
|
@ -203,7 +203,7 @@ func GetNodesAnalytic(c *gin.Context) {
|
|||
|
||||
for {
|
||||
// write
|
||||
err = ws.WriteJSON(analytic.NodeMap)
|
||||
err = ws.WriteJSON(analytic2.NodeMap)
|
||||
if err != nil || websocket.IsUnexpectedCloseError(err,
|
||||
websocket.CloseGoingAway,
|
||||
websocket.CloseNoStatusReceived,
|
|
@ -1,7 +1,7 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/gin-gonic/gin"
|
||||
val "github.com/go-playground/validator/v10"
|
||||
"net/http"
|
|
@ -2,10 +2,10 @@ package api
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"net/http"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
|
@ -1,7 +1,7 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/unknwon/com"
|
||||
"net/http"
|
|
@ -1,11 +1,11 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/cert/dns"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
cert2 "github.com/0xJacky/Nginx-UI/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/internal/cert/dns"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/spf13/cast"
|
||||
|
@ -69,7 +69,7 @@ func IssueCert(c *gin.Context) {
|
|||
}(ws)
|
||||
|
||||
// read
|
||||
buffer := &cert.ConfigPayload{}
|
||||
buffer := &cert2.ConfigPayload{}
|
||||
|
||||
err = ws.ReadJSON(buffer)
|
||||
|
||||
|
@ -88,13 +88,13 @@ func IssueCert(c *gin.Context) {
|
|||
logChan := make(chan string, 1)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
go cert.IssueCert(buffer, logChan, errChan)
|
||||
go cert2.IssueCert(buffer, logChan, errChan)
|
||||
|
||||
go handleIssueCertLogChan(ws, logChan)
|
||||
|
||||
// block, until errChan closes
|
||||
for err = range errChan {
|
||||
errLog := &cert.AutoCertErrorLog{}
|
||||
errLog := &cert2.AutoCertErrorLog{}
|
||||
errLog.SetCertModel(&certModel)
|
||||
errLog.Exit("issue cert", err)
|
||||
|
||||
|
@ -169,7 +169,7 @@ func getCert(c *gin.Context, certModel *model.Cert) {
|
|||
sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath)
|
||||
}
|
||||
|
||||
pubKey, err := cert.GetCertInfo(certModel.SSLCertificatePath)
|
||||
pubKey, err := cert2.GetCertInfo(certModel.SSLCertificatePath)
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
|
@ -1,10 +1,10 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/config_list"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/internal/config_list"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/sashabaranov/go-openai"
|
||||
"net/http"
|
||||
|
@ -22,7 +22,7 @@ func GetConfigs(c *gin.Context) {
|
|||
"is_dir": "bool",
|
||||
}
|
||||
|
||||
configFiles, err := os.ReadDir(nginx.GetConfPath(dir))
|
||||
configFiles, err := os.ReadDir(nginx2.GetConfPath(dir))
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
|
@ -42,7 +42,7 @@ func GetConfigs(c *gin.Context) {
|
|||
}
|
||||
case mode&os.ModeSymlink != 0: // is a symbol
|
||||
var targetPath string
|
||||
targetPath, err = os.Readlink(nginx.GetConfPath(file.Name()))
|
||||
targetPath, err = os.Readlink(nginx2.GetConfPath(file.Name()))
|
||||
if err != nil {
|
||||
logger.Error("Read Symlink Error", targetPath, err)
|
||||
continue
|
||||
|
@ -77,7 +77,7 @@ func GetConfigs(c *gin.Context) {
|
|||
|
||||
func GetConfig(c *gin.Context) {
|
||||
name := c.Param("name")
|
||||
path := nginx.GetConfPath("/", name)
|
||||
path := nginx2.GetConfPath("/", name)
|
||||
|
||||
stat, err := os.Stat(path)
|
||||
|
||||
|
@ -130,7 +130,7 @@ func AddConfig(c *gin.Context) {
|
|||
name := request.Name
|
||||
content := request.Content
|
||||
|
||||
path := nginx.GetConfPath("/", name)
|
||||
path := nginx2.GetConfPath("/", name)
|
||||
|
||||
if _, err = os.Stat(path); err == nil {
|
||||
c.JSON(http.StatusNotAcceptable, gin.H{
|
||||
|
@ -147,8 +147,8 @@ func AddConfig(c *gin.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
output := nginx.Reload()
|
||||
if nginx.GetLogLevel(output) >= nginx.Warn {
|
||||
output := nginx2.Reload()
|
||||
if nginx2.GetLogLevel(output) >= nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
})
|
||||
|
@ -174,7 +174,7 @@ func EditConfig(c *gin.Context) {
|
|||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
path := nginx.GetConfPath("/", name)
|
||||
path := nginx2.GetConfPath("/", name)
|
||||
content := request.Content
|
||||
|
||||
origContent, err := os.ReadFile(path)
|
||||
|
@ -192,9 +192,9 @@ func EditConfig(c *gin.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
output := nginx.Reload()
|
||||
output := nginx2.Reload()
|
||||
|
||||
if nginx.GetLogLevel(output) >= nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) >= nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
})
|
130
api/dns_credential.go
Normal file
|
@ -0,0 +1,130 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/internal/cert/dns"
|
||||
model2 "github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/cast"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func GetDnsCredential(c *gin.Context) {
|
||||
id := cast.ToInt(c.Param("id"))
|
||||
|
||||
d := query.DnsCredential
|
||||
|
||||
dnsCredential, err := d.FirstByID(id)
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
type apiDnsCredential struct {
|
||||
model2.Model
|
||||
Name string `json:"name"`
|
||||
dns.Config
|
||||
}
|
||||
c.JSON(http.StatusOK, apiDnsCredential{
|
||||
Model: dnsCredential.Model,
|
||||
Name: dnsCredential.Name,
|
||||
Config: *dnsCredential.Config,
|
||||
})
|
||||
}
|
||||
|
||||
func GetDnsCredentialList(c *gin.Context) {
|
||||
d := query.DnsCredential
|
||||
provider := c.Query("provider")
|
||||
var data []*model2.DnsCredential
|
||||
var err error
|
||||
if provider != "" {
|
||||
data, err = d.Where(d.Provider.Eq(provider)).Find()
|
||||
} else {
|
||||
data, err = d.Find()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"data": data,
|
||||
})
|
||||
}
|
||||
|
||||
type DnsCredentialManageJson struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Provider string `json:"provider"`
|
||||
dns.Config
|
||||
}
|
||||
|
||||
func AddDnsCredential(c *gin.Context) {
|
||||
var json DnsCredentialManageJson
|
||||
if !BindAndValid(c, &json) {
|
||||
return
|
||||
}
|
||||
|
||||
json.Config.Name = json.Provider
|
||||
dnsCredential := model2.DnsCredential{
|
||||
Name: json.Name,
|
||||
Config: &json.Config,
|
||||
Provider: json.Provider,
|
||||
}
|
||||
|
||||
d := query.DnsCredential
|
||||
|
||||
err := d.Create(&dnsCredential)
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, dnsCredential)
|
||||
}
|
||||
|
||||
func EditDnsCredential(c *gin.Context) {
|
||||
id := cast.ToInt(c.Param("id"))
|
||||
|
||||
var json DnsCredentialManageJson
|
||||
if !BindAndValid(c, &json) {
|
||||
return
|
||||
}
|
||||
|
||||
d := query.DnsCredential
|
||||
|
||||
dnsCredential, err := d.FirstByID(id)
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
json.Config.Name = json.Provider
|
||||
_, err = d.Where(d.ID.Eq(dnsCredential.ID)).Updates(&model2.DnsCredential{
|
||||
Name: json.Name,
|
||||
Config: &json.Config,
|
||||
Provider: json.Provider,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
GetDnsCredential(c)
|
||||
}
|
||||
|
||||
func DeleteDnsCredential(c *gin.Context) {
|
||||
id := cast.ToInt(c.Param("id"))
|
||||
d := query.DnsCredential
|
||||
|
||||
dnsCredential, err := d.FirstByID(id)
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
err = d.DeleteByID(dnsCredential.ID)
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusNoContent, nil)
|
||||
}
|
|
@ -1,13 +1,13 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/config_list"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/helper"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/internal/config_list"
|
||||
helper2 "github.com/0xJacky/Nginx-UI/internal/helper"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/sashabaranov/go-openai"
|
||||
"net/http"
|
||||
|
@ -27,14 +27,14 @@ func GetDomains(c *gin.Context) {
|
|||
"modify": "time",
|
||||
}
|
||||
|
||||
configFiles, err := os.ReadDir(nginx.GetConfPath("sites-available"))
|
||||
configFiles, err := os.ReadDir(nginx2.GetConfPath("sites-available"))
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled"))
|
||||
enabledConfig, err := os.ReadDir(nginx2.GetConfPath("sites-enabled"))
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
|
@ -88,7 +88,7 @@ func GetDomain(c *gin.Context) {
|
|||
name = rewriteName.(string)
|
||||
}
|
||||
|
||||
path := nginx.GetConfPath("sites-available", name)
|
||||
path := nginx2.GetConfPath("sites-available", name)
|
||||
file, err := os.Stat(path)
|
||||
if os.IsNotExist(err) {
|
||||
c.JSON(http.StatusNotFound, gin.H{
|
||||
|
@ -99,7 +99,7 @@ func GetDomain(c *gin.Context) {
|
|||
|
||||
enabled := true
|
||||
|
||||
if _, err := os.Stat(nginx.GetConfPath("sites-enabled", name)); os.IsNotExist(err) {
|
||||
if _, err := os.Stat(nginx2.GetConfPath("sites-enabled", name)); os.IsNotExist(err) {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ func GetDomain(c *gin.Context) {
|
|||
}
|
||||
|
||||
c.Set("maybe_error", "nginx_config_syntax_error")
|
||||
config, err := nginx.ParseNgxConfig(path)
|
||||
config, err := nginx2.ParseNgxConfig(path)
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
|
@ -218,9 +218,9 @@ func SaveDomain(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
path := nginx.GetConfPath("sites-available", name)
|
||||
path := nginx2.GetConfPath("sites-available", name)
|
||||
|
||||
if !json.Overwrite && helper.FileExists(path) {
|
||||
if !json.Overwrite && helper2.FileExists(path) {
|
||||
c.JSON(http.StatusNotAcceptable, gin.H{
|
||||
"message": "File exists",
|
||||
})
|
||||
|
@ -232,24 +232,24 @@ func SaveDomain(c *gin.Context) {
|
|||
ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
enabledConfigFilePath := nginx.GetConfPath("sites-enabled", name)
|
||||
enabledConfigFilePath := nginx2.GetConfPath("sites-enabled", name)
|
||||
// rename the config file if needed
|
||||
if name != json.Name {
|
||||
newPath := nginx.GetConfPath("sites-available", json.Name)
|
||||
newPath := nginx2.GetConfPath("sites-available", json.Name)
|
||||
s := query.Site
|
||||
_, err = s.Where(s.Path.Eq(path)).Update(s.Path, newPath)
|
||||
|
||||
// check if dst file exists, do not rename
|
||||
if helper.FileExists(newPath) {
|
||||
if helper2.FileExists(newPath) {
|
||||
c.JSON(http.StatusNotAcceptable, gin.H{
|
||||
"message": "File exists",
|
||||
})
|
||||
return
|
||||
}
|
||||
// recreate soft link
|
||||
if helper.FileExists(enabledConfigFilePath) {
|
||||
if helper2.FileExists(enabledConfigFilePath) {
|
||||
_ = os.Remove(enabledConfigFilePath)
|
||||
enabledConfigFilePath = nginx.GetConfPath("sites-enabled", json.Name)
|
||||
enabledConfigFilePath = nginx2.GetConfPath("sites-enabled", json.Name)
|
||||
err = os.Symlink(newPath, enabledConfigFilePath)
|
||||
|
||||
if err != nil {
|
||||
|
@ -268,12 +268,12 @@ func SaveDomain(c *gin.Context) {
|
|||
c.Set("rewriteConfigFileName", name)
|
||||
}
|
||||
|
||||
enabledConfigFilePath = nginx.GetConfPath("sites-enabled", name)
|
||||
if helper.FileExists(enabledConfigFilePath) {
|
||||
enabledConfigFilePath = nginx2.GetConfPath("sites-enabled", name)
|
||||
if helper2.FileExists(enabledConfigFilePath) {
|
||||
// Test nginx configuration
|
||||
output := nginx.TestConf()
|
||||
output := nginx2.TestConf()
|
||||
|
||||
if nginx.GetLogLevel(output) > nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) > nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
"error": "nginx_config_syntax_error",
|
||||
|
@ -281,9 +281,9 @@ func SaveDomain(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
output = nginx.Reload()
|
||||
output = nginx2.Reload()
|
||||
|
||||
if nginx.GetLogLevel(output) > nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) > nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
})
|
||||
|
@ -295,8 +295,8 @@ func SaveDomain(c *gin.Context) {
|
|||
}
|
||||
|
||||
func EnableDomain(c *gin.Context) {
|
||||
configFilePath := nginx.GetConfPath("sites-available", c.Param("name"))
|
||||
enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name"))
|
||||
configFilePath := nginx2.GetConfPath("sites-available", c.Param("name"))
|
||||
enabledConfigFilePath := nginx2.GetConfPath("sites-enabled", c.Param("name"))
|
||||
|
||||
_, err := os.Stat(configFilePath)
|
||||
|
||||
|
@ -315,9 +315,9 @@ func EnableDomain(c *gin.Context) {
|
|||
}
|
||||
|
||||
// Test nginx config, if not pass then disable the site.
|
||||
output := nginx.TestConf()
|
||||
output := nginx2.TestConf()
|
||||
|
||||
if nginx.GetLogLevel(output) > nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) > nginx2.Warn {
|
||||
_ = os.Remove(enabledConfigFilePath)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
|
@ -325,9 +325,9 @@ func EnableDomain(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
output = nginx.Reload()
|
||||
output = nginx2.Reload()
|
||||
|
||||
if nginx.GetLogLevel(output) > nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) > nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
})
|
||||
|
@ -340,7 +340,7 @@ func EnableDomain(c *gin.Context) {
|
|||
}
|
||||
|
||||
func DisableDomain(c *gin.Context) {
|
||||
enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name"))
|
||||
enabledConfigFilePath := nginx2.GetConfPath("sites-enabled", c.Param("name"))
|
||||
|
||||
_, err := os.Stat(enabledConfigFilePath)
|
||||
|
||||
|
@ -364,9 +364,9 @@ func DisableDomain(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
output := nginx.Reload()
|
||||
output := nginx2.Reload()
|
||||
|
||||
if nginx.GetLogLevel(output) > nginx.Warn {
|
||||
if nginx2.GetLogLevel(output) > nginx2.Warn {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"message": output,
|
||||
})
|
||||
|
@ -381,8 +381,8 @@ func DisableDomain(c *gin.Context) {
|
|||
func DeleteDomain(c *gin.Context) {
|
||||
var err error
|
||||
name := c.Param("name")
|
||||
availablePath := nginx.GetConfPath("sites-available", name)
|
||||
enabledPath := nginx.GetConfPath("sites-enabled", name)
|
||||
availablePath := nginx2.GetConfPath("sites-available", name)
|
||||
enabledPath := nginx2.GetConfPath("sites-enabled", name)
|
||||
|
||||
if _, err = os.Stat(availablePath); os.IsNotExist(err) {
|
||||
c.JSON(http.StatusNotFound, gin.H{
|
||||
|
@ -480,17 +480,17 @@ func DuplicateSite(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
src := nginx.GetConfPath("sites-available", name)
|
||||
dst := nginx.GetConfPath("sites-available", json.Name)
|
||||
src := nginx2.GetConfPath("sites-available", name)
|
||||
dst := nginx2.GetConfPath("sites-available", json.Name)
|
||||
|
||||
if helper.FileExists(dst) {
|
||||
if helper2.FileExists(dst) {
|
||||
c.JSON(http.StatusNotAcceptable, gin.H{
|
||||
"message": "File exists",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
_, err := helper.CopyFile(src, dst)
|
||||
_, err := helper2.CopyFile(src, dst)
|
||||
|
||||
if err != nil {
|
||||
ErrHandler(c, err)
|
||||
|
@ -512,7 +512,7 @@ func DomainEditByAdvancedMode(c *gin.Context) {
|
|||
}
|
||||
|
||||
name := c.Param("name")
|
||||
path := nginx.GetConfPath("sites-available", name)
|
||||
path := nginx2.GetConfPath("sites-available", name)
|
||||
|
||||
s := query.Site
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/environment"
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/internal/environment"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/cast"
|
||||
"net/http"
|
|
@ -1,10 +1,10 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/boot"
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/internal/boot"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
"golang.org/x/crypto/bcrypt"
|
|
@ -2,10 +2,10 @@ package api
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/helper"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/internal/helper"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/hpcloud/tail"
|
||||
|
@ -106,9 +106,9 @@ func GetNginxLogPage(c *gin.Context) {
|
|||
func getLogPath(control *controlStruct) (logPath string, err error) {
|
||||
switch control.Type {
|
||||
case "site":
|
||||
var config *nginx.NgxConfig
|
||||
path := nginx.GetConfPath("sites-available", control.ConfName)
|
||||
config, err = nginx.ParseNgxConfig(path)
|
||||
var config *nginx2.NgxConfig
|
||||
path := nginx2.GetConfPath("sites-available", control.ConfName)
|
||||
config, err = nginx2.ParseNgxConfig(path)
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, "error parsing ngx config")
|
||||
return
|
|
@ -1,14 +1,14 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
func BuildNginxConfig(c *gin.Context) {
|
||||
var ngxConf nginx.NgxConfig
|
||||
var ngxConf nginx2.NgxConfig
|
||||
if !BindAndValid(c, &ngxConf) {
|
||||
return
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ func TokenizeNginxConfig(c *gin.Context) {
|
|||
}
|
||||
|
||||
c.Set("maybe_error", "nginx_config_syntax_error")
|
||||
ngxConfig := nginx.ParseNgxConfigByContent(json.Content)
|
||||
ngxConfig := nginx2.ParseNgxConfigByContent(json.Content)
|
||||
|
||||
c.JSON(http.StatusOK, ngxConfig)
|
||||
|
||||
|
@ -45,12 +45,12 @@ func FormatNginxConfig(c *gin.Context) {
|
|||
|
||||
c.Set("maybe_error", "nginx_config_syntax_error")
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"content": nginx.FmtCode(json.Content),
|
||||
"content": nginx2.FmtCode(json.Content),
|
||||
})
|
||||
}
|
||||
|
||||
func NginxStatus(c *gin.Context) {
|
||||
pidPath := nginx.GetNginxPIDPath()
|
||||
pidPath := nginx2.GetNginxPIDPath()
|
||||
|
||||
running := true
|
||||
if fileInfo, err := os.Stat(pidPath); err != nil || fileInfo.Size() == 0 { // fileInfo.Size() == 0 no process id
|
||||
|
@ -63,25 +63,25 @@ func NginxStatus(c *gin.Context) {
|
|||
}
|
||||
|
||||
func ReloadNginx(c *gin.Context) {
|
||||
output := nginx.Reload()
|
||||
output := nginx2.Reload()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": output,
|
||||
"level": nginx.GetLogLevel(output),
|
||||
"level": nginx2.GetLogLevel(output),
|
||||
})
|
||||
}
|
||||
|
||||
func TestNginx(c *gin.Context) {
|
||||
output := nginx.TestConf()
|
||||
output := nginx2.TestConf()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": output,
|
||||
"level": nginx.GetLogLevel(output),
|
||||
"level": nginx2.GetLogLevel(output),
|
||||
})
|
||||
}
|
||||
|
||||
func RestartNginx(c *gin.Context) {
|
||||
output := nginx.Restart()
|
||||
output := nginx2.Restart()
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": output,
|
||||
"level": nginx.GetLogLevel(output),
|
||||
"level": nginx2.GetLogLevel(output),
|
||||
})
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/upgrader"
|
||||
analytic2 "github.com/0xJacky/Nginx-UI/internal/analytic"
|
||||
"github.com/0xJacky/Nginx-UI/internal/upgrader"
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
|
@ -24,11 +24,11 @@ func GetCurrentNode(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
cpuInfo, _ := cpu.Info()
|
||||
memory, _ := analytic.GetMemoryStat()
|
||||
memory, _ := analytic2.GetMemoryStat()
|
||||
ver, _ := upgrader.GetCurrentVersion()
|
||||
diskUsage, _ := disk.Usage(".")
|
||||
|
||||
nodeInfo := analytic.NodeInfo{
|
||||
nodeInfo := analytic2.NodeInfo{
|
||||
NodeRuntimeInfo: runtimeInfo,
|
||||
CPUNum: len(cpuInfo),
|
||||
MemoryTotal: memory.Total,
|
||||
|
@ -36,9 +36,9 @@ func GetCurrentNode(c *gin.Context) {
|
|||
Version: ver.Version,
|
||||
}
|
||||
|
||||
stat := analytic.GetNodeStat()
|
||||
stat := analytic2.GetNodeStat()
|
||||
|
||||
c.JSON(http.StatusOK, analytic.Node{
|
||||
c.JSON(http.StatusOK, analytic2.Node{
|
||||
NodeInfo: nodeInfo,
|
||||
NodeStat: stat,
|
||||
})
|
|
@ -3,9 +3,9 @@ package api
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sashabaranov/go-openai"
|
|
@ -1,8 +1,8 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/pty"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/internal/pty"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"net/http"
|
|
@ -2,7 +2,7 @@ package api
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"net/url"
|
|
@ -1,8 +1,8 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/template"
|
||||
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/internal/template"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
|
@ -1,7 +1,7 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/translation"
|
||||
"github.com/0xJacky/Nginx-UI/internal/translation"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
|
@ -1,9 +1,9 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/server/internal/upgrader"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/internal/upgrader"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"net/http"
|
|
@ -1,9 +1,9 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/server/model"
|
||||
"github.com/0xJacky/Nginx-UI/server/query"
|
||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/cast"
|
||||
"golang.org/x/crypto/bcrypt"
|
12
frontend/.gitignore → app/.gitignore
vendored
|
@ -10,27 +10,15 @@ lerna-debug.log*
|
|||
# deps
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
.yarn
|
||||
cache
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
# Yarn
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
|
@ -1,4 +1,4 @@
|
|||
package frontend
|
||||
package app
|
||||
|
||||
import (
|
||||
"embed"
|
0
frontend/pnpm-lock.yaml → app/pnpm-lock.yaml
generated
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 963 B After Width: | Height: | Size: 963 B |