-
Notifications
You must be signed in to change notification settings - Fork 80
/
jid.go
71 lines (56 loc) · 1.52 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package gui
import (
"strings"
)
// Method to validate a jabber id is correct according to the RFC-6122
// on Address Format
func verifyXMPPAddress(address string) (bool, string) {
var err string
var isValid bool
tldIndex := strings.LastIndex(address, ".")
atIndex := strings.Index(address, "@")
if !isValidAccount(address, atIndex) {
err = "Validation failed: \nThe XMPP address is invalid. An XMPP address should look like this: local@domain.com."
return isValid, err
}
isValidDomain, errDomain := verifyDomainPart(tldIndex, atIndex, address)
isValidPart, errLocal := verifyLocalPart(atIndex)
isValid = isValidDomain && isValidPart
if !isValid {
result := "Validation failed:\n"
sep := ""
if errDomain != "" {
result += errDomain
sep = ", "
}
if errLocal != "" {
result += sep + errLocal
}
err = result + ". An XMPP address should look like this: local@domain.com."
}
return isValid, err
}
func isValidAccount(address string, atIndex int) bool {
if len(address) != 0 && atIndex != -1 {
return true
}
return false
}
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 = "The 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 = "The XMMP address has an invalid local part"
}
return isValid, err
}