acme-dns/util.go

58 lines
1.2 KiB
Go
Raw Normal View History

2016-11-11 21:48:00 +07:00
package main
import (
2016-11-13 19:50:44 +07:00
"crypto/rand"
"github.com/satori/go.uuid"
"math/big"
2016-11-11 21:48:00 +07:00
"regexp"
2016-11-13 19:50:44 +07:00
"strings"
2016-11-11 21:48:00 +07:00
)
2016-11-13 19:50:44 +07:00
func SanitizeString(s string) string {
// URL safe base64 alphabet without padding as defined in ACME
re, err := regexp.Compile("[^A-Za-z\\-\\_0-9]+")
2016-11-11 21:48:00 +07:00
if err != nil {
log.Errorf("%v", err)
return ""
}
2016-11-13 19:50:44 +07:00
return re.ReplaceAllString(s, "")
}
func GeneratePassword(length int) (string, error) {
ret := make([]byte, length)
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_"
alphalen := big.NewInt(int64(len(alphabet)))
for i := 0; i < length; i++ {
c, err := rand.Int(rand.Reader, alphalen)
if err != nil {
return "", err
}
r := int(c.Int64())
ret[i] = alphabet[r]
}
return string(ret), nil
}
func SanitizeDomainQuestion(d string) string {
var dom string
dns_suff := DnsConf.General.Domain + "."
if strings.HasSuffix(d, dns_suff) {
dom = d[0 : len(d)-len(dns_suff)]
} else {
dom = d
}
return dom
}
func NewACMETxt() (ACMETxt, error) {
var a ACMETxt = ACMETxt{}
password, err := GeneratePassword(40)
if err != nil {
return a, err
2016-11-11 21:48:00 +07:00
}
2016-11-13 19:50:44 +07:00
a.Username = uuid.NewV4()
a.Password = password
a.Subdomain = uuid.NewV4().String()
return a, nil
2016-11-11 21:48:00 +07:00
}