Browse Source

refactor: project directory structure

0xJacky 1 year ago
parent
commit
e5a5889931
100 changed files with 278 additions and 160 deletions
  1. 1 1
      .dockerignore
  2. 16 16
      api/analytic.go
  3. 1 1
      api/api.go
  4. 2 2
      api/auth.go
  5. 1 1
      api/backup.go
  6. 9 9
      api/cert.go
  7. 13 13
      api/config.go
  8. 130 0
      api/dns_credential.go
  9. 48 48
      api/domain.go
  10. 4 4
      api/environment.go
  11. 4 4
      api/install.go
  12. 7 7
      api/nginx_log.go
  13. 14 14
      api/ngx.go
  14. 6 6
      api/node.go
  15. 3 3
      api/openai.go
  16. 2 2
      api/pty.go
  17. 1 1
      api/settings.go
  18. 2 2
      api/template.go
  19. 3 3
      api/translation.go
  20. 3 3
      api/upgrade.go
  21. 7 7
      api/user.go
  22. 0 0
      app/.env.development
  23. 0 0
      app/.env.production
  24. 0 12
      app/.gitignore
  25. 0 0
      app/.vscode/extensions.json
  26. 0 0
      app/README.md
  27. 1 1
      app/app.go
  28. 0 0
      app/auto-imports.d.ts
  29. 0 0
      app/components.d.ts
  30. 0 0
      app/gettext.config.js
  31. 0 0
      app/i18n.json
  32. 0 0
      app/index.html
  33. 0 0
      app/package.json
  34. 0 0
      app/pnpm-lock.yaml
  35. 0 0
      app/public/favicon.ico
  36. 0 0
      app/src/App.vue
  37. 0 0
      app/src/api/analytic.ts
  38. 0 0
      app/src/api/auth.ts
  39. 0 0
      app/src/api/auto_cert.ts
  40. 0 0
      app/src/api/cert.ts
  41. 0 0
      app/src/api/config.ts
  42. 0 0
      app/src/api/curd.ts
  43. 0 0
      app/src/api/dns_credential.ts
  44. 0 0
      app/src/api/domain.ts
  45. 0 0
      app/src/api/environment.ts
  46. 0 0
      app/src/api/install.ts
  47. 0 0
      app/src/api/nginx_log.ts
  48. 0 0
      app/src/api/ngx.ts
  49. 0 0
      app/src/api/openai.ts
  50. 0 0
      app/src/api/settings.ts
  51. 0 0
      app/src/api/template.ts
  52. 0 0
      app/src/api/upgrade.ts
  53. 0 0
      app/src/api/user.ts
  54. 0 0
      app/src/assets/img/logo.png
  55. 0 0
      app/src/assets/svg/ChatGPT_logo.svg
  56. 0 0
      app/src/assets/svg/cpu.svg
  57. 0 0
      app/src/assets/svg/memory.svg
  58. 0 0
      app/src/assets/svg/pulse.svg
  59. 0 0
      app/src/components/Breadcrumb/Breadcrumb.vue
  60. 0 0
      app/src/components/Chart/AreaChart.vue
  61. 0 0
      app/src/components/Chart/RadialBarChart.vue
  62. 0 0
      app/src/components/Chart/UsageProgressLine.vue
  63. 0 0
      app/src/components/ChatGPT/ChatGPT.vue
  64. 0 0
      app/src/components/CodeEditor/CodeEditor.vue
  65. 0 0
      app/src/components/CodeEditor/index.ts
  66. 0 0
      app/src/components/EnvIndicator/EnvIndicator.vue
  67. 0 0
      app/src/components/FooterToolbar/FooterToolBar.vue
  68. 0 0
      app/src/components/FooterToolbar/index.ts
  69. 0 0
      app/src/components/Logo/Logo.vue
  70. 0 0
      app/src/components/NginxControl/NginxControl.vue
  71. 0 0
      app/src/components/NodeSelector/NodeSelector.vue
  72. 0 0
      app/src/components/PageHeader/PageHeader.vue
  73. 0 0
      app/src/components/SetLanguage/SetLanguage.vue
  74. 0 0
      app/src/components/StdDataDisplay/StdBatchEdit.vue
  75. 0 0
      app/src/components/StdDataDisplay/StdCurd.vue
  76. 0 0
      app/src/components/StdDataDisplay/StdPagination.vue
  77. 0 0
      app/src/components/StdDataDisplay/StdTable.vue
  78. 0 0
      app/src/components/StdDataDisplay/StdTableTransformer.tsx
  79. 0 0
      app/src/components/StdDataDisplay/index.ts
  80. 0 0
      app/src/components/StdDataEntry/StdDataEntry.tsx
  81. 0 0
      app/src/components/StdDataEntry/StdFormItem.vue
  82. 0 0
      app/src/components/StdDataEntry/components/StdPassword.vue
  83. 0 0
      app/src/components/StdDataEntry/components/StdSelect.vue
  84. 0 0
      app/src/components/StdDataEntry/components/StdSelector.vue
  85. 0 0
      app/src/components/StdDataEntry/index.tsx
  86. 0 0
      app/src/components/StdDataEntry/style.less
  87. 0 0
      app/src/components/SwitchAppearance/SwitchAppearance.vue
  88. 0 0
      app/src/components/SwitchAppearance/icons/VPIconMoon.vue
  89. 0 0
      app/src/components/SwitchAppearance/icons/VPIconSun.vue
  90. 0 0
      app/src/components/VPSwitch/VPSwitch.vue
  91. 0 0
      app/src/gettext.ts
  92. 0 0
      app/src/language/LINGUAS
  93. 0 0
      app/src/language/constants.ts
  94. 0 0
      app/src/language/en/app.po
  95. 0 0
      app/src/language/es/app.mo
  96. 0 0
      app/src/language/es/app.po
  97. 0 0
      app/src/language/fr_FR/app.mo
  98. 0 0
      app/src/language/fr_FR/app.po
  99. 0 0
      app/src/language/messages.pot
  100. 0 0
      app/src/language/ru_RU/app.po

+ 1 - 1
.dockerignore

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

+ 16 - 16
server/api/analytic.go → api/analytic.go

@@ -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 - 1
server/api/api.go → api/api.go

@@ -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 - 2
server/api/auth.go → api/auth.go

@@ -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 - 1
server/api/backup.go → api/backup.go

@@ -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"

+ 9 - 9
server/api/cert.go → api/cert.go

@@ -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)

+ 13 - 13
server/api/config.go → api/config.go

@@ -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 - 0
api/dns_credential.go

@@ -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)
+}

+ 48 - 48
server/api/domain.go → api/domain.go

@@ -1,19 +1,19 @@
 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/gin-gonic/gin"
-	"github.com/sashabaranov/go-openai"
-	"net/http"
-	"os"
-	"strings"
-	"time"
+    "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"
+    "os"
+    "strings"
+    "time"
 )
 
 func GetDomains(c *gin.Context) {
@@ -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{
@@ -418,7 +418,7 @@ func AddDomainToAutoCert(c *gin.Context) {
 	name := c.Param("name")
 
 	var json struct {
-		model.Cert
+        model.Cert
 		Domains []string `json:"domains"`
 	}
 
@@ -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
 

+ 4 - 4
server/api/environment.go → api/environment.go

@@ -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"

+ 4 - 4
server/api/install.go → api/install.go

@@ -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"

+ 7 - 7
server/api/nginx_log.go → api/nginx_log.go

@@ -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

+ 14 - 14
server/api/ngx.go → api/ngx.go

@@ -1,14 +1,14 @@
 package api
 
 import (
-	"github.com/0xJacky/Nginx-UI/server/internal/nginx"
-	"github.com/gin-gonic/gin"
-	"net/http"
-	"os"
+    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),
 	})
 }

+ 6 - 6
server/api/node.go → api/node.go

@@ -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 - 3
server/api/openai.go → api/openai.go

@@ -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"

+ 2 - 2
server/api/pty.go → api/pty.go

@@ -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"

+ 1 - 1
server/api/settings.go → api/settings.go

@@ -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"

+ 2 - 2
server/api/template.go → api/template.go

@@ -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"
 )

+ 3 - 3
server/api/translation.go → api/translation.go

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

+ 3 - 3
server/api/upgrade.go → api/upgrade.go

@@ -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"

+ 7 - 7
server/api/user.go → api/user.go

@@ -1,13 +1,13 @@
 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/gin-gonic/gin"
-    "github.com/spf13/cast"
-    "golang.org/x/crypto/bcrypt"
-    "net/http"
+	"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"
+	"net/http"
 )
 
 func GetUsers(c *gin.Context) {

+ 0 - 0
frontend/.env.development → app/.env.development


+ 0 - 0
frontend/.env.production → app/.env.production


+ 0 - 12
frontend/.gitignore → app/.gitignore

@@ -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

+ 0 - 0
frontend/.vscode/extensions.json → app/.vscode/extensions.json


+ 0 - 0
frontend/README.md → app/README.md


+ 1 - 1
frontend/frontend.go → app/app.go

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

+ 0 - 0
frontend/auto-imports.d.ts → app/auto-imports.d.ts


+ 0 - 0
frontend/components.d.ts → app/components.d.ts


+ 0 - 0
frontend/gettext.config.js → app/gettext.config.js


+ 0 - 0
frontend/i18n.json → app/i18n.json


+ 0 - 0
frontend/index.html → app/index.html


+ 0 - 0
frontend/package.json → app/package.json


+ 0 - 0
frontend/pnpm-lock.yaml → app/pnpm-lock.yaml


+ 0 - 0
frontend/public/favicon.ico → app/public/favicon.ico


+ 0 - 0
frontend/src/App.vue → app/src/App.vue


+ 0 - 0
frontend/src/api/analytic.ts → app/src/api/analytic.ts


+ 0 - 0
frontend/src/api/auth.ts → app/src/api/auth.ts


+ 0 - 0
frontend/src/api/auto_cert.ts → app/src/api/auto_cert.ts


+ 0 - 0
frontend/src/api/cert.ts → app/src/api/cert.ts


+ 0 - 0
frontend/src/api/config.ts → app/src/api/config.ts


+ 0 - 0
frontend/src/api/curd.ts → app/src/api/curd.ts


+ 0 - 0
frontend/src/api/dns_credential.ts → app/src/api/dns_credential.ts


+ 0 - 0
frontend/src/api/domain.ts → app/src/api/domain.ts


+ 0 - 0
frontend/src/api/environment.ts → app/src/api/environment.ts


+ 0 - 0
frontend/src/api/install.ts → app/src/api/install.ts


+ 0 - 0
frontend/src/api/nginx_log.ts → app/src/api/nginx_log.ts


+ 0 - 0
frontend/src/api/ngx.ts → app/src/api/ngx.ts


+ 0 - 0
frontend/src/api/openai.ts → app/src/api/openai.ts


+ 0 - 0
frontend/src/api/settings.ts → app/src/api/settings.ts


+ 0 - 0
frontend/src/api/template.ts → app/src/api/template.ts


+ 0 - 0
frontend/src/api/upgrade.ts → app/src/api/upgrade.ts


+ 0 - 0
frontend/src/api/user.ts → app/src/api/user.ts


+ 0 - 0
frontend/src/assets/img/logo.png → app/src/assets/img/logo.png


+ 0 - 0
frontend/src/assets/svg/ChatGPT_logo.svg → app/src/assets/svg/ChatGPT_logo.svg


+ 0 - 0
frontend/src/assets/svg/cpu.svg → app/src/assets/svg/cpu.svg


+ 0 - 0
frontend/src/assets/svg/memory.svg → app/src/assets/svg/memory.svg


+ 0 - 0
frontend/src/assets/svg/pulse.svg → app/src/assets/svg/pulse.svg


+ 0 - 0
frontend/src/components/Breadcrumb/Breadcrumb.vue → app/src/components/Breadcrumb/Breadcrumb.vue


+ 0 - 0
frontend/src/components/Chart/AreaChart.vue → app/src/components/Chart/AreaChart.vue


+ 0 - 0
frontend/src/components/Chart/RadialBarChart.vue → app/src/components/Chart/RadialBarChart.vue


+ 0 - 0
frontend/src/components/Chart/UsageProgressLine.vue → app/src/components/Chart/UsageProgressLine.vue


+ 0 - 0
frontend/src/components/ChatGPT/ChatGPT.vue → app/src/components/ChatGPT/ChatGPT.vue


+ 0 - 0
frontend/src/components/CodeEditor/CodeEditor.vue → app/src/components/CodeEditor/CodeEditor.vue


+ 0 - 0
frontend/src/components/CodeEditor/index.ts → app/src/components/CodeEditor/index.ts


+ 0 - 0
frontend/src/components/EnvIndicator/EnvIndicator.vue → app/src/components/EnvIndicator/EnvIndicator.vue


+ 0 - 0
frontend/src/components/FooterToolbar/FooterToolBar.vue → app/src/components/FooterToolbar/FooterToolBar.vue


+ 0 - 0
frontend/src/components/FooterToolbar/index.ts → app/src/components/FooterToolbar/index.ts


+ 0 - 0
frontend/src/components/Logo/Logo.vue → app/src/components/Logo/Logo.vue


+ 0 - 0
frontend/src/components/NginxControl/NginxControl.vue → app/src/components/NginxControl/NginxControl.vue


+ 0 - 0
frontend/src/components/NodeSelector/NodeSelector.vue → app/src/components/NodeSelector/NodeSelector.vue


+ 0 - 0
frontend/src/components/PageHeader/PageHeader.vue → app/src/components/PageHeader/PageHeader.vue


+ 0 - 0
frontend/src/components/SetLanguage/SetLanguage.vue → app/src/components/SetLanguage/SetLanguage.vue


+ 0 - 0
frontend/src/components/StdDataDisplay/StdBatchEdit.vue → app/src/components/StdDataDisplay/StdBatchEdit.vue


+ 0 - 0
frontend/src/components/StdDataDisplay/StdCurd.vue → app/src/components/StdDataDisplay/StdCurd.vue


+ 0 - 0
frontend/src/components/StdDataDisplay/StdPagination.vue → app/src/components/StdDataDisplay/StdPagination.vue


+ 0 - 0
frontend/src/components/StdDataDisplay/StdTable.vue → app/src/components/StdDataDisplay/StdTable.vue


+ 0 - 0
frontend/src/components/StdDataDisplay/StdTableTransformer.tsx → app/src/components/StdDataDisplay/StdTableTransformer.tsx


+ 0 - 0
frontend/src/components/StdDataDisplay/index.ts → app/src/components/StdDataDisplay/index.ts


+ 0 - 0
frontend/src/components/StdDataEntry/StdDataEntry.tsx → app/src/components/StdDataEntry/StdDataEntry.tsx


+ 0 - 0
frontend/src/components/StdDataEntry/StdFormItem.vue → app/src/components/StdDataEntry/StdFormItem.vue


+ 0 - 0
frontend/src/components/StdDataEntry/components/StdPassword.vue → app/src/components/StdDataEntry/components/StdPassword.vue


+ 0 - 0
frontend/src/components/StdDataEntry/components/StdSelect.vue → app/src/components/StdDataEntry/components/StdSelect.vue


+ 0 - 0
frontend/src/components/StdDataEntry/components/StdSelector.vue → app/src/components/StdDataEntry/components/StdSelector.vue


+ 0 - 0
frontend/src/components/StdDataEntry/index.tsx → app/src/components/StdDataEntry/index.tsx


+ 0 - 0
frontend/src/components/StdDataEntry/style.less → app/src/components/StdDataEntry/style.less


+ 0 - 0
frontend/src/components/SwitchAppearance/SwitchAppearance.vue → app/src/components/SwitchAppearance/SwitchAppearance.vue


+ 0 - 0
frontend/src/components/SwitchAppearance/icons/VPIconMoon.vue → app/src/components/SwitchAppearance/icons/VPIconMoon.vue


+ 0 - 0
frontend/src/components/SwitchAppearance/icons/VPIconSun.vue → app/src/components/SwitchAppearance/icons/VPIconSun.vue


+ 0 - 0
frontend/src/components/VPSwitch/VPSwitch.vue → app/src/components/VPSwitch/VPSwitch.vue


+ 0 - 0
frontend/src/gettext.ts → app/src/gettext.ts


+ 0 - 0
frontend/src/language/LINGUAS → app/src/language/LINGUAS


+ 0 - 0
frontend/src/language/constants.ts → app/src/language/constants.ts


+ 0 - 0
frontend/src/language/en/app.po → app/src/language/en/app.po


+ 0 - 0
frontend/src/language/es/app.mo → app/src/language/es/app.mo


+ 0 - 0
frontend/src/language/es/app.po → app/src/language/es/app.po


+ 0 - 0
frontend/src/language/fr_FR/app.mo → app/src/language/fr_FR/app.mo


+ 0 - 0
frontend/src/language/fr_FR/app.po → app/src/language/fr_FR/app.po


+ 0 - 0
frontend/src/language/messages.pot → app/src/language/messages.pot


+ 0 - 0
frontend/src/language/ru_RU/app.po → app/src/language/ru_RU/app.po


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