forked from coyim/coyim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jid.go
56 lines (46 loc) · 1.22 KB
/
jid.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
50
51
52
53
54
55
56
package gui
import (
"strings"
)
// Method to validate a jabber id is correct according to the RFC-6122
// on Address Format
// TODO: verify the resource part
func verifyXmppAddress(address string) (bool, string) {
var err string
tldIndex := strings.LastIndex(address, ".")
atIndex := strings.Index(address, "@")
isValidDomain, errDomain := verifyDomainPart(tldIndex, atIndex, address)
isValidPart, errPart := verifyLocalPart(atIndex)
isValid := isValidDomain && isValidPart
if !isValid {
result := "Validation failed:\n"
sep := ""
if errDomain != "" {
result += errDomain
sep = ", "
}
if errPart != "" {
result += sep + errPart
}
err = result + ". An XMPP address should look like this: local@domain.com."
}
return isValid, err
}
func verifyDomainPart(tldIndex, atIndex int, address string) (bool, string) {
isValid := true
var err string
if tldIndex < 0 || tldIndex == len(address)-1 || tldIndex-atIndex < 2 {
isValid = false
err = "XMPP address has an invalid domain part"
}
return isValid, err
}
func verifyLocalPart(atIndex int) (bool, string) {
isValid := true
var err string
if atIndex == 0 {
isValid = false
err = "XMMP address has an invalid local part"
}
return isValid, err
}