diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 31da5b1d..271c58db 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -63,6 +63,7 @@ declare module '@vue/runtime-core' { ATabs: typeof import('ant-design-vue/es')['Tabs'] ATag: typeof import('ant-design-vue/es')['Tag'] ATextarea: typeof import('ant-design-vue/es')['Textarea'] + ATooltip: typeof import('ant-design-vue/es')['Tooltip'] BreadcrumbBreadcrumb: typeof import('./src/components/Breadcrumb/Breadcrumb.vue')['default'] ChartAreaChart: typeof import('./src/components/Chart/AreaChart.vue')['default'] ChartRadialBarChart: typeof import('./src/components/Chart/RadialBarChart.vue')['default'] diff --git a/frontend/src/components/ChatGPT/ChatGPT.vue b/frontend/src/components/ChatGPT/ChatGPT.vue index 197f347f..b995aa64 100644 --- a/frontend/src/components/ChatGPT/ChatGPT.vue +++ b/frontend/src/components/ChatGPT/ChatGPT.vue @@ -185,93 +185,74 @@ async function regenerate(index: number) { const editing_idx = ref(-1) -const show = computed(() => messages?.value?.length > 1) +const show = computed(() => messages?.value?.length === 0) diff --git a/frontend/src/views/domain/components/RightSettings.vue b/frontend/src/views/domain/components/RightSettings.vue new file mode 100644 index 00000000..f2ee4144 --- /dev/null +++ b/frontend/src/views/domain/components/RightSettings.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/frontend/src/views/domain/SiteDuplicate.vue b/frontend/src/views/domain/components/SiteDuplicate.vue similarity index 100% rename from frontend/src/views/domain/SiteDuplicate.vue rename to frontend/src/views/domain/components/SiteDuplicate.vue diff --git a/frontend/version.json b/frontend/version.json index 01d7da10..b1c9d884 100644 --- a/frontend/version.json +++ b/frontend/version.json @@ -1 +1 @@ -{"version":"1.9.9","build_id":115,"total_build":185} \ No newline at end of file +{"version":"1.9.9","build_id":116,"total_build":186} \ No newline at end of file diff --git a/go.mod b/go.mod index 64c37bc0..8ec48527 100644 --- a/go.mod +++ b/go.mod @@ -19,9 +19,10 @@ require ( github.com/jpillora/overseer v1.1.6 github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 + github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308 github.com/sashabaranov/go-openai v1.9.4 github.com/shirou/gopsutil/v3 v3.23.4 - github.com/spf13/cast v1.5.0 + github.com/spf13/cast v1.5.1 github.com/tufanbarisyildirim/gonginx v0.0.0-20230508164033-d7b72d6cd0d5 github.com/unknwon/com v1.0.1 go.uber.org/zap v1.24.0 @@ -50,10 +51,10 @@ require ( github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect - github.com/aliyun/alibaba-cloud-sdk-go v1.62.318 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.62.320 // indirect github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go v1.44.262 // indirect + github.com/aws/aws-sdk-go v1.44.263 // indirect github.com/boombuler/barcode v1.0.1 // indirect github.com/bytedance/sonic v1.8.8 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect @@ -139,7 +140,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect github.com/pquerna/otp v1.4.0 // indirect - github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/sacloud/api-client-go v0.2.7 // indirect github.com/sacloud/go-http v0.1.5 // indirect @@ -154,8 +154,8 @@ require ( github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/stretchr/testify v1.8.2 // indirect - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.655 // indirect - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.655 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.657 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.657 // indirect github.com/tklauser/go-sysconf v0.3.11 // indirect github.com/tklauser/numcpus v0.6.0 // indirect github.com/transip/gotransip/v6 v6.20.0 // indirect @@ -164,8 +164,8 @@ require ( github.com/ultradns/ultradns-go-sdk v1.5.0-20230427130837-23c9b0c // indirect github.com/vinyldns/go-vinyldns v0.9.16 // indirect github.com/vultr/govultr/v2 v2.17.2 // indirect - github.com/yandex-cloud/go-genproto v0.0.0-20230511103421-ecb0cd1514ab // indirect - github.com/yandex-cloud/go-sdk v0.0.0-20230511104317-0ccfef4d3a91 // indirect + github.com/yandex-cloud/go-genproto v0.0.0-20230515103554-c6064682c41e // indirect + github.com/yandex-cloud/go-sdk v0.0.0-20230515104003-a4cf880c2959 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.11.0 // indirect diff --git a/go.sum b/go.sum index 0ad2b3e5..916947c7 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.62.281 h1:sN94THxWQA+nPMDZD0esg1PGy6pm github.com/aliyun/alibaba-cloud-sdk-go v1.62.281/go.mod h1:Api2AkmMgGaSUAhmk76oaFObkoeCPc/bKAqcyplPODs= github.com/aliyun/alibaba-cloud-sdk-go v1.62.318 h1:1ntKWopst53IVWKlEVrgutJpEgQN+FyNZXO+h6ePgXw= github.com/aliyun/alibaba-cloud-sdk-go v1.62.318/go.mod h1:Api2AkmMgGaSUAhmk76oaFObkoeCPc/bKAqcyplPODs= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.320 h1:KiT5EgbU/rxcx4wiH1sFKaR3KyzGqB89D7JSN1vH40A= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.320/go.mod h1:Api2AkmMgGaSUAhmk76oaFObkoeCPc/bKAqcyplPODs= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -84,6 +86,8 @@ github.com/aws/aws-sdk-go v1.44.242 h1:bb6Rqd7dxh1gTUoVXLJTNC2c+zNaHpLRlNKk0kGN3 github.com/aws/aws-sdk-go v1.44.242/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.262 h1:gyXpcJptWoNkK+DiAiaBltlreoWKQXjAIh6FRh60F+I= github.com/aws/aws-sdk-go v1.44.262/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.263 h1:Dkt5fcdtL8QtK3cz0bOTQ84m9dGx+YDeTsDl+wY2yW4= +github.com/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -702,6 +706,8 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -732,10 +738,14 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.637 h1:qFqi github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.637/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.655 h1:wXBlXLfBbqTBpsiKBBULW63KvMy3wsu3/CD25cR9NEA= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.655/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.657 h1:daDlYUdKRzgi2PxIcXj4vU1enWs6aqrL7K5qD3fKpmo= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.657/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.637 h1:9r85LEYF4CcKDbQQhJ5b3hYh5vj1WNvjsHrWHAV3c60= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.637/go.mod h1:5z3RG36i3UQvMr3aHVjPfrEzLdmk+sTiLgip3aFvKBo= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.655 h1:LgLA3nzvsBggdt1NRDNi6KVk9HRHLwBUltxXupdRMeM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.655/go.mod h1:v8wyOnL22mqDNeBqsasAQzP6eQI0Lpa+cAxFtVThHTk= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.657 h1:9FAIqzmy29PS+CVlec2LaTbwSg0j8Zk55GxPMjrZUqM= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.657/go.mod h1:O2Xg2eAwl+TLAso+0F7Iao9ru2Abf7Mj+Dgv++pvQFw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= @@ -776,10 +786,14 @@ github.com/yandex-cloud/go-genproto v0.0.0-20230410092700-15216dc82345 h1:GpSllt github.com/yandex-cloud/go-genproto v0.0.0-20230410092700-15216dc82345/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= github.com/yandex-cloud/go-genproto v0.0.0-20230511103421-ecb0cd1514ab h1:Y9sWstUXfHwHufw95mI58ZEvZ720KWyR+niLQbd2q1k= github.com/yandex-cloud/go-genproto v0.0.0-20230511103421-ecb0cd1514ab/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= +github.com/yandex-cloud/go-genproto v0.0.0-20230515103554-c6064682c41e h1:2jQIfPgSk+/6zl44MEYLehRLRtGRGYvVyfKLXeNFGUM= +github.com/yandex-cloud/go-genproto v0.0.0-20230515103554-c6064682c41e/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= github.com/yandex-cloud/go-sdk v0.0.0-20230403093608-cc5174142a48 h1:C3yjOqP3gGxwiW3bXDAGI8tS+eKjxySJ9Ix7lpdtKZw= github.com/yandex-cloud/go-sdk v0.0.0-20230403093608-cc5174142a48/go.mod h1:+bvtdW+7bn1Yc7xUCbITnEalQ+hwkAAbUFHpeIY2wUQ= github.com/yandex-cloud/go-sdk v0.0.0-20230511104317-0ccfef4d3a91 h1:bYY90Y33XH7xJh8Qa5ZIgmjyWDp2S6sixTRxYbHCQLU= github.com/yandex-cloud/go-sdk v0.0.0-20230511104317-0ccfef4d3a91/go.mod h1:QOnqdE3DjwgoKvhw4Scx6HTCfAlYHZMoUzyaC8kcdzk= +github.com/yandex-cloud/go-sdk v0.0.0-20230515104003-a4cf880c2959 h1:jFoq7f55et+ssQYFgZCWbUV2kUcDx22e1jZx+KhnBcU= +github.com/yandex-cloud/go-sdk v0.0.0-20230515104003-a4cf880c2959/go.mod h1:JNuOWjkSmssXYwJXPpOxc3IhjWbPKkODDm1gAqPFD9Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= diff --git a/server/api/domain.go b/server/api/domain.go index 30e01198..4e6e6eb3 100644 --- a/server/api/domain.go +++ b/server/api/domain.go @@ -9,6 +9,7 @@ import ( "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" @@ -88,8 +89,16 @@ func GetDomain(c *gin.Context) { } path := nginx.GetConfPath("sites-available", name) + file, err := os.Stat(path) + if os.IsNotExist(err) { + c.JSON(http.StatusNotFound, gin.H{ + "message": "file not found", + }) + return + } enabled := true + if _, err := os.Stat(nginx.GetConfPath("sites-enabled", name)); os.IsNotExist(err) { enabled = false } @@ -102,6 +111,10 @@ func GetDomain(c *gin.Context) { return } + if chatgpt.Content == nil { + chatgpt.Content = make([]openai.ChatCompletionMessage, 0) + } + s := query.Site site, err := s.Where(s.Path.Eq(path)).FirstOrInit() @@ -110,7 +123,11 @@ func GetDomain(c *gin.Context) { return } - certModel, _ := model.FirstCert(name) + certModel, err := model.FirstCert(name) + + if err != nil { + logger.Warn("cert", err) + } if site.Advanced { origContent, err := os.ReadFile(path) @@ -120,6 +137,7 @@ func GetDomain(c *gin.Context) { } c.JSON(http.StatusOK, gin.H{ + "modified_at": file.ModTime(), "advanced": site.Advanced, "enabled": enabled, "name": name, @@ -167,6 +185,7 @@ func GetDomain(c *gin.Context) { c.Set("maybe_error", "nginx_config_syntax_error") c.JSON(http.StatusOK, gin.H{ + "modified_at": file.ModTime(), "advanced": site.Advanced, "enabled": enabled, "name": name, @@ -253,7 +272,7 @@ func SaveDomain(c *gin.Context) { if helper.FileExists(enabledConfigFilePath) { // Test nginx configuration output := nginx.TestConf() - if nginx.GetLogLevel(output) >= nginx.Warn { + if nginx.GetLogLevel(output) > nginx.Warn { c.JSON(http.StatusInternalServerError, gin.H{ "message": output, "error": "nginx_config_syntax_error", @@ -263,7 +282,7 @@ func SaveDomain(c *gin.Context) { output = nginx.Reload() - if nginx.GetLogLevel(output) >= nginx.Warn { + if nginx.GetLogLevel(output) > nginx.Warn { c.JSON(http.StatusInternalServerError, gin.H{ "message": output, }) diff --git a/server/model/chatgpt_log.go b/server/model/chatgpt_log.go index e06830b5..347488c1 100644 --- a/server/model/chatgpt_log.go +++ b/server/model/chatgpt_log.go @@ -17,7 +17,7 @@ func (j *JSON) Scan(value interface{}) error { return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) } - var result []openai.ChatCompletionMessage + result := make([]openai.ChatCompletionMessage, 0) err := json.Unmarshal(bytes, &result) *j = result return err