This commit is contained in:
ZhuoQinghui 2024-10-31 14:14:42 +08:00
parent 7150dbf22a
commit 7e15185359
6 changed files with 155 additions and 133 deletions

View File

@ -3,11 +3,8 @@ package src
import ( import (
"bufio" "bufio"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"github.com/go-acme/lego/v4/log" "log"
"io"
"net/http"
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
@ -167,62 +164,6 @@ func doGetCert(name string) (*DomainData, error) {
return &result, nil 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 { func scanConf(msg string, errMsg string) string {
for { for {
@ -273,29 +214,6 @@ func readInfoFile(file string) (*CertInfo, error) {
return certInfo, err 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) { func writeCert(domain *Domain, data *DomainData) {
certFile := domain.CertFile certFile := domain.CertFile

View File

@ -72,25 +72,3 @@ func getConfigFile() string {
} }
const ENV_CLIENT_CONF_FILE = "ACME_MANA_CONF_FILE" 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
}

31
src/http.go Normal file
View File

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

58
src/models.go Normal file
View File

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

View File

@ -1 +1,66 @@
package src 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")
}
}

View File

@ -1,10 +1,5 @@
package src package src
import (
"crypto/x509"
"github.com/go-acme/lego/v4/certificate"
)
var clientConfig ClientConfig = ReadConfig() var clientConfig ClientConfig = ReadConfig()
func GetClientConfig() *ClientConfig { func GetClientConfig() *ClientConfig {
@ -14,26 +9,3 @@ func GetClientConfig() *ClientConfig {
func ReloadClientConfig() { func ReloadClientConfig() {
clientConfig = ReadConfig() 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"`
}