summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--irc/session.go69
1 files changed, 36 insertions, 33 deletions
diff --git a/irc/session.go b/irc/session.go
index 7e1fd7c..881cc4d 100644
--- a/irc/session.go
+++ b/irc/session.go
@@ -476,34 +476,6 @@ func (s *Session) HandleMessage(msg Message) (Event, error) {
func (s *Session) handleUnregistered(msg Message) (Event, error) {
switch msg.Command {
- case "AUTHENTICATE":
- if s.auth == nil {
- break
- }
-
- var payload string
- if err := msg.ParseParams(&payload); err != nil {
- return nil, err
- }
-
- res, err := s.auth.Respond(payload)
- if err != nil {
- s.out <- NewMessage("AUTHENTICATE", "*")
- } else {
- s.out <- NewMessage("AUTHENTICATE", res)
- }
- case rplLoggedin:
- var nuh string
- if err := msg.ParseParams(nil, &nuh, &s.acct); err != nil {
- return nil, err
- }
-
- s.endRegistration()
- prefix := ParsePrefix(nuh)
- s.user = prefix.User
- s.host = prefix.Host
- case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
- s.endRegistration()
case errNicknameinuse:
var nick string
if err := msg.ParseParams(nil, &nick); err != nil {
@@ -535,6 +507,39 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
}
switch msg.Command {
+ case "AUTHENTICATE":
+ if s.auth == nil {
+ break
+ }
+
+ var payload string
+ if err := msg.ParseParams(&payload); err != nil {
+ return nil, err
+ }
+
+ res, err := s.auth.Respond(payload)
+ if err != nil {
+ s.out <- NewMessage("AUTHENTICATE", "*")
+ } else {
+ s.out <- NewMessage("AUTHENTICATE", res)
+ }
+ case rplLoggedin:
+ var nuh string
+ if err := msg.ParseParams(nil, &nuh, &s.acct); err != nil {
+ return nil, err
+ }
+
+ s.endRegistration()
+ prefix := ParsePrefix(nuh)
+ s.user = prefix.User
+ s.host = prefix.Host
+ case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
+ s.endRegistration()
+ return ErrorEvent{
+ Severity: SeverityFail,
+ Code: msg.Command,
+ Message: fmt.Sprintf("Registration failed: %s", strings.Join(msg.Params[1:], " ")),
+ }, nil
case rplWelcome:
if err := msg.ParseParams(&s.nick); err != nil {
return nil, err
@@ -609,11 +614,6 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
}
s.out <- NewMessage("CAP", "REQ", c.Name)
}
-
- _, ok := s.availableCaps["sasl"]
- if s.acct == "" && ok {
- // TODO authenticate
- }
case "DEL":
for _, c := range ParseCaps(caps) {
delete(s.availableCaps, c.Name)
@@ -1204,6 +1204,9 @@ func (s *Session) updateFeatures(features []string) {
}
func (s *Session) endRegistration() {
+ if s.registered {
+ return
+ }
if _, ok := s.enabledCaps["soju.im/bouncer-networks"]; !ok {
s.out <- NewMessage("CAP", "END")
} else if s.netID == "" {