diff --git a/src/command.go b/src/command.go index f129668..4fd046a 100644 --- a/src/command.go +++ b/src/command.go @@ -3,11 +3,8 @@ package src import ( "bufio" "encoding/json" - "errors" "fmt" - "github.com/go-acme/lego/v4/log" - "io" - "net/http" + "log" "os" "path/filepath" "strconv" @@ -167,62 +164,6 @@ func doGetCert(name string) (*DomainData, error) { return &result, nil } -// 服务端命令 -func onServerCommand() { - args := os.Args - if len(args) < 3 { - log.Fatal("参数错误, 请检查") - } - command := args[2] - switch command { - case "list": - showServerList() - default: - log.Fatal("参数错误, 请检查") - } -} - -// 从服务端获取域名列表 -func showServerList() { - server := GetClientConfig().Server - token, encryptToken := GenToken() - url := server + "/api/v1/domain/list?token=" + encryptToken - resp, err := http.Get(url) - if err != nil { - log.Fatal("获取服务端数据失败, 请检查 server 地址是否正确") - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - log.Fatal(err) - } - result := Result{} - err = json.Unmarshal(body, &result) - if err != nil { - log.Fatal(err) - } - if result.Code != 200 { - log.Fatal("读取数据出错; ", result.Msg) - } - data := result.Data - text := DecryptByToken(token, data) - d := &[]SDomain{} - err = json.Unmarshal([]byte(text), d) - if err != nil { - log.Fatal(err) - } - for i := range *d { - domain := (*d)[i] - fmt.Printf("- %s\n", domain.Name) - fmt.Printf("\t认证域名: [ ") - for j := range domain.Host { - host := domain.Host[j] - fmt.Printf("%s ", host) - } - fmt.Printf("]\n") - } -} - // 读取用户输入 func scanConf(msg string, errMsg string) string { for { @@ -273,29 +214,6 @@ func readInfoFile(file string) (*CertInfo, error) { return certInfo, err } -// http get -func httpGet(url string, token string) (string, error) { - resp, err := http.Get(url) - if err != nil { - return "", err - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - return "", err - } - result := Result{} - err = json.Unmarshal(body, &result) - if err != nil { - return "", err - } - if result.Code != 200 { - return "", errors.New(result.Msg) - } - data := result.Data - return DecryptByToken(token, data), nil -} - // 写出证书 func writeCert(domain *Domain, data *DomainData) { certFile := domain.CertFile diff --git a/src/config.go b/src/config.go index c5b0835..b9ae8e1 100644 --- a/src/config.go +++ b/src/config.go @@ -72,25 +72,3 @@ func getConfigFile() string { } const ENV_CLIENT_CONF_FILE = "ACME_MANA_CONF_FILE" - -type ClientConfig struct { - Server string - RsaPublicKey string - Domains []Domain -} - -type Domain struct { - Name string - CertFile string - KeyFile string - InfoFile string -} - -func (conf *ClientConfig) FindDomain(name string) *Domain { - for _, domain := range conf.Domains { - if domain.Name == name { - return &domain - } - } - return nil -} diff --git a/src/http.go b/src/http.go new file mode 100644 index 0000000..5b33f8e --- /dev/null +++ b/src/http.go @@ -0,0 +1,31 @@ +package src + +import ( + "encoding/json" + "errors" + "io" + "net/http" +) + +// http get +func httpGet(url string, token string) (string, error) { + resp, err := http.Get(url) + if err != nil { + return "", err + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + result := Result{} + err = json.Unmarshal(body, &result) + if err != nil { + return "", err + } + if result.Code != 200 { + return "", errors.New(result.Msg) + } + data := result.Data + return DecryptByToken(token, data), nil +} diff --git a/src/models.go b/src/models.go new file mode 100644 index 0000000..659a39a --- /dev/null +++ b/src/models.go @@ -0,0 +1,58 @@ +package src + +import ( + "crypto/x509" + "github.com/go-acme/lego/v4/certificate" +) + +// ClientConfig 客户端配置 +type ClientConfig struct { + Server string + RsaPublicKey string + Domains []Domain +} + +// Domain 域名 +type Domain struct { + Name string + CertFile string + KeyFile string + InfoFile string +} + +// FindDomain 查找域名 +func (conf *ClientConfig) FindDomain(name string) *Domain { + for _, domain := range conf.Domains { + if domain.Name == name { + return &domain + } + } + return nil +} + +// Result 服务端统一响应格式 +type Result struct { + Code int + Msg string + Data string +} + +// SDomain 服务端域名配置结构 +type SDomain struct { + Name string + Email string + Host []string +} + +// DomainData 证书相关信息 +type DomainData struct { + Fullchain string `json:"fullchain"` + Key string `json:"key"` + Info string `json:"info"` +} + +// CertInfo 证书详情 +type CertInfo struct { + Cert certificate.Resource + Info x509.Certificate +} diff --git a/src/scommand.go b/src/scommand.go index c6d5f54..1dc594f 100644 --- a/src/scommand.go +++ b/src/scommand.go @@ -1 +1,66 @@ package src + +import ( + "encoding/json" + "fmt" + "io" + "log" + "net/http" + "os" +) + +// 服务端命令 +func onServerCommand() { + args := os.Args + if len(args) < 3 { + log.Fatal("参数错误, 请检查") + } + command := args[2] + switch command { + case "list": + showServerList() + default: + log.Fatal("参数错误, 请检查") + } +} + +// 从服务端获取域名列表 +func showServerList() { + server := GetClientConfig().Server + token, encryptToken := GenToken() + url := server + "/api/v1/domain/list?token=" + encryptToken + resp, err := http.Get(url) + if err != nil { + log.Fatal("获取服务端数据失败, 请检查 server 地址是否正确") + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + log.Fatal(err) + } + result := Result{} + err = json.Unmarshal(body, &result) + if err != nil { + log.Fatal(err) + } + if result.Code != 200 { + log.Fatal("读取数据出错; ", result.Msg) + } + data := result.Data + text := DecryptByToken(token, data) + d := &[]SDomain{} + err = json.Unmarshal([]byte(text), d) + if err != nil { + log.Fatal(err) + } + for i := range *d { + domain := (*d)[i] + fmt.Printf("- %s\n", domain.Name) + fmt.Printf("\t认证域名: [ ") + for j := range domain.Host { + host := domain.Host[j] + fmt.Printf("%s ", host) + } + fmt.Printf("]\n") + } +} diff --git a/src/variable.go b/src/variable.go index 4ea39e6..d776712 100644 --- a/src/variable.go +++ b/src/variable.go @@ -1,10 +1,5 @@ package src -import ( - "crypto/x509" - "github.com/go-acme/lego/v4/certificate" -) - var clientConfig ClientConfig = ReadConfig() func GetClientConfig() *ClientConfig { @@ -14,26 +9,3 @@ func GetClientConfig() *ClientConfig { func ReloadClientConfig() { clientConfig = ReadConfig() } - -type Result struct { - Code int - Msg string - Data string -} - -type SDomain struct { - Name string - Email string - Host []string -} - -type CertInfo struct { - Cert certificate.Resource - Info x509.Certificate -} - -type DomainData struct { - Fullchain string `json:"fullchain"` - Key string `json:"key"` - Info string `json:"info"` -}