commit 1859f66
Hubert Hirtz
·
2021-11-16 09:00:34 +0000 UTC
parent ccc5351
Authenticate on CAP NEW sasl
1 files changed,
+36,
-33
+36,
-33
1@@ -476,34 +476,6 @@ func (s *Session) HandleMessage(msg Message) (Event, error) {
2
3 func (s *Session) handleUnregistered(msg Message) (Event, error) {
4 switch msg.Command {
5- case "AUTHENTICATE":
6- if s.auth == nil {
7- break
8- }
9-
10- var payload string
11- if err := msg.ParseParams(&payload); err != nil {
12- return nil, err
13- }
14-
15- res, err := s.auth.Respond(payload)
16- if err != nil {
17- s.out <- NewMessage("AUTHENTICATE", "*")
18- } else {
19- s.out <- NewMessage("AUTHENTICATE", res)
20- }
21- case rplLoggedin:
22- var nuh string
23- if err := msg.ParseParams(nil, &nuh, &s.acct); err != nil {
24- return nil, err
25- }
26-
27- s.endRegistration()
28- prefix := ParsePrefix(nuh)
29- s.user = prefix.User
30- s.host = prefix.Host
31- case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
32- s.endRegistration()
33 case errNicknameinuse:
34 var nick string
35 if err := msg.ParseParams(nil, &nick); err != nil {
36@@ -535,6 +507,39 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
37 }
38
39 switch msg.Command {
40+ case "AUTHENTICATE":
41+ if s.auth == nil {
42+ break
43+ }
44+
45+ var payload string
46+ if err := msg.ParseParams(&payload); err != nil {
47+ return nil, err
48+ }
49+
50+ res, err := s.auth.Respond(payload)
51+ if err != nil {
52+ s.out <- NewMessage("AUTHENTICATE", "*")
53+ } else {
54+ s.out <- NewMessage("AUTHENTICATE", res)
55+ }
56+ case rplLoggedin:
57+ var nuh string
58+ if err := msg.ParseParams(nil, &nuh, &s.acct); err != nil {
59+ return nil, err
60+ }
61+
62+ s.endRegistration()
63+ prefix := ParsePrefix(nuh)
64+ s.user = prefix.User
65+ s.host = prefix.Host
66+ case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
67+ s.endRegistration()
68+ return ErrorEvent{
69+ Severity: SeverityFail,
70+ Code: msg.Command,
71+ Message: fmt.Sprintf("Registration failed: %s", strings.Join(msg.Params[1:], " ")),
72+ }, nil
73 case rplWelcome:
74 if err := msg.ParseParams(&s.nick); err != nil {
75 return nil, err
76@@ -609,11 +614,6 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
77 }
78 s.out <- NewMessage("CAP", "REQ", c.Name)
79 }
80-
81- _, ok := s.availableCaps["sasl"]
82- if s.acct == "" && ok {
83- // TODO authenticate
84- }
85 case "DEL":
86 for _, c := range ParseCaps(caps) {
87 delete(s.availableCaps, c.Name)
88@@ -1204,6 +1204,9 @@ func (s *Session) updateFeatures(features []string) {
89 }
90
91 func (s *Session) endRegistration() {
92+ if s.registered {
93+ return
94+ }
95 if _, ok := s.enabledCaps["soju.im/bouncer-networks"]; !ok {
96 s.out <- NewMessage("CAP", "END")
97 } else if s.netID == "" {