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