Smail/server/services/setup/ssl/dnsProvide.go
Jinnrry 01cbdc9875
V2.5.0 (#132)
支持多用户
支持SSL证书支持DNS验证
增加mysql测试用例
修复DNS设置时的展示歧义
2024-07-02 21:02:00 +08:00

68 lines
1.4 KiB
Go

package ssl
import (
"github.com/go-acme/lego/v4/providers/dns"
"os"
"pmail/utils/errors"
"regexp"
"strings"
)
func GetServerParamsList(serverName string) ([]string, error) {
var serverParams []string
infos, err := os.ReadDir("./")
if err != nil {
return nil, errors.Wrap(err)
}
upperServerName := strings.ToUpper(serverName)
for _, info := range infos {
if strings.HasPrefix(info.Name(), upperServerName) {
serverParams = append(serverParams, info.Name())
}
}
if len(serverParams) != 0 {
return serverParams, nil
}
_, err = dns.NewDNSChallengeProviderByName(serverName)
if err == nil {
return nil, errors.New(serverName + " Not Support")
}
if strings.Contains(err.Error(), "unrecognized DNS provider") {
return nil, err
}
re := regexp.MustCompile(`missing: (.+)`)
// namesilo: some credentials information are missing: NAMESILO_API_KEY
estr := err.Error()
name := re.FindStringSubmatch(estr)
if len(name) == 2 {
names := strings.Split(name[1], ",")
for _, s := range names {
serverParams = append(serverParams, s)
SetDomainServerParams(s, "empty")
}
}
_, err = dns.NewDNSChallengeProviderByName(serverName)
return serverParams, err
}
func SetDomainServerParams(name, value string) {
key := name
err := os.WriteFile(key, []byte(value), 0644)
if err != nil {
panic(err)
}
err = os.Setenv(name+"_FILE", key)
if err != nil {
panic(err)
}
}