Переглянути джерело

replace ACC UNREGISTER with nickserv unregister

tags/v0.11.0-beta
Shivaram Lingamneni 6 роки тому
джерело
коміт
73391f11a6
4 змінених файлів з 44 додано та 30 видалено
  1. 3
    0
      irc/accounts.go
  2. 1
    1
      irc/commands.go
  3. 0
    29
      irc/handlers.go
  4. 40
    0
      irc/nickserv.go

+ 3
- 0
irc/accounts.go Переглянути файл

@@ -368,6 +368,9 @@ func (am *AccountManager) Unregister(account string) error {
368 368
 		client.LogoutOfAccount()
369 369
 	}
370 370
 
371
+	if err != nil {
372
+		return errAccountDoesNotExist
373
+	}
371 374
 	return nil
372 375
 }
373 376
 

+ 1
- 1
irc/commands.go Переглянути файл

@@ -70,7 +70,7 @@ func init() {
70 70
 	Commands = map[string]Command{
71 71
 		"ACC": {
72 72
 			handler:   accHandler,
73
-			minParams: 2,
73
+			minParams: 3,
74 74
 		},
75 75
 		"AMBIANCE": {
76 76
 			handler:   sceneHandler,

+ 0
- 29
irc/handlers.go Переглянути файл

@@ -41,8 +41,6 @@ func accHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
41 41
 		return accRegisterHandler(server, client, msg, rb)
42 42
 	} else if subcommand == "verify" {
43 43
 		rb.Notice(client.t("VERIFY is not yet implemented"))
44
-	} else if subcommand == "unregister" {
45
-		return accUnregisterHandler(server, client, msg, rb)
46 44
 	} else {
47 45
 		rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.nick, "ACC", msg.Params[0], client.t("Unknown subcommand"))
48 46
 	}
@@ -50,33 +48,6 @@ func accHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
50 48
 	return false
51 49
 }
52 50
 
53
-// ACC UNREGISTER <accountname>
54
-func accUnregisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
55
-	// get and sanitise account name
56
-	account := strings.TrimSpace(msg.Params[1])
57
-	casefoldedAccount, err := CasefoldName(account)
58
-	// probably don't need explicit check for "*" here... but let's do it anyway just to make sure
59
-	if err != nil || msg.Params[1] == "*" {
60
-		rb.Add(nil, server.name, ERR_REG_UNSPECIFIED_ERROR, client.nick, account, client.t("Account name is not valid"))
61
-		return false
62
-	}
63
-
64
-	if !(account == client.Account() || client.HasRoleCapabs("unregister")) {
65
-		rb.Add(nil, server.name, ERR_NOPRIVS, client.Nick(), account, client.t("Insufficient oper privs"))
66
-		return false
67
-	}
68
-
69
-	err = server.accounts.Unregister(account)
70
-	// TODO better responses all around here
71
-	if err != nil {
72
-		errorMsg := fmt.Sprintf("Unknown error while unregistering account %s", casefoldedAccount)
73
-		rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), msg.Command, errorMsg)
74
-		return false
75
-	}
76
-	rb.Notice(fmt.Sprintf("Successfully unregistered account %s", casefoldedAccount))
77
-	return false
78
-}
79
-
80 51
 // ACC REGISTER <accountname> [callback_namespace:]<callback> [cred_type] :<credential>
81 52
 func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
82 53
 	// make sure reg is enabled

+ 40
- 0
irc/nickserv.go Переглянути файл

@@ -17,6 +17,10 @@ To register an account:
17 17
 	/NS REGISTER username [password]
18 18
 Leave out [password] if you're registering using your client certificate fingerprint.
19 19
 
20
+To unregister an account:
21
+	/NS UNREGISTER [username]
22
+Leave out [username] if you're unregistering the user you're currently logged in as.
23
+
20 24
 To login to an account:
21 25
 	/NS IDENTIFY [username password]
22 26
 Leave out [username password] to use your client certificate fingerprint. Otherwise,
@@ -63,11 +67,47 @@ func (server *Server) nickservPrivmsgHandler(client *Client, message string, rb
63 67
 		username, passphrase := extractParam(params)
64 68
 
65 69
 		server.nickservIdentifyHandler(client, username, passphrase, rb)
70
+	} else if command == "unregister" {
71
+		username, _ := extractParam(params)
72
+		server.nickservUnregisterHandler(client, username, rb)
66 73
 	} else {
67 74
 		rb.Notice(client.t("Command not recognised. To see the available commands, run /NS HELP"))
68 75
 	}
69 76
 }
70 77
 
78
+func (server *Server) nickservUnregisterHandler(client *Client, username string, rb *ResponseBuffer) {
79
+	if !server.AccountConfig().Registration.Enabled {
80
+		rb.Notice(client.t("Account registration has been disabled"))
81
+		return
82
+	}
83
+
84
+	if username == "" {
85
+		username = client.Account()
86
+	}
87
+	if username == "" {
88
+		rb.Notice(client.t("You're not logged into an account"))
89
+		return
90
+	}
91
+	cfname, err := CasefoldName(username)
92
+	if err != nil {
93
+		rb.Notice(client.t("Invalid username"))
94
+		return
95
+	}
96
+	if !(cfname == client.Account() || client.HasRoleCapabs("unregister")) {
97
+		rb.Notice(client.t("Insufficient oper privs"))
98
+		return
99
+	}
100
+
101
+	err = server.accounts.Unregister(cfname)
102
+	if err == errAccountDoesNotExist {
103
+		rb.Notice(client.t(err.Error()))
104
+	} else if err != nil {
105
+		rb.Notice(client.t("Error while unregistering account"))
106
+	} else {
107
+		rb.Notice(fmt.Sprintf(client.t("Successfully unregistered account %s"), cfname))
108
+	}
109
+}
110
+
71 111
 func (server *Server) nickservRegisterHandler(client *Client, username, passphrase string, rb *ResponseBuffer) {
72 112
 	certfp := client.certfp
73 113
 	if passphrase == "" && certfp == "" {

Завантаження…
Відмінити
Зберегти