mirror of
https://github.com/1f349/site-hosting.git
synced 2025-01-20 22:26:37 +00:00
55 lines
946 B
Go
55 lines
946 B
Go
|
package validation
|
||
|
|
||
|
func IsValidSite(site string) bool {
|
||
|
if len(site) < 1 || site[0] == '-' {
|
||
|
return false
|
||
|
}
|
||
|
switch site[0] {
|
||
|
case '-':
|
||
|
return false
|
||
|
}
|
||
|
return containsOnly(site, func(r rune) bool {
|
||
|
return isAlphanumericOrDash(r) || r == '.'
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func IsValidBranch(branch string) bool {
|
||
|
if len(branch) < 1 {
|
||
|
return false
|
||
|
}
|
||
|
switch branch[0] {
|
||
|
case '-', '/':
|
||
|
return false
|
||
|
}
|
||
|
if branch[len(branch)-1] == '/' {
|
||
|
return false
|
||
|
}
|
||
|
return containsOnly(branch, func(r rune) bool {
|
||
|
return isAlphanumericOrDash(r) || r == '/' || r == '.'
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func isAlphanumericOrDash(r rune) bool {
|
||
|
switch {
|
||
|
case r >= '0' && r <= '9':
|
||
|
return true
|
||
|
case r >= 'a' && r <= 'z':
|
||
|
return true
|
||
|
case r >= 'A' && r <= 'Z':
|
||
|
return true
|
||
|
case r == '-', r == '_':
|
||
|
return true
|
||
|
default:
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func containsOnly(s string, f func(r rune) bool) bool {
|
||
|
for _, r := range []rune(s) {
|
||
|
if !f(r) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|