acme-client/main.go
2024-10-30 18:24:36 +08:00

123 lines
2.7 KiB
Go

package main
import (
"acme-client/src"
"bufio"
"encoding/json"
"github.com/go-acme/lego/v4/log"
"io"
"net/http"
"os"
"strings"
)
func main() {
// 读取server参数,如果没有提示添加
config := src.GetClientConfig()
server := config.Server
if server == "" {
log.Println("请输入服务端地址; 如: http://acme.server.com:8080")
reader := bufio.NewReader(os.Stdin)
serverAddr, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
serverAddr = strings.Trim(serverAddr, "\r\n")
config.Server = serverAddr
src.WriteConfig()
}
// 读取服务器RSA公钥, 没有提示添加
rsaPublicKey := config.RsaPublicKey
if rsaPublicKey == "" {
log.Println("请输入服务端下发的RAS公钥;")
reader := bufio.NewReader(os.Stdin)
rsaPublicKeyContent, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
rsaPublicKeyContent = strings.Trim(rsaPublicKeyContent, "\r\n")
config.RsaPublicKey = rsaPublicKeyContent
src.WriteConfig()
}
// 获取指令, 如果没有则提示添加
args := os.Args
if len(args) < 2 {
log.Println("请输入命令; 如: add")
log.Println("或者输入 help 查看帮助")
return
}
onCommand()
}
func onCommand() {
command := os.Args[1]
switch command {
case "help":
showHelp()
case "-s":
onServerCommand()
default:
log.Fatalf("Unknown command: %s", command)
}
}
func showHelp() {
log.Printf("help\t查看帮助")
log.Printf("list\t查看配置列表")
log.Printf("add\t添加配置")
log.Printf("del\t删除配置")
log.Printf("edit\t编辑配置")
log.Printf("-s list\t查看服务端已配置的Domain名称")
}
func showList() {
for i := range src.GetClientConfig().Domains {
domain := src.GetClientConfig().Domains[i]
log.Printf("- %s", domain.Name)
log.Printf(" - cert: %s", domain.CertFile)
log.Printf(" - key: %s", domain.KeyFile)
log.Println()
}
}
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 := src.GetClientConfig().Server
token, encryptToken := src.GenToken()
url := server + "/api/v1/domain/list?token=" + encryptToken
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
result := src.Result{}
err = json.Unmarshal(body, &result)
if err != nil {
log.Fatal(err)
}
if result.Code != 200 {
log.Fatal("读取数据出错; ", result.Msg)
}
data := result.Data
text := src.DecryptByToken(token, data)
println(text)
}