acme-dns/validation.go

49 lines
1.1 KiB
Go
Raw Permalink Normal View History

2016-11-13 19:50:44 +07:00
package main
import (
2016-12-01 05:03:08 +07:00
"unicode/utf8"
"regexp"
2016-12-01 05:03:08 +07:00
"github.com/google/uuid"
2016-11-13 19:50:44 +07:00
"golang.org/x/crypto/bcrypt"
)
2016-11-23 22:11:31 +07:00
func getValidUsername(u string) (uuid.UUID, error) {
uname, err := uuid.Parse(u)
2016-11-13 19:50:44 +07:00
if err != nil {
return uuid.UUID{}, err
}
return uname, nil
}
2016-11-23 22:11:31 +07:00
func validKey(k string) bool {
kn := sanitizeString(k)
2016-11-13 19:50:44 +07:00
if utf8.RuneCountInString(k) == 40 && utf8.RuneCountInString(kn) == 40 {
// Correct length and all chars valid
return true
}
return false
}
2016-11-23 22:11:31 +07:00
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)
2016-11-13 19:50:44 +07:00
}
2016-11-23 22:11:31 +07:00
func validTXT(s string) bool {
sn := sanitizeString(s)
2016-11-13 19:50:44 +07:00
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
}
2016-11-23 22:11:31 +07:00
func correctPassword(pw string, hash string) bool {
2016-11-13 19:50:44 +07:00
if err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw)); err == nil {
return true
}
return false
}