Browse Source

Merge pull request #929 from slingamn/verify_rename.1

enforce nick protection immediately after verification
tags/v2.1.0-rc1
Shivaram Lingamneni 4 years ago
parent
commit
ae2a92ca9a
No account linked to committer's email address
2 changed files with 18 additions and 1 deletions
  1. 14
    1
      irc/accounts.go
  2. 4
    0
      irc/nickname.go

+ 14
- 1
irc/accounts.go View File

744
 
744
 
745
 func (am *AccountManager) Verify(client *Client, account string, code string) error {
745
 func (am *AccountManager) Verify(client *Client, account string, code string) error {
746
 	casefoldedAccount, err := CasefoldName(account)
746
 	casefoldedAccount, err := CasefoldName(account)
747
+	var skeleton string
747
 	if err != nil || account == "" || account == "*" {
748
 	if err != nil || account == "" || account == "*" {
748
 		return errAccountVerificationFailed
749
 		return errAccountVerificationFailed
749
 	}
750
 	}
814
 		})
815
 		})
815
 
816
 
816
 		if err == nil {
817
 		if err == nil {
817
-			skeleton, _ := Skeleton(raw.Name)
818
+			skeleton, _ = Skeleton(raw.Name)
818
 			am.Lock()
819
 			am.Lock()
819
 			am.nickToAccount[casefoldedAccount] = casefoldedAccount
820
 			am.nickToAccount[casefoldedAccount] = casefoldedAccount
820
 			am.skeletonToAccount[skeleton] = casefoldedAccount
821
 			am.skeletonToAccount[skeleton] = casefoldedAccount
839
 	if client != nil {
840
 	if client != nil {
840
 		am.Login(client, clientAccount)
841
 		am.Login(client, clientAccount)
841
 	}
842
 	}
843
+	_, method := am.EnforcementStatus(casefoldedAccount, skeleton)
844
+	if method != NickEnforcementNone {
845
+		currentClient := am.server.clients.Get(casefoldedAccount)
846
+		if currentClient == nil || currentClient == client || currentClient.Account() == casefoldedAccount {
847
+			return nil
848
+		}
849
+		if method == NickEnforcementStrict {
850
+			am.server.RandomlyRename(currentClient)
851
+		} else if method == NickEnforcementWithTimeout {
852
+			currentClient.nickTimer.Touch(nil)
853
+		}
854
+	}
842
 	return nil
855
 	return nil
843
 }
856
 }
844
 
857
 

+ 4
- 0
irc/nickname.go View File

98
 	nick := strings.Replace(format, "*", utils.B32Encoder.EncodeToString(buf), -1)
98
 	nick := strings.Replace(format, "*", utils.B32Encoder.EncodeToString(buf), -1)
99
 	sessions := client.Sessions()
99
 	sessions := client.Sessions()
100
 	if len(sessions) == 0 {
100
 	if len(sessions) == 0 {
101
+		// this can happen if they are anonymous and BRB (in general, an always-on
102
+		// client has title to its nickname and will never be the victim of
103
+		// a call to RandomlyRename)
104
+		client.destroy(nil)
101
 		return
105
 		return
102
 	}
106
 	}
103
 	// XXX arbitrarily pick the first session to receive error messages;
107
 	// XXX arbitrarily pick the first session to receive error messages;

Loading…
Cancel
Save