refactor: project directory structure

This commit is contained in:
0xJacky 2023-11-26 18:59:12 +08:00
parent c1193a5b8c
commit e5a5889931
No known key found for this signature in database
GPG key ID: B6E4A6E4A561BAF0
367 changed files with 710 additions and 756 deletions

View file

@ -1,4 +1,4 @@
.git .git
frontend/node_modules app/node_modules
.idea .idea
tmp tmp

View file

@ -2,8 +2,8 @@ package api
import ( import (
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/server/internal/analytic" analytic2 "github.com/0xJacky/Nginx-UI/internal/analytic"
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/host" "github.com/shirou/gopsutil/v3/host"
"github.com/shirou/gopsutil/v3/load" "github.com/shirou/gopsutil/v3/load"
@ -28,8 +28,8 @@ type Stat struct {
Uptime uint64 `json:"uptime"` Uptime uint64 `json:"uptime"`
LoadAvg *load.AvgStat `json:"loadavg"` LoadAvg *load.AvgStat `json:"loadavg"`
CPU CPUStat `json:"cpu"` CPU CPUStat `json:"cpu"`
Memory analytic.MemStat `json:"memory"` Memory analytic2.MemStat `json:"memory"`
Disk analytic.DiskStat `json:"disk"` Disk analytic2.DiskStat `json:"disk"`
Network net.IOCountersStat `json:"network"` Network net.IOCountersStat `json:"network"`
} }
@ -51,7 +51,7 @@ func Analytic(c *gin.Context) {
var stat Stat var stat Stat
for { for {
stat.Memory, err = analytic.GetMemoryStat() stat.Memory, err = analytic2.GetMemoryStat()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
@ -76,7 +76,7 @@ func Analytic(c *gin.Context) {
stat.LoadAvg, _ = load.Avg() stat.LoadAvg, _ = load.Avg()
stat.Disk, err = analytic.GetDiskStat() stat.Disk, err = analytic2.GetDiskStat()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
@ -105,14 +105,14 @@ func Analytic(c *gin.Context) {
func GetAnalyticInit(c *gin.Context) { func GetAnalyticInit(c *gin.Context) {
cpuInfo, _ := cpu.Info() cpuInfo, _ := cpu.Info()
network, _ := net.IOCounters(false) network, _ := net.IOCounters(false)
memory, err := analytic.GetMemoryStat() memory, err := analytic2.GetMemoryStat()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
return return
} }
diskStat, err := analytic.GetDiskStat() diskStat, err := analytic2.GetDiskStat()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
@ -138,17 +138,17 @@ func GetAnalyticInit(c *gin.Context) {
"host": hostInfo, "host": hostInfo,
"cpu": gin.H{ "cpu": gin.H{
"info": cpuInfo, "info": cpuInfo,
"user": analytic.CpuUserRecord, "user": analytic2.CpuUserRecord,
"total": analytic.CpuTotalRecord, "total": analytic2.CpuTotalRecord,
}, },
"network": gin.H{ "network": gin.H{
"init": _net, "init": _net,
"bytesRecv": analytic.NetRecvRecord, "bytesRecv": analytic2.NetRecvRecord,
"bytesSent": analytic.NetSentRecord, "bytesSent": analytic2.NetSentRecord,
}, },
"disk_io": gin.H{ "disk_io": gin.H{
"writes": analytic.DiskWriteRecord, "writes": analytic2.DiskWriteRecord,
"reads": analytic.DiskReadRecord, "reads": analytic2.DiskReadRecord,
}, },
"memory": memory, "memory": memory,
"disk": diskStat, "disk": diskStat,
@ -173,7 +173,7 @@ func GetNodeStat(c *gin.Context) {
for { for {
// write // write
err = ws.WriteJSON(analytic.GetNodeStat()) err = ws.WriteJSON(analytic2.GetNodeStat())
if err != nil || websocket.IsUnexpectedCloseError(err, if err != nil || websocket.IsUnexpectedCloseError(err,
websocket.CloseGoingAway, websocket.CloseGoingAway,
websocket.CloseNoStatusReceived, websocket.CloseNoStatusReceived,
@ -203,7 +203,7 @@ func GetNodesAnalytic(c *gin.Context) {
for { for {
// write // write
err = ws.WriteJSON(analytic.NodeMap) err = ws.WriteJSON(analytic2.NodeMap)
if err != nil || websocket.IsUnexpectedCloseError(err, if err != nil || websocket.IsUnexpectedCloseError(err,
websocket.CloseGoingAway, websocket.CloseGoingAway,
websocket.CloseNoStatusReceived, websocket.CloseNoStatusReceived,

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
val "github.com/go-playground/validator/v10" val "github.com/go-playground/validator/v10"
"net/http" "net/http"

View file

@ -2,10 +2,10 @@ package api
import ( import (
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/settings"
"net/http" "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/casdoor/casdoor-go-sdk/casdoorsdk"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/pkg/errors" "github.com/pkg/errors"

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/unknwon/com" "github.com/unknwon/com"
"net/http" "net/http"

View file

@ -1,11 +1,11 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/cert" cert2 "github.com/0xJacky/Nginx-UI/internal/cert"
"github.com/0xJacky/Nginx-UI/server/internal/cert/dns" "github.com/0xJacky/Nginx-UI/internal/cert/dns"
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/nginx" "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/spf13/cast" "github.com/spf13/cast"
@ -69,7 +69,7 @@ func IssueCert(c *gin.Context) {
}(ws) }(ws)
// read // read
buffer := &cert.ConfigPayload{} buffer := &cert2.ConfigPayload{}
err = ws.ReadJSON(buffer) err = ws.ReadJSON(buffer)
@ -88,13 +88,13 @@ func IssueCert(c *gin.Context) {
logChan := make(chan string, 1) logChan := make(chan string, 1)
errChan := make(chan error, 1) errChan := make(chan error, 1)
go cert.IssueCert(buffer, logChan, errChan) go cert2.IssueCert(buffer, logChan, errChan)
go handleIssueCertLogChan(ws, logChan) go handleIssueCertLogChan(ws, logChan)
// block, until errChan closes // block, until errChan closes
for err = range errChan { for err = range errChan {
errLog := &cert.AutoCertErrorLog{} errLog := &cert2.AutoCertErrorLog{}
errLog.SetCertModel(&certModel) errLog.SetCertModel(&certModel)
errLog.Exit("issue cert", err) errLog.Exit("issue cert", err)
@ -169,7 +169,7 @@ func getCert(c *gin.Context, certModel *model.Cert) {
sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath) sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath)
} }
pubKey, err := cert.GetCertInfo(certModel.SSLCertificatePath) pubKey, err := cert2.GetCertInfo(certModel.SSLCertificatePath)
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)

View file

@ -1,10 +1,10 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/config_list" "github.com/0xJacky/Nginx-UI/internal/config_list"
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/nginx" nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/sashabaranov/go-openai" "github.com/sashabaranov/go-openai"
"net/http" "net/http"
@ -22,7 +22,7 @@ func GetConfigs(c *gin.Context) {
"is_dir": "bool", "is_dir": "bool",
} }
configFiles, err := os.ReadDir(nginx.GetConfPath(dir)) configFiles, err := os.ReadDir(nginx2.GetConfPath(dir))
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)
@ -42,7 +42,7 @@ func GetConfigs(c *gin.Context) {
} }
case mode&os.ModeSymlink != 0: // is a symbol case mode&os.ModeSymlink != 0: // is a symbol
var targetPath string var targetPath string
targetPath, err = os.Readlink(nginx.GetConfPath(file.Name())) targetPath, err = os.Readlink(nginx2.GetConfPath(file.Name()))
if err != nil { if err != nil {
logger.Error("Read Symlink Error", targetPath, err) logger.Error("Read Symlink Error", targetPath, err)
continue continue
@ -77,7 +77,7 @@ func GetConfigs(c *gin.Context) {
func GetConfig(c *gin.Context) { func GetConfig(c *gin.Context) {
name := c.Param("name") name := c.Param("name")
path := nginx.GetConfPath("/", name) path := nginx2.GetConfPath("/", name)
stat, err := os.Stat(path) stat, err := os.Stat(path)
@ -130,7 +130,7 @@ func AddConfig(c *gin.Context) {
name := request.Name name := request.Name
content := request.Content content := request.Content
path := nginx.GetConfPath("/", name) path := nginx2.GetConfPath("/", name)
if _, err = os.Stat(path); err == nil { if _, err = os.Stat(path); err == nil {
c.JSON(http.StatusNotAcceptable, gin.H{ c.JSON(http.StatusNotAcceptable, gin.H{
@ -147,8 +147,8 @@ func AddConfig(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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
}) })
@ -174,7 +174,7 @@ func EditConfig(c *gin.Context) {
ErrHandler(c, err) ErrHandler(c, err)
return return
} }
path := nginx.GetConfPath("/", name) path := nginx2.GetConfPath("/", name)
content := request.Content content := request.Content
origContent, err := os.ReadFile(path) 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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
}) })

130
api/dns_credential.go Normal file
View 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)
}

View file

@ -1,19 +1,19 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/cert" "github.com/0xJacky/Nginx-UI/internal/cert"
"github.com/0xJacky/Nginx-UI/server/internal/config_list" "github.com/0xJacky/Nginx-UI/internal/config_list"
"github.com/0xJacky/Nginx-UI/server/internal/helper" helper2 "github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/nginx" nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/sashabaranov/go-openai" "github.com/sashabaranov/go-openai"
"net/http" "net/http"
"os" "os"
"strings" "strings"
"time" "time"
) )
func GetDomains(c *gin.Context) { func GetDomains(c *gin.Context) {
@ -27,14 +27,14 @@ func GetDomains(c *gin.Context) {
"modify": "time", "modify": "time",
} }
configFiles, err := os.ReadDir(nginx.GetConfPath("sites-available")) configFiles, err := os.ReadDir(nginx2.GetConfPath("sites-available"))
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)
return return
} }
enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled")) enabledConfig, err := os.ReadDir(nginx2.GetConfPath("sites-enabled"))
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)
@ -88,7 +88,7 @@ func GetDomain(c *gin.Context) {
name = rewriteName.(string) name = rewriteName.(string)
} }
path := nginx.GetConfPath("sites-available", name) path := nginx2.GetConfPath("sites-available", name)
file, err := os.Stat(path) file, err := os.Stat(path)
if os.IsNotExist(err) { if os.IsNotExist(err) {
c.JSON(http.StatusNotFound, gin.H{ c.JSON(http.StatusNotFound, gin.H{
@ -99,7 +99,7 @@ func GetDomain(c *gin.Context) {
enabled := true 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 enabled = false
} }
@ -149,7 +149,7 @@ func GetDomain(c *gin.Context) {
} }
c.Set("maybe_error", "nginx_config_syntax_error") c.Set("maybe_error", "nginx_config_syntax_error")
config, err := nginx.ParseNgxConfig(path) config, err := nginx2.ParseNgxConfig(path)
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)
@ -218,9 +218,9 @@ func SaveDomain(c *gin.Context) {
return 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{ c.JSON(http.StatusNotAcceptable, gin.H{
"message": "File exists", "message": "File exists",
}) })
@ -232,24 +232,24 @@ func SaveDomain(c *gin.Context) {
ErrHandler(c, err) ErrHandler(c, err)
return return
} }
enabledConfigFilePath := nginx.GetConfPath("sites-enabled", name) enabledConfigFilePath := nginx2.GetConfPath("sites-enabled", name)
// rename the config file if needed // rename the config file if needed
if name != json.Name { if name != json.Name {
newPath := nginx.GetConfPath("sites-available", json.Name) newPath := nginx2.GetConfPath("sites-available", json.Name)
s := query.Site s := query.Site
_, err = s.Where(s.Path.Eq(path)).Update(s.Path, newPath) _, err = s.Where(s.Path.Eq(path)).Update(s.Path, newPath)
// check if dst file exists, do not rename // check if dst file exists, do not rename
if helper.FileExists(newPath) { if helper2.FileExists(newPath) {
c.JSON(http.StatusNotAcceptable, gin.H{ c.JSON(http.StatusNotAcceptable, gin.H{
"message": "File exists", "message": "File exists",
}) })
return return
} }
// recreate soft link // recreate soft link
if helper.FileExists(enabledConfigFilePath) { if helper2.FileExists(enabledConfigFilePath) {
_ = os.Remove(enabledConfigFilePath) _ = os.Remove(enabledConfigFilePath)
enabledConfigFilePath = nginx.GetConfPath("sites-enabled", json.Name) enabledConfigFilePath = nginx2.GetConfPath("sites-enabled", json.Name)
err = os.Symlink(newPath, enabledConfigFilePath) err = os.Symlink(newPath, enabledConfigFilePath)
if err != nil { if err != nil {
@ -268,12 +268,12 @@ func SaveDomain(c *gin.Context) {
c.Set("rewriteConfigFileName", name) c.Set("rewriteConfigFileName", name)
} }
enabledConfigFilePath = nginx.GetConfPath("sites-enabled", name) enabledConfigFilePath = nginx2.GetConfPath("sites-enabled", name)
if helper.FileExists(enabledConfigFilePath) { if helper2.FileExists(enabledConfigFilePath) {
// Test nginx configuration // 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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
"error": "nginx_config_syntax_error", "error": "nginx_config_syntax_error",
@ -281,9 +281,9 @@ func SaveDomain(c *gin.Context) {
return 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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
}) })
@ -295,8 +295,8 @@ func SaveDomain(c *gin.Context) {
} }
func EnableDomain(c *gin.Context) { func EnableDomain(c *gin.Context) {
configFilePath := nginx.GetConfPath("sites-available", c.Param("name")) configFilePath := nginx2.GetConfPath("sites-available", c.Param("name"))
enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name")) enabledConfigFilePath := nginx2.GetConfPath("sites-enabled", c.Param("name"))
_, err := os.Stat(configFilePath) _, err := os.Stat(configFilePath)
@ -315,9 +315,9 @@ func EnableDomain(c *gin.Context) {
} }
// Test nginx config, if not pass then disable the site. // 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) _ = os.Remove(enabledConfigFilePath)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
@ -325,9 +325,9 @@ func EnableDomain(c *gin.Context) {
return 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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
}) })
@ -340,7 +340,7 @@ func EnableDomain(c *gin.Context) {
} }
func DisableDomain(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) _, err := os.Stat(enabledConfigFilePath)
@ -364,9 +364,9 @@ func DisableDomain(c *gin.Context) {
return 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{ c.JSON(http.StatusInternalServerError, gin.H{
"message": output, "message": output,
}) })
@ -381,8 +381,8 @@ func DisableDomain(c *gin.Context) {
func DeleteDomain(c *gin.Context) { func DeleteDomain(c *gin.Context) {
var err error var err error
name := c.Param("name") name := c.Param("name")
availablePath := nginx.GetConfPath("sites-available", name) availablePath := nginx2.GetConfPath("sites-available", name)
enabledPath := nginx.GetConfPath("sites-enabled", name) enabledPath := nginx2.GetConfPath("sites-enabled", name)
if _, err = os.Stat(availablePath); os.IsNotExist(err) { if _, err = os.Stat(availablePath); os.IsNotExist(err) {
c.JSON(http.StatusNotFound, gin.H{ c.JSON(http.StatusNotFound, gin.H{
@ -418,7 +418,7 @@ func AddDomainToAutoCert(c *gin.Context) {
name := c.Param("name") name := c.Param("name")
var json struct { var json struct {
model.Cert model.Cert
Domains []string `json:"domains"` Domains []string `json:"domains"`
} }
@ -480,17 +480,17 @@ func DuplicateSite(c *gin.Context) {
return return
} }
src := nginx.GetConfPath("sites-available", name) src := nginx2.GetConfPath("sites-available", name)
dst := nginx.GetConfPath("sites-available", json.Name) dst := nginx2.GetConfPath("sites-available", json.Name)
if helper.FileExists(dst) { if helper2.FileExists(dst) {
c.JSON(http.StatusNotAcceptable, gin.H{ c.JSON(http.StatusNotAcceptable, gin.H{
"message": "File exists", "message": "File exists",
}) })
return return
} }
_, err := helper.CopyFile(src, dst) _, err := helper2.CopyFile(src, dst)
if err != nil { if err != nil {
ErrHandler(c, err) ErrHandler(c, err)
@ -512,7 +512,7 @@ func DomainEditByAdvancedMode(c *gin.Context) {
} }
name := c.Param("name") name := c.Param("name")
path := nginx.GetConfPath("sites-available", name) path := nginx2.GetConfPath("sites-available", name)
s := query.Site s := query.Site

View file

@ -1,10 +1,10 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/analytic" "github.com/0xJacky/Nginx-UI/internal/analytic"
"github.com/0xJacky/Nginx-UI/server/internal/environment" "github.com/0xJacky/Nginx-UI/internal/environment"
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/spf13/cast" "github.com/spf13/cast"
"net/http" "net/http"

View file

@ -1,10 +1,10 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/boot" "github.com/0xJacky/Nginx-UI/internal/boot"
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/google/uuid" "github.com/google/uuid"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"

View file

@ -2,10 +2,10 @@ package api
import ( import (
"encoding/json" "encoding/json"
"github.com/0xJacky/Nginx-UI/server/internal/helper" "github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/nginx" nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/hpcloud/tail" "github.com/hpcloud/tail"
@ -106,9 +106,9 @@ func GetNginxLogPage(c *gin.Context) {
func getLogPath(control *controlStruct) (logPath string, err error) { func getLogPath(control *controlStruct) (logPath string, err error) {
switch control.Type { switch control.Type {
case "site": case "site":
var config *nginx.NgxConfig var config *nginx2.NgxConfig
path := nginx.GetConfPath("sites-available", control.ConfName) path := nginx2.GetConfPath("sites-available", control.ConfName)
config, err = nginx.ParseNgxConfig(path) config, err = nginx2.ParseNgxConfig(path)
if err != nil { if err != nil {
err = errors.Wrap(err, "error parsing ngx config") err = errors.Wrap(err, "error parsing ngx config")
return return

View file

@ -1,14 +1,14 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/nginx" nginx2 "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
"os" "os"
) )
func BuildNginxConfig(c *gin.Context) { func BuildNginxConfig(c *gin.Context) {
var ngxConf nginx.NgxConfig var ngxConf nginx2.NgxConfig
if !BindAndValid(c, &ngxConf) { if !BindAndValid(c, &ngxConf) {
return return
} }
@ -28,7 +28,7 @@ func TokenizeNginxConfig(c *gin.Context) {
} }
c.Set("maybe_error", "nginx_config_syntax_error") c.Set("maybe_error", "nginx_config_syntax_error")
ngxConfig := nginx.ParseNgxConfigByContent(json.Content) ngxConfig := nginx2.ParseNgxConfigByContent(json.Content)
c.JSON(http.StatusOK, ngxConfig) c.JSON(http.StatusOK, ngxConfig)
@ -45,12 +45,12 @@ func FormatNginxConfig(c *gin.Context) {
c.Set("maybe_error", "nginx_config_syntax_error") c.Set("maybe_error", "nginx_config_syntax_error")
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"content": nginx.FmtCode(json.Content), "content": nginx2.FmtCode(json.Content),
}) })
} }
func NginxStatus(c *gin.Context) { func NginxStatus(c *gin.Context) {
pidPath := nginx.GetNginxPIDPath() pidPath := nginx2.GetNginxPIDPath()
running := true running := true
if fileInfo, err := os.Stat(pidPath); err != nil || fileInfo.Size() == 0 { // fileInfo.Size() == 0 no process id 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) { func ReloadNginx(c *gin.Context) {
output := nginx.Reload() output := nginx2.Reload()
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"message": output, "message": output,
"level": nginx.GetLogLevel(output), "level": nginx2.GetLogLevel(output),
}) })
} }
func TestNginx(c *gin.Context) { func TestNginx(c *gin.Context) {
output := nginx.TestConf() output := nginx2.TestConf()
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"message": output, "message": output,
"level": nginx.GetLogLevel(output), "level": nginx2.GetLogLevel(output),
}) })
} }
func RestartNginx(c *gin.Context) { func RestartNginx(c *gin.Context) {
output := nginx.Restart() output := nginx2.Restart()
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"message": output, "message": output,
"level": nginx.GetLogLevel(output), "level": nginx2.GetLogLevel(output),
}) })
} }

View file

@ -1,8 +1,8 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/analytic" analytic2 "github.com/0xJacky/Nginx-UI/internal/analytic"
"github.com/0xJacky/Nginx-UI/server/internal/upgrader" "github.com/0xJacky/Nginx-UI/internal/upgrader"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/cpu"
@ -24,11 +24,11 @@ func GetCurrentNode(c *gin.Context) {
return return
} }
cpuInfo, _ := cpu.Info() cpuInfo, _ := cpu.Info()
memory, _ := analytic.GetMemoryStat() memory, _ := analytic2.GetMemoryStat()
ver, _ := upgrader.GetCurrentVersion() ver, _ := upgrader.GetCurrentVersion()
diskUsage, _ := disk.Usage(".") diskUsage, _ := disk.Usage(".")
nodeInfo := analytic.NodeInfo{ nodeInfo := analytic2.NodeInfo{
NodeRuntimeInfo: runtimeInfo, NodeRuntimeInfo: runtimeInfo,
CPUNum: len(cpuInfo), CPUNum: len(cpuInfo),
MemoryTotal: memory.Total, MemoryTotal: memory.Total,
@ -36,9 +36,9 @@ func GetCurrentNode(c *gin.Context) {
Version: ver.Version, Version: ver.Version,
} }
stat := analytic.GetNodeStat() stat := analytic2.GetNodeStat()
c.JSON(http.StatusOK, analytic.Node{ c.JSON(http.StatusOK, analytic2.Node{
NodeInfo: nodeInfo, NodeInfo: nodeInfo,
NodeStat: stat, NodeStat: stat,
}) })

View file

@ -3,9 +3,9 @@ package api
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sashabaranov/go-openai" "github.com/sashabaranov/go-openai"

View file

@ -1,8 +1,8 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/pty" "github.com/0xJacky/Nginx-UI/internal/pty"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"net/http" "net/http"

View file

@ -2,7 +2,7 @@ package api
import ( import (
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
"net/url" "net/url"

View file

@ -1,8 +1,8 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/nginx" "github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/server/internal/template" "github.com/0xJacky/Nginx-UI/internal/template"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
) )

View file

@ -1,9 +1,9 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/translation" "github.com/0xJacky/Nginx-UI/internal/translation"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
) )
func GetTranslation(c *gin.Context) { func GetTranslation(c *gin.Context) {

View file

@ -1,9 +1,9 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/internal/logger" "github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/server/internal/upgrader" "github.com/0xJacky/Nginx-UI/internal/upgrader"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"net/http" "net/http"

View file

@ -1,13 +1,13 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/server/model" "github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/server/query" "github.com/0xJacky/Nginx-UI/query"
"github.com/0xJacky/Nginx-UI/server/settings" "github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/spf13/cast" "github.com/spf13/cast"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
"net/http" "net/http"
) )
func GetUsers(c *gin.Context) { func GetUsers(c *gin.Context) {

View file

@ -10,27 +10,15 @@ lerna-debug.log*
# deps # deps
node_modules node_modules
dist dist
dist-ssr
*.local *.local
.yarn
cache cache
# Editor directories and files # Editor directories and files
.vscode/* .vscode/*
!.vscode/extensions.json !.vscode/extensions.json
.idea
.DS_Store .DS_Store
*.suo *.suo
*.ntvs* *.ntvs*
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
# Yarn
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

View file

@ -1,4 +1,4 @@
package frontend package app
import ( import (
"embed" "embed"

View file

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 963 B

After

Width:  |  Height:  |  Size: 963 B

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more