refactor: project directory structure
|
@ -1,4 +1,4 @@
|
||||||
.git
|
.git
|
||||||
frontend/node_modules
|
app/node_modules
|
||||||
.idea
|
.idea
|
||||||
tmp
|
tmp
|
||||||
|
|
|
@ -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,
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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)
|
|
@ -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
|
@ -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
|
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"
|
||||||
|
@ -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{
|
||||||
|
@ -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
|
||||||
|
|
|
@ -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"
|
|
@ -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"
|
|
@ -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
|
|
@ -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),
|
||||||
})
|
})
|
||||||
}
|
}
|
|
@ -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,
|
||||||
})
|
})
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
||||||
)
|
)
|
|
@ -1,7 +1,7 @@
|
||||||
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"
|
||||||
)
|
)
|
|
@ -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"
|
|
@ -1,9 +1,9 @@
|
||||||
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"
|
12
frontend/.gitignore → app/.gitignore
vendored
|
@ -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
|
|
|
@ -1,4 +1,4 @@
|
||||||
package frontend
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"embed"
|
"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 |