mirror of
https://github.com/acme-dns/acme-dns.git
synced 2026-02-22 09:35:35 -07:00
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
"unicode/utf8"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/joohoi/acme-dns/pkg/acmedns"
|
|
)
|
|
|
|
func jsonError(message string) []byte {
|
|
return []byte(fmt.Sprintf("{\"error\": \"%s\"}", message))
|
|
}
|
|
|
|
func getValidUsername(u string) (uuid.UUID, error) {
|
|
uname, err := uuid.Parse(u)
|
|
if err != nil {
|
|
return uuid.UUID{}, err
|
|
}
|
|
return uname, nil
|
|
}
|
|
|
|
func validKey(k string) bool {
|
|
kn := acmedns.SanitizeString(k)
|
|
if utf8.RuneCountInString(k) == 40 && utf8.RuneCountInString(kn) == 40 {
|
|
// Correct length and all chars valid
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func getIPListFromHeader(header string) []string {
|
|
iplist := []string{}
|
|
for _, v := range strings.Split(header, ",") {
|
|
if len(v) > 0 {
|
|
// Ignore empty values
|
|
iplist = append(iplist, strings.TrimSpace(v))
|
|
}
|
|
}
|
|
return iplist
|
|
}
|
|
|
|
func validSubdomain(s string) bool {
|
|
// URL safe base64 alphabet without padding as defined in ACME
|
|
RegExp := regexp.MustCompile("^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$")
|
|
return RegExp.MatchString(s)
|
|
}
|
|
|
|
func validTXT(s string) bool {
|
|
sn := acmedns.SanitizeString(s)
|
|
if utf8.RuneCountInString(s) == 43 && utf8.RuneCountInString(sn) == 43 {
|
|
// 43 chars is the current LE auth key size, but not limited / defined by ACME
|
|
return true
|
|
}
|
|
return false
|
|
}
|