From e1a5521f4a4dc1b6a8cc94b08685982e52ec5db2 Mon Sep 17 00:00:00 2001 From: Jacky Date: Wed, 24 Jul 2024 16:33:45 +0800 Subject: [PATCH] feat: display info of multiple certificates in server tab. --- api/sites/domain.go | 27 ++---------- api/sites/sites.go | 2 +- app/src/api/domain.ts | 4 +- .../views/certificate/CertificateEditor.vue | 5 ++- app/src/views/domain/DomainEdit.vue | 9 ++-- app/src/views/domain/cert/Cert.vue | 22 +++++++--- app/src/views/domain/cert/CertInfo.vue | 42 ++++++++++--------- .../views/domain/ngx_conf/NgxConfigEditor.vue | 2 +- app/src/views/domain/ngx_conf/NgxServer.vue | 2 +- 9 files changed, 54 insertions(+), 61 deletions(-) diff --git a/api/sites/domain.go b/api/sites/domain.go index f65c6487..5ad99c26 100644 --- a/api/sites/domain.go +++ b/api/sites/domain.go @@ -66,7 +66,6 @@ func GetDomains(c *gin.Context) { func GetDomain(c *gin.Context) { rewriteName, ok := c.Get("rewriteConfigFileName") - name := c.Param("name") // for modify filename @@ -84,14 +83,12 @@ func GetDomain(c *gin.Context) { } enabled := true - if _, err := os.Stat(nginx.GetConfPath("sites-enabled", name)); os.IsNotExist(err) { enabled = false } g := query.ChatGPTLog chatgpt, err := g.Where(g.Name.Eq(path)).FirstOrCreate() - if err != nil { api.ErrHandler(c, err) return @@ -103,14 +100,12 @@ func GetDomain(c *gin.Context) { s := query.Site site, err := s.Where(s.Path.Eq(path)).FirstOrInit() - if err != nil { api.ErrHandler(c, err) return } certModel, err := model.FirstCert(name) - if err != nil { logger.Warn(err) } @@ -136,28 +131,21 @@ func GetDomain(c *gin.Context) { } nginxConfig, err := nginx.ParseNgxConfig(path) - if err != nil { api.ErrHandler(c, err) return } - certInfoMap := make(map[int]*cert.Info) - + certInfoMap := make(map[int][]*cert.Info) for serverIdx, server := range nginxConfig.Servers { for _, directive := range server.Directives { if directive.Directive == "ssl_certificate" { - pubKey, err := cert.GetCertInfo(directive.Params) - if err != nil { logger.Error("Failed to get certificate information", err) - break + continue } - - certInfoMap[serverIdx] = pubKey - - break + certInfoMap[serverIdx] = append(certInfoMap[serverIdx], pubKey) } } } @@ -291,9 +279,8 @@ 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() - if nginx.GetLogLevel(output) > nginx.Warn { _ = os.Remove(enabledConfigFilePath) c.JSON(http.StatusInternalServerError, gin.H{ @@ -318,16 +305,13 @@ func EnableDomain(c *gin.Context) { func DisableDomain(c *gin.Context) { enabledConfigFilePath := nginx.GetConfPath("sites-enabled", c.Param("name")) - _, err := os.Stat(enabledConfigFilePath) - if err != nil { api.ErrHandler(c, err) return } err = os.Remove(enabledConfigFilePath) - if err != nil { api.ErrHandler(c, err) return @@ -342,7 +326,6 @@ func DisableDomain(c *gin.Context) { } output := nginx.Reload() - if nginx.GetLogLevel(output) > nginx.Warn { c.JSON(http.StatusInternalServerError, gin.H{ "message": output, @@ -360,7 +343,6 @@ func DeleteDomain(c *gin.Context) { name := c.Param("name") availablePath := nginx.GetConfPath("sites-available", name) enabledPath := nginx.GetConfPath("sites-enabled", name) - if _, err = os.Stat(availablePath); os.IsNotExist(err) { c.JSON(http.StatusNotFound, gin.H{ "message": "site not found", @@ -379,7 +361,6 @@ func DeleteDomain(c *gin.Context) { _ = certModel.Remove() err = os.Remove(availablePath) - if err != nil { api.ErrHandler(c, err) return diff --git a/api/sites/sites.go b/api/sites/sites.go index 4f5eb025..b29db44a 100644 --- a/api/sites/sites.go +++ b/api/sites/sites.go @@ -16,6 +16,6 @@ type Site struct { AutoCert bool `json:"auto_cert"` ChatGPTMessages []openai.ChatCompletionMessage `json:"chatgpt_messages,omitempty"` Tokenized *nginx.NgxConfig `json:"tokenized,omitempty"` - CertInfo map[int]*cert.Info `json:"cert_info,omitempty"` + CertInfo map[int][]*cert.Info `json:"cert_info,omitempty"` Filepath string `json:"filepath"` } diff --git a/app/src/api/domain.ts b/app/src/api/domain.ts index c0ee985a..147fdcac 100644 --- a/app/src/api/domain.ts +++ b/app/src/api/domain.ts @@ -15,9 +15,7 @@ export interface Site { auto_cert: boolean chatgpt_messages: ChatComplicationMessage[] tokenized?: NgxConfig - cert_info?: { - [key: number]: CertificateInfo - } + cert_info?: Record } export interface AutoCertRequest { diff --git a/app/src/views/certificate/CertificateEditor.vue b/app/src/views/certificate/CertificateEditor.vue index a0cb188c..0135b849 100644 --- a/app/src/views/certificate/CertificateEditor.vue +++ b/app/src/views/certificate/CertificateEditor.vue @@ -126,7 +126,10 @@ const isManaged = computed(() => { layout="vertical" > - + diff --git a/app/src/views/domain/DomainEdit.vue b/app/src/views/domain/DomainEdit.vue index cb7e9ad2..62f4aa41 100644 --- a/app/src/views/domain/DomainEdit.vue +++ b/app/src/views/domain/DomainEdit.vue @@ -29,7 +29,7 @@ const ngx_config: NgxConfig = reactive({ servers: [], }) -const cert_info_map: Record = reactive({}) +const certInfoMap: Ref> = ref({}) const auto_cert = ref(false) const enabled = ref(false) @@ -62,9 +62,6 @@ function handle_response(r: Site) { if (r.advanced) advance_mode.value = true - Object.keys(cert_info_map).forEach((v: string) => { - delete cert_info_map[v] - }) parse_error_status.value = false parse_error_message.value = '' filename.value = r.name @@ -74,8 +71,8 @@ function handle_response(r: Site) { auto_cert.value = r.auto_cert history_chatgpt_record.value = r.chatgpt_messages data.value = r + certInfoMap.value = r.cert_info || {} Object.assign(ngx_config, r.tokenized) - Object.assign(cert_info_map, r.cert_info) } function init() { @@ -230,7 +227,7 @@ provide('data', data) > diff --git a/app/src/views/domain/cert/Cert.vue b/app/src/views/domain/cert/Cert.vue index 7fd733a7..34b6712c 100644 --- a/app/src/views/domain/cert/Cert.vue +++ b/app/src/views/domain/cert/Cert.vue @@ -8,7 +8,7 @@ const props = defineProps<{ configName: string enabled: boolean currentServerIndex: number - certInfo?: CertificateInfo + certInfo?: CertificateInfo[] }>() const emit = defineEmits(['update:enabled']) @@ -25,13 +25,23 @@ const enabled = computed({