dnsProvide.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package ssl
  2. import (
  3. "github.com/go-acme/lego/v4/providers/dns"
  4. "os"
  5. "pmail/utils/errors"
  6. "regexp"
  7. "strings"
  8. )
  9. func GetServerParamsList(serverName string) ([]string, error) {
  10. var serverParams []string
  11. infos, err := os.ReadDir("./")
  12. if err != nil {
  13. return nil, errors.Wrap(err)
  14. }
  15. upperServerName := strings.ToUpper(serverName)
  16. for _, info := range infos {
  17. if strings.HasPrefix(info.Name(), upperServerName) {
  18. serverParams = append(serverParams, info.Name())
  19. }
  20. }
  21. if len(serverParams) != 0 {
  22. return serverParams, nil
  23. }
  24. _, err = dns.NewDNSChallengeProviderByName(serverName)
  25. if err == nil {
  26. return nil, errors.New(serverName + " Not Support")
  27. }
  28. if strings.Contains(err.Error(), "unrecognized DNS provider") {
  29. return nil, err
  30. }
  31. re := regexp.MustCompile(`missing: (.+)`)
  32. // namesilo: some credentials information are missing: NAMESILO_API_KEY
  33. estr := err.Error()
  34. name := re.FindStringSubmatch(estr)
  35. if len(name) == 2 {
  36. names := strings.Split(name[1], ",")
  37. for _, s := range names {
  38. serverParams = append(serverParams, s)
  39. SetDomainServerParams(s, "empty")
  40. }
  41. }
  42. _, err = dns.NewDNSChallengeProviderByName(serverName)
  43. return serverParams, err
  44. }
  45. func SetDomainServerParams(name, value string) {
  46. key := name
  47. err := os.WriteFile(key, []byte(value), 0644)
  48. if err != nil {
  49. panic(err)
  50. }
  51. err = os.Setenv(name+"_FILE", key)
  52. if err != nil {
  53. panic(err)
  54. }
  55. }