forked from getfider/fider
-
Notifications
You must be signed in to change notification settings - Fork 0
/
subdomain.go
49 lines (37 loc) · 1.21 KB
/
subdomain.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package validate
import (
"fmt"
"regexp"
"strings"
"github.com/getfider/fider/app/storage"
)
var domainRegex = regexp.MustCompile("^[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]$")
//Subdomain validates given subdomain
func Subdomain(tenants storage.Tenant, subdomain string) ([]string, error) {
subdomain = strings.ToLower(subdomain)
if len(subdomain) <= 2 {
return []string{"Subdomain must have more than 2 characters."}, nil
}
if len(subdomain) > 40 {
return []string{"Subdomain must have less than 40 characters."}, nil
}
if !domainRegex.MatchString(subdomain) {
return []string{"Subdomain contains invalid characters."}, nil
}
switch subdomain {
case
"signup", "fider", "login", "customers", "admin", "setup", "about",
"wecanhearyou", "dev", "mail", "billing", "www", "web", "translate",
"help", "support", "status", "staging", "cdn", "assets", "live",
"manage", "mgmt", "platform", "production", "development":
return []string{fmt.Sprintf("%s is a reserved subdomain.", subdomain)}, nil
}
available, err := tenants.IsSubdomainAvailable(subdomain)
if err != nil {
return nil, err
}
if !available {
return []string{"This subdomain is not available anymore."}, nil
}
return []string{}, nil
}