重构
This commit is contained in:
parent
7150dbf22a
commit
7e15185359
|
@ -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
|
||||||
|
|
|
@ -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
31
src/http.go
Normal 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
58
src/models.go
Normal 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
|
||||||
|
}
|
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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"`
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user