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

Initial ACC update to match the new spec

tags/v1.1.0-rc1
Daniel Oaks 5 роки тому
джерело
коміт
4df71df454
7 змінених файлів з 277 додано та 241 видалено
  1. 6
    0
      gencapdefs.py
  2. 6
    1
      irc/caps/defs.go
  3. 3
    2
      irc/commands.go
  4. 81
    35
      irc/handlers.go
  5. 2
    3
      irc/nickserv.go
  6. 179
    185
      irc/numerics.go
  7. 0
    15
      irc/server.go

+ 6
- 0
gencapdefs.py Переглянути файл

@@ -15,6 +15,12 @@ from collections import namedtuple
15 15
 CapDef = namedtuple("CapDef", ['identifier', 'name', 'url', 'standard'])
16 16
 
17 17
 CAPDEFS = [
18
+    CapDef(
19
+        identifier="Acc",
20
+        name="draft/acc",
21
+        url="https://github.com/ircv3/ircv3-specifications/pull/276",
22
+        standard="proposed IRCv3",
23
+    ),
18 24
     CapDef(
19 25
         identifier="AccountNotify",
20 26
         name="account-notify",

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

@@ -7,12 +7,16 @@ package caps
7 7
 
8 8
 const (
9 9
 	// number of recognized capabilities:
10
-	numCapabs = 21
10
+	numCapabs = 22
11 11
 	// length of the uint64 array that represents the bitset:
12 12
 	bitsetLen = 1
13 13
 )
14 14
 
15 15
 const (
16
+	// Acc is the proposed IRCv3 capability named "draft/acc":
17
+	// https://github.com/ircv3/ircv3-specifications/pull/276
18
+	Acc Capability = iota
19
+
16 20
 	// AccountNotify is the IRCv3 capability named "account-notify":
17 21
 	// https://ircv3.net/specs/extensions/account-notify-3.1.html
18 22
 	AccountNotify Capability = iota
@@ -101,6 +105,7 @@ const (
101 105
 // `capabilityNames[capab]` is the string name of the capability `capab`
102 106
 var (
103 107
 	capabilityNames = [numCapabs]string{
108
+		"draft/acc",
104 109
 		"account-notify",
105 110
 		"account-tag",
106 111
 		"away-notify",

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

@@ -71,8 +71,9 @@ var Commands map[string]Command
71 71
 func init() {
72 72
 	Commands = map[string]Command{
73 73
 		"ACC": {
74
-			handler:   accHandler,
75
-			minParams: 3,
74
+			handler:      accHandler,
75
+			usablePreReg: true,
76
+			minParams:    1,
76 77
 		},
77 78
 		"AMBIANCE": {
78 79
 			handler:   sceneHandler,

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

@@ -31,16 +31,42 @@ import (
31 31
 	"golang.org/x/crypto/bcrypt"
32 32
 )
33 33
 
34
-// ACC [REGISTER|VERIFY] ...
34
+// ACC [LS|REGISTER|VERIFY] ...
35 35
 func accHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
36
+	subcommand := strings.ToLower(msg.Params[0])
37
+
38
+	if subcommand == "ls" {
39
+		config := server.Config().Accounts
40
+
41
+		rb.Add(nil, server.name, "ACC", "LS", "SUBCOMMANDS", "LS REGISTER VERIFY")
42
+
43
+		var enabledCallbacks []string
44
+		for _, name := range config.Registration.EnabledCallbacks {
45
+			enabledCallbacks = append(enabledCallbacks, name)
46
+		}
47
+		sort.Strings(enabledCallbacks)
48
+		rb.Add(nil, server.name, "ACC", "LS", "CALLBACKS", strings.Join(enabledCallbacks, " "))
49
+
50
+		rb.Add(nil, server.name, "ACC", "LS", "CREDTYPES", "passphrase certfp")
51
+
52
+		if config.NickReservation.Enabled {
53
+			rb.Add(nil, server.name, "ACC", "LS", "FLAGS", "regnick")
54
+		}
55
+		return false
56
+	}
57
+
58
+	// disallow account stuff before connection registration has completed, for now
59
+	if !client.Registered() {
60
+		client.Send(nil, server.name, ERR_NOTREGISTERED, "*", client.t("You need to register before you can use that command"))
61
+		return false
62
+	}
63
+
36 64
 	// make sure reg is enabled
37 65
 	if !server.AccountConfig().Registration.Enabled {
38
-		rb.Add(nil, server.name, ERR_REG_UNSPECIFIED_ERROR, client.nick, "*", client.t("Account registration is disabled"))
66
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_UNAVAILABLE", client.t("Account registration is disabled"))
39 67
 		return false
40 68
 	}
41 69
 
42
-	subcommand := strings.ToLower(msg.Params[0])
43
-
44 70
 	if subcommand == "register" {
45 71
 		return accRegisterHandler(server, client, msg, rb)
46 72
 	} else if subcommand == "verify" {
@@ -61,7 +87,7 @@ func parseCallback(spec string, config *AccountConfig) (callbackNamespace string
61 87
 		callbackValues := strings.SplitN(callback, ":", 2)
62 88
 		callbackNamespace, callbackValue = callbackValues[0], callbackValues[1]
63 89
 	} else {
64
-		// "the IRC server MAY choose to use mailto as a default"
90
+		// "If a callback namespace is not ... provided, the IRC server MUST use mailto""
65 91
 		callbackNamespace = "mailto"
66 92
 		callbackValue = callback
67 93
 	}
@@ -81,23 +107,35 @@ func parseCallback(spec string, config *AccountConfig) (callbackNamespace string
81 107
 // ACC REGISTER <accountname> [callback_namespace:]<callback> [cred_type] :<credential>
82 108
 func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
83 109
 	nick := client.Nick()
110
+
111
+	if len(msg.Params) < 4 {
112
+		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, nick, msg.Command, client.t("Not enough parameters"))
113
+		return false
114
+	}
115
+
116
+	account := strings.TrimSpace(msg.Params[1])
117
+
118
+	// check for account name of *
119
+	if account == "*" {
120
+		account = nick
121
+	} else {
122
+		if server.Config().Accounts.NickReservation.Enabled {
123
+			rb.Add(nil, server.name, "FAIL", "ACC", "REG_MUST_USE_REGNICK", account, client.t("Must register with current nickname instead of separate account name"))
124
+			return false
125
+		}
126
+	}
127
+
84 128
 	// clients can't reg new accounts if they're already logged in
85 129
 	if client.LoggedIntoAccount() {
86
-		rb.Add(nil, server.name, ERR_REG_UNSPECIFIED_ERROR, nick, "*", client.t("You're already logged into an account"))
130
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_UNSPECIFIED_ERROR", account, client.t("You're already logged into an account"))
87 131
 		return false
88 132
 	}
89 133
 
90
-	// get and sanitise account name
91
-	account := strings.TrimSpace(msg.Params[1])
134
+	// sanitise account name
92 135
 	casefoldedAccount, err := CasefoldName(account)
93 136
 	// probably don't need explicit check for "*" here... but let's do it anyway just to make sure
94 137
 	if err != nil || msg.Params[1] == "*" {
95
-		rb.Add(nil, server.name, ERR_REG_UNSPECIFIED_ERROR, nick, account, client.t("Account name is not valid"))
96
-		return false
97
-	}
98
-
99
-	if len(msg.Params) < 4 {
100
-		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, nick, msg.Command, client.t("Not enough parameters"))
138
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_INVALID_ACCOUNT_NAME", account, client.t("Account name is not valid"))
101 139
 		return false
102 140
 	}
103 141
 
@@ -105,7 +143,7 @@ func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
105 143
 	callbackNamespace, callbackValue := parseCallback(callbackSpec, server.AccountConfig())
106 144
 
107 145
 	if callbackNamespace == "" {
108
-		rb.Add(nil, server.name, ERR_REG_INVALID_CALLBACK, nick, account, callbackSpec, client.t("Callback namespace is not supported"))
146
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_INVALID_CALLBACK", account, callbackSpec, client.t("Cannot send verification code there"))
109 147
 		return false
110 148
 	}
111 149
 
@@ -129,12 +167,12 @@ func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
129 167
 		}
130 168
 	}
131 169
 	if credentialType == "certfp" && client.certfp == "" {
132
-		rb.Add(nil, server.name, ERR_REG_INVALID_CRED_TYPE, nick, credentialType, callbackNamespace, client.t("You are not using a TLS certificate"))
170
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_INVALID_CRED_TYPE", account, credentialType, client.t("You are not using a TLS certificate"))
133 171
 		return false
134 172
 	}
135 173
 
136 174
 	if !credentialValid {
137
-		rb.Add(nil, server.name, ERR_REG_INVALID_CRED_TYPE, nick, credentialType, callbackNamespace, client.t("Credential type is not supported"))
175
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_INVALID_CRED_TYPE", account, credentialType, client.t("Credential type is not supported"))
138 176
 		return false
139 177
 	}
140 178
 
@@ -147,14 +185,14 @@ func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
147 185
 
148 186
 	throttled, remainingTime := client.loginThrottle.Touch()
149 187
 	if throttled {
150
-		rb.Add(nil, server.name, ERR_REG_UNSPECIFIED_ERROR, nick, fmt.Sprintf(client.t("Please wait at least %v and try again"), remainingTime))
188
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_UNSPECIFIED_ERROR", account, fmt.Sprintf(client.t("Please wait at least %v and try again"), remainingTime))
151 189
 		return false
152 190
 	}
153 191
 
154 192
 	err = server.accounts.Register(client, account, callbackNamespace, callbackValue, passphrase, certfp)
155 193
 	if err != nil {
156
-		msg, code := registrationErrorToMessageAndCode(err)
157
-		rb.Add(nil, server.name, code, nick, "ACC", "REGISTER", client.t(msg))
194
+		msg := registrationErrorToMessageAndCode(err)
195
+		rb.Add(nil, server.name, "FAIL", "ACC", "REG_UNSPECIFIED_ERROR", account, client.t(msg))
158 196
 		return false
159 197
 	}
160 198
 
@@ -174,15 +212,13 @@ func accRegisterHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
174 212
 	return false
175 213
 }
176 214
 
177
-func registrationErrorToMessageAndCode(err error) (message, numeric string) {
215
+func registrationErrorToMessageAndCode(err error) (message string) {
178 216
 	// default responses: let's be risk-averse about displaying internal errors
179 217
 	// to the clients, especially for something as sensitive as accounts
180 218
 	message = `Could not register`
181
-	numeric = ERR_UNKNOWNERROR
182 219
 	switch err {
183 220
 	case errAccountAlreadyRegistered, errAccountAlreadyVerified:
184 221
 		message = err.Error()
185
-		numeric = ERR_ACCOUNT_ALREADY_EXISTS
186 222
 	case errAccountCreation, errAccountMustHoldNick, errAccountBadPassphrase, errCertfpAlreadyExists, errFeatureDisabled:
187 223
 		message = err.Error()
188 224
 	}
@@ -194,20 +230,23 @@ func sendSuccessfulRegResponse(client *Client, rb *ResponseBuffer, forNS bool) {
194 230
 	if forNS {
195 231
 		rb.Notice(client.t("Account created"))
196 232
 	} else {
197
-		rb.Add(nil, client.server.name, RPL_REGISTRATION_SUCCESS, client.nick, client.AccountName(), client.t("Account created"))
233
+		rb.Add(nil, client.server.name, RPL_REG_SUCCESS, client.nick, client.AccountName(), client.t("Account created"))
198 234
 	}
199
-	sendSuccessfulSaslAuth(client, rb, forNS)
235
+	sendSuccessfulAccountAuth(client, rb, forNS, false)
200 236
 }
201 237
 
202
-// sendSuccessfulSaslAuth means that a SASL auth attempt completed successfully, and is used to dispatch messages.
203
-func sendSuccessfulSaslAuth(client *Client, rb *ResponseBuffer, forNS bool) {
238
+// sendSuccessfulAccountAuth means that an account auth attempt completed successfully, and is used to dispatch messages.
239
+func sendSuccessfulAccountAuth(client *Client, rb *ResponseBuffer, forNS, forSASL bool) {
204 240
 	details := client.Details()
205 241
 
206 242
 	if forNS {
207 243
 		rb.Notice(fmt.Sprintf(client.t("You're now logged in as %s"), details.accountName))
208 244
 	} else {
245
+		//TODO(dan): some servers send this numeric even for NickServ logins iirc? to confirm and maybe do too
209 246
 		rb.Add(nil, client.server.name, RPL_LOGGEDIN, details.nick, details.nickMask, details.accountName, fmt.Sprintf(client.t("You are now logged in as %s"), details.accountName))
210
-		rb.Add(nil, client.server.name, RPL_SASLSUCCESS, details.nick, client.t("Authentication successful"))
247
+		if forSASL {
248
+			rb.Add(nil, client.server.name, RPL_SASLSUCCESS, details.nick, client.t("Authentication successful"))
249
+		}
211 250
 	}
212 251
 
213 252
 	// dispatch account-notify
@@ -223,26 +262,33 @@ func sendSuccessfulSaslAuth(client *Client, rb *ResponseBuffer, forNS bool) {
223 262
 // ACC VERIFY <accountname> <auth_code>
224 263
 func accVerifyHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
225 264
 	account := strings.TrimSpace(msg.Params[1])
265
+
266
+	if len(msg.Params) < 3 {
267
+		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
268
+		return false
269
+	}
270
+
226 271
 	err := server.accounts.Verify(client, account, msg.Params[2])
227 272
 
228 273
 	var code string
229 274
 	var message string
230 275
 
231 276
 	if err == errAccountVerificationInvalidCode {
232
-		code = ERR_ACCOUNT_INVALID_VERIFY_CODE
277
+		code = "ACCOUNT_INVALID_VERIFY_CODE"
233 278
 		message = err.Error()
234 279
 	} else if err == errAccountAlreadyVerified {
235
-		code = ERR_ACCOUNT_ALREADY_VERIFIED
280
+		code = "ACCOUNT_ALREADY_VERIFIED"
236 281
 		message = err.Error()
237 282
 	} else if err != nil {
238
-		code = ERR_UNKNOWNERROR
283
+		code = "VERIFY_UNSPECIFIED_ERROR"
239 284
 		message = errAccountVerificationFailed.Error()
240 285
 	}
241 286
 
242 287
 	if err == nil {
243
-		sendSuccessfulRegResponse(client, rb, false)
288
+		rb.Add(nil, server.name, RPL_VERIFY_SUCCESS, client.Nick(), account, client.t("Account verification successful"))
289
+		sendSuccessfulAccountAuth(client, rb, false, false)
244 290
 	} else {
245
-		rb.Add(nil, server.name, code, client.Nick(), account, client.t(message))
291
+		rb.Add(nil, server.name, "FAIL", "ACC", code, account, client.t(message))
246 292
 	}
247 293
 
248 294
 	return false
@@ -373,7 +419,7 @@ func authPlainHandler(server *Server, client *Client, mechanism string, value []
373 419
 		return false
374 420
 	}
375 421
 
376
-	sendSuccessfulSaslAuth(client, rb, false)
422
+	sendSuccessfulAccountAuth(client, rb, false, true)
377 423
 	return false
378 424
 }
379 425
 
@@ -401,7 +447,7 @@ func authExternalHandler(server *Server, client *Client, mechanism string, value
401 447
 		return false
402 448
 	}
403 449
 
404
-	sendSuccessfulSaslAuth(client, rb, false)
450
+	sendSuccessfulAccountAuth(client, rb, false, true)
405 451
 	return false
406 452
 }
407 453
 

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

@@ -295,7 +295,7 @@ func nsIdentifyHandler(server *Server, client *Client, command string, params []
295 295
 	}
296 296
 
297 297
 	if loginSuccessful {
298
-		sendSuccessfulSaslAuth(client, rb, true)
298
+		sendSuccessfulAccountAuth(client, rb, true, true)
299 299
 	} else {
300 300
 		nsNotice(rb, client.t("Could not login with your TLS certificate or supplied username/password"))
301 301
 	}
@@ -407,8 +407,7 @@ func nsRegisterHandler(server *Server, client *Client, command string, params []
407 407
 
408 408
 	// details could not be stored and relevant numerics have been dispatched, abort
409 409
 	if err != nil {
410
-		errMsg, _ := registrationErrorToMessageAndCode(err)
411
-		nsNotice(rb, errMsg)
410
+		nsNotice(rb, client.t(registrationErrorToMessageAndCode(err)))
412 411
 		return
413 412
 	}
414 413
 }

+ 179
- 185
irc/numerics.go Переглянути файл

@@ -12,191 +12,185 @@ package irc
12 12
 // server ecosystem out there. Custom numerics will be marked as such.
13 13
 
14 14
 const (
15
-	RPL_WELCOME                     = "001"
16
-	RPL_YOURHOST                    = "002"
17
-	RPL_CREATED                     = "003"
18
-	RPL_MYINFO                      = "004"
19
-	RPL_ISUPPORT                    = "005"
20
-	RPL_SNOMASKIS                   = "008"
21
-	RPL_BOUNCE                      = "010"
22
-	RPL_TRACELINK                   = "200"
23
-	RPL_TRACECONNECTING             = "201"
24
-	RPL_TRACEHANDSHAKE              = "202"
25
-	RPL_TRACEUNKNOWN                = "203"
26
-	RPL_TRACEOPERATOR               = "204"
27
-	RPL_TRACEUSER                   = "205"
28
-	RPL_TRACESERVER                 = "206"
29
-	RPL_TRACESERVICE                = "207"
30
-	RPL_TRACENEWTYPE                = "208"
31
-	RPL_TRACECLASS                  = "209"
32
-	RPL_TRACERECONNECT              = "210"
33
-	RPL_STATSLINKINFO               = "211"
34
-	RPL_STATSCOMMANDS               = "212"
35
-	RPL_ENDOFSTATS                  = "219"
36
-	RPL_UMODEIS                     = "221"
37
-	RPL_SERVLIST                    = "234"
38
-	RPL_SERVLISTEND                 = "235"
39
-	RPL_STATSUPTIME                 = "242"
40
-	RPL_STATSOLINE                  = "243"
41
-	RPL_LUSERCLIENT                 = "251"
42
-	RPL_LUSEROP                     = "252"
43
-	RPL_LUSERUNKNOWN                = "253"
44
-	RPL_LUSERCHANNELS               = "254"
45
-	RPL_LUSERME                     = "255"
46
-	RPL_ADMINME                     = "256"
47
-	RPL_ADMINLOC1                   = "257"
48
-	RPL_ADMINLOC2                   = "258"
49
-	RPL_ADMINEMAIL                  = "259"
50
-	RPL_TRACELOG                    = "261"
51
-	RPL_TRACEEND                    = "262"
52
-	RPL_TRYAGAIN                    = "263"
53
-	RPL_WHOISCERTFP                 = "276"
54
-	RPL_AWAY                        = "301"
55
-	RPL_USERHOST                    = "302"
56
-	RPL_ISON                        = "303"
57
-	RPL_UNAWAY                      = "305"
58
-	RPL_NOWAWAY                     = "306"
59
-	RPL_WHOISUSER                   = "311"
60
-	RPL_WHOISSERVER                 = "312"
61
-	RPL_WHOISOPERATOR               = "313"
62
-	RPL_WHOWASUSER                  = "314"
63
-	RPL_ENDOFWHO                    = "315"
64
-	RPL_WHOISIDLE                   = "317"
65
-	RPL_ENDOFWHOIS                  = "318"
66
-	RPL_WHOISCHANNELS               = "319"
67
-	RPL_LIST                        = "322"
68
-	RPL_LISTEND                     = "323"
69
-	RPL_CHANNELMODEIS               = "324"
70
-	RPL_UNIQOPIS                    = "325"
71
-	RPL_CHANNELCREATED              = "329"
72
-	RPL_WHOISACCOUNT                = "330"
73
-	RPL_NOTOPIC                     = "331"
74
-	RPL_TOPIC                       = "332"
75
-	RPL_TOPICTIME                   = "333"
76
-	RPL_WHOISBOT                    = "335"
77
-	RPL_WHOISACTUALLY               = "338"
78
-	RPL_INVITING                    = "341"
79
-	RPL_SUMMONING                   = "342"
80
-	RPL_INVITELIST                  = "346"
81
-	RPL_ENDOFINVITELIST             = "347"
82
-	RPL_EXCEPTLIST                  = "348"
83
-	RPL_ENDOFEXCEPTLIST             = "349"
84
-	RPL_VERSION                     = "351"
85
-	RPL_WHOREPLY                    = "352"
86
-	RPL_NAMREPLY                    = "353"
87
-	RPL_LINKS                       = "364"
88
-	RPL_ENDOFLINKS                  = "365"
89
-	RPL_ENDOFNAMES                  = "366"
90
-	RPL_BANLIST                     = "367"
91
-	RPL_ENDOFBANLIST                = "368"
92
-	RPL_ENDOFWHOWAS                 = "369"
93
-	RPL_INFO                        = "371"
94
-	RPL_MOTD                        = "372"
95
-	RPL_ENDOFINFO                   = "374"
96
-	RPL_MOTDSTART                   = "375"
97
-	RPL_ENDOFMOTD                   = "376"
98
-	RPL_YOUREOPER                   = "381"
99
-	RPL_REHASHING                   = "382"
100
-	RPL_YOURESERVICE                = "383"
101
-	RPL_TIME                        = "391"
102
-	RPL_USERSSTART                  = "392"
103
-	RPL_USERS                       = "393"
104
-	RPL_ENDOFUSERS                  = "394"
105
-	RPL_NOUSERS                     = "395"
106
-	ERR_UNKNOWNERROR                = "400"
107
-	ERR_NOSUCHNICK                  = "401"
108
-	ERR_NOSUCHSERVER                = "402"
109
-	ERR_NOSUCHCHANNEL               = "403"
110
-	ERR_CANNOTSENDTOCHAN            = "404"
111
-	ERR_TOOMANYCHANNELS             = "405"
112
-	ERR_WASNOSUCHNICK               = "406"
113
-	ERR_TOOMANYTARGETS              = "407"
114
-	ERR_NOSUCHSERVICE               = "408"
115
-	ERR_NOORIGIN                    = "409"
116
-	ERR_INVALIDCAPCMD               = "410"
117
-	ERR_NORECIPIENT                 = "411"
118
-	ERR_NOTEXTTOSEND                = "412"
119
-	ERR_NOTOPLEVEL                  = "413"
120
-	ERR_WILDTOPLEVEL                = "414"
121
-	ERR_BADMASK                     = "415"
122
-	ERR_INPUTTOOLONG                = "417"
123
-	ERR_UNKNOWNCOMMAND              = "421"
124
-	ERR_NOMOTD                      = "422"
125
-	ERR_NOADMININFO                 = "423"
126
-	ERR_FILEERROR                   = "424"
127
-	ERR_NONICKNAMEGIVEN             = "431"
128
-	ERR_ERRONEUSNICKNAME            = "432"
129
-	ERR_NICKNAMEINUSE               = "433"
130
-	ERR_NICKCOLLISION               = "436"
131
-	ERR_UNAVAILRESOURCE             = "437"
132
-	ERR_REG_UNAVAILABLE             = "440"
133
-	ERR_USERNOTINCHANNEL            = "441"
134
-	ERR_NOTONCHANNEL                = "442"
135
-	ERR_USERONCHANNEL               = "443"
136
-	ERR_NOLOGIN                     = "444"
137
-	ERR_SUMMONDISABLED              = "445"
138
-	ERR_USERSDISABLED               = "446"
139
-	ERR_NOTREGISTERED               = "451"
140
-	ERR_NEEDMOREPARAMS              = "461"
141
-	ERR_ALREADYREGISTRED            = "462"
142
-	ERR_NOPERMFORHOST               = "463"
143
-	ERR_PASSWDMISMATCH              = "464"
144
-	ERR_YOUREBANNEDCREEP            = "465"
145
-	ERR_YOUWILLBEBANNED             = "466"
146
-	ERR_KEYSET                      = "467"
147
-	ERR_INVALIDUSERNAME             = "468"
148
-	ERR_CHANNELISFULL               = "471"
149
-	ERR_UNKNOWNMODE                 = "472"
150
-	ERR_INVITEONLYCHAN              = "473"
151
-	ERR_BANNEDFROMCHAN              = "474"
152
-	ERR_BADCHANNELKEY               = "475"
153
-	ERR_BADCHANMASK                 = "476"
154
-	ERR_NOCHANMODES                 = "477"
155
-	ERR_BANLISTFULL                 = "478"
156
-	ERR_NOPRIVILEGES                = "481"
157
-	ERR_CHANOPRIVSNEEDED            = "482"
158
-	ERR_CANTKILLSERVER              = "483"
159
-	ERR_RESTRICTED                  = "484"
160
-	ERR_UNIQOPPRIVSNEEDED           = "485"
161
-	ERR_NOOPERHOST                  = "491"
162
-	ERR_UMODEUNKNOWNFLAG            = "501"
163
-	ERR_USERSDONTMATCH              = "502"
164
-	ERR_HELPNOTFOUND                = "524"
165
-	ERR_CANNOTSENDRP                = "573"
166
-	RPL_WHOISSECURE                 = "671"
167
-	RPL_YOURLANGUAGESARE            = "687"
168
-	RPL_WHOISLANGUAGE               = "690"
169
-	ERR_CHANNAMEINUSE               = "692"
170
-	ERR_CANNOTRENAME                = "693"
171
-	RPL_HELPSTART                   = "704"
172
-	RPL_HELPTXT                     = "705"
173
-	RPL_ENDOFHELP                   = "706"
174
-	ERR_NOPRIVS                     = "723"
175
-	RPL_MONONLINE                   = "730"
176
-	RPL_MONOFFLINE                  = "731"
177
-	RPL_MONLIST                     = "732"
178
-	RPL_ENDOFMONLIST                = "733"
179
-	ERR_MONLISTFULL                 = "734"
180
-	RPL_LOGGEDIN                    = "900"
181
-	RPL_LOGGEDOUT                   = "901"
182
-	ERR_NICKLOCKED                  = "902"
183
-	RPL_SASLSUCCESS                 = "903"
184
-	ERR_SASLFAIL                    = "904"
185
-	ERR_SASLTOOLONG                 = "905"
186
-	ERR_SASLABORTED                 = "906"
187
-	ERR_SASLALREADY                 = "907"
188
-	RPL_SASLMECHS                   = "908"
189
-	RPL_REGISTRATION_SUCCESS        = "920"
190
-	ERR_ACCOUNT_ALREADY_EXISTS      = "921"
191
-	ERR_REG_UNSPECIFIED_ERROR       = "922"
192
-	RPL_VERIFYSUCCESS               = "923"
193
-	ERR_ACCOUNT_ALREADY_VERIFIED    = "924"
194
-	ERR_ACCOUNT_INVALID_VERIFY_CODE = "925"
195
-	RPL_REG_VERIFICATION_REQUIRED   = "927"
196
-	ERR_REG_INVALID_CRED_TYPE       = "928"
197
-	ERR_REG_INVALID_CALLBACK        = "929"
198
-	ERR_TOOMANYLANGUAGES            = "981"
199
-	ERR_NOLANGUAGE                  = "982"
15
+	RPL_WELCOME                   = "001"
16
+	RPL_YOURHOST                  = "002"
17
+	RPL_CREATED                   = "003"
18
+	RPL_MYINFO                    = "004"
19
+	RPL_ISUPPORT                  = "005"
20
+	RPL_SNOMASKIS                 = "008"
21
+	RPL_BOUNCE                    = "010"
22
+	RPL_TRACELINK                 = "200"
23
+	RPL_TRACECONNECTING           = "201"
24
+	RPL_TRACEHANDSHAKE            = "202"
25
+	RPL_TRACEUNKNOWN              = "203"
26
+	RPL_TRACEOPERATOR             = "204"
27
+	RPL_TRACEUSER                 = "205"
28
+	RPL_TRACESERVER               = "206"
29
+	RPL_TRACESERVICE              = "207"
30
+	RPL_TRACENEWTYPE              = "208"
31
+	RPL_TRACECLASS                = "209"
32
+	RPL_TRACERECONNECT            = "210"
33
+	RPL_STATSLINKINFO             = "211"
34
+	RPL_STATSCOMMANDS             = "212"
35
+	RPL_ENDOFSTATS                = "219"
36
+	RPL_UMODEIS                   = "221"
37
+	RPL_SERVLIST                  = "234"
38
+	RPL_SERVLISTEND               = "235"
39
+	RPL_STATSUPTIME               = "242"
40
+	RPL_STATSOLINE                = "243"
41
+	RPL_LUSERCLIENT               = "251"
42
+	RPL_LUSEROP                   = "252"
43
+	RPL_LUSERUNKNOWN              = "253"
44
+	RPL_LUSERCHANNELS             = "254"
45
+	RPL_LUSERME                   = "255"
46
+	RPL_ADMINME                   = "256"
47
+	RPL_ADMINLOC1                 = "257"
48
+	RPL_ADMINLOC2                 = "258"
49
+	RPL_ADMINEMAIL                = "259"
50
+	RPL_TRACELOG                  = "261"
51
+	RPL_TRACEEND                  = "262"
52
+	RPL_TRYAGAIN                  = "263"
53
+	RPL_WHOISCERTFP               = "276"
54
+	RPL_AWAY                      = "301"
55
+	RPL_USERHOST                  = "302"
56
+	RPL_ISON                      = "303"
57
+	RPL_UNAWAY                    = "305"
58
+	RPL_NOWAWAY                   = "306"
59
+	RPL_WHOISUSER                 = "311"
60
+	RPL_WHOISSERVER               = "312"
61
+	RPL_WHOISOPERATOR             = "313"
62
+	RPL_WHOWASUSER                = "314"
63
+	RPL_ENDOFWHO                  = "315"
64
+	RPL_WHOISIDLE                 = "317"
65
+	RPL_ENDOFWHOIS                = "318"
66
+	RPL_WHOISCHANNELS             = "319"
67
+	RPL_LIST                      = "322"
68
+	RPL_LISTEND                   = "323"
69
+	RPL_CHANNELMODEIS             = "324"
70
+	RPL_UNIQOPIS                  = "325"
71
+	RPL_CHANNELCREATED            = "329"
72
+	RPL_WHOISACCOUNT              = "330"
73
+	RPL_NOTOPIC                   = "331"
74
+	RPL_TOPIC                     = "332"
75
+	RPL_TOPICTIME                 = "333"
76
+	RPL_WHOISBOT                  = "335"
77
+	RPL_WHOISACTUALLY             = "338"
78
+	RPL_INVITING                  = "341"
79
+	RPL_SUMMONING                 = "342"
80
+	RPL_INVITELIST                = "346"
81
+	RPL_ENDOFINVITELIST           = "347"
82
+	RPL_EXCEPTLIST                = "348"
83
+	RPL_ENDOFEXCEPTLIST           = "349"
84
+	RPL_VERSION                   = "351"
85
+	RPL_WHOREPLY                  = "352"
86
+	RPL_NAMREPLY                  = "353"
87
+	RPL_LINKS                     = "364"
88
+	RPL_ENDOFLINKS                = "365"
89
+	RPL_ENDOFNAMES                = "366"
90
+	RPL_BANLIST                   = "367"
91
+	RPL_ENDOFBANLIST              = "368"
92
+	RPL_ENDOFWHOWAS               = "369"
93
+	RPL_INFO                      = "371"
94
+	RPL_MOTD                      = "372"
95
+	RPL_ENDOFINFO                 = "374"
96
+	RPL_MOTDSTART                 = "375"
97
+	RPL_ENDOFMOTD                 = "376"
98
+	RPL_YOUREOPER                 = "381"
99
+	RPL_REHASHING                 = "382"
100
+	RPL_YOURESERVICE              = "383"
101
+	RPL_TIME                      = "391"
102
+	RPL_USERSSTART                = "392"
103
+	RPL_USERS                     = "393"
104
+	RPL_ENDOFUSERS                = "394"
105
+	RPL_NOUSERS                   = "395"
106
+	ERR_UNKNOWNERROR              = "400"
107
+	ERR_NOSUCHNICK                = "401"
108
+	ERR_NOSUCHSERVER              = "402"
109
+	ERR_NOSUCHCHANNEL             = "403"
110
+	ERR_CANNOTSENDTOCHAN          = "404"
111
+	ERR_TOOMANYCHANNELS           = "405"
112
+	ERR_WASNOSUCHNICK             = "406"
113
+	ERR_TOOMANYTARGETS            = "407"
114
+	ERR_NOSUCHSERVICE             = "408"
115
+	ERR_NOORIGIN                  = "409"
116
+	ERR_INVALIDCAPCMD             = "410"
117
+	ERR_NORECIPIENT               = "411"
118
+	ERR_NOTEXTTOSEND              = "412"
119
+	ERR_NOTOPLEVEL                = "413"
120
+	ERR_WILDTOPLEVEL              = "414"
121
+	ERR_BADMASK                   = "415"
122
+	ERR_INPUTTOOLONG              = "417"
123
+	ERR_UNKNOWNCOMMAND            = "421"
124
+	ERR_NOMOTD                    = "422"
125
+	ERR_NOADMININFO               = "423"
126
+	ERR_FILEERROR                 = "424"
127
+	ERR_NONICKNAMEGIVEN           = "431"
128
+	ERR_ERRONEUSNICKNAME          = "432"
129
+	ERR_NICKNAMEINUSE             = "433"
130
+	ERR_NICKCOLLISION             = "436"
131
+	ERR_UNAVAILRESOURCE           = "437"
132
+	ERR_REG_UNAVAILABLE           = "440"
133
+	ERR_USERNOTINCHANNEL          = "441"
134
+	ERR_NOTONCHANNEL              = "442"
135
+	ERR_USERONCHANNEL             = "443"
136
+	ERR_NOLOGIN                   = "444"
137
+	ERR_SUMMONDISABLED            = "445"
138
+	ERR_USERSDISABLED             = "446"
139
+	ERR_NOTREGISTERED             = "451"
140
+	ERR_NEEDMOREPARAMS            = "461"
141
+	ERR_ALREADYREGISTRED          = "462"
142
+	ERR_NOPERMFORHOST             = "463"
143
+	ERR_PASSWDMISMATCH            = "464"
144
+	ERR_YOUREBANNEDCREEP          = "465"
145
+	ERR_YOUWILLBEBANNED           = "466"
146
+	ERR_KEYSET                    = "467"
147
+	ERR_INVALIDUSERNAME           = "468"
148
+	ERR_CHANNELISFULL             = "471"
149
+	ERR_UNKNOWNMODE               = "472"
150
+	ERR_INVITEONLYCHAN            = "473"
151
+	ERR_BANNEDFROMCHAN            = "474"
152
+	ERR_BADCHANNELKEY             = "475"
153
+	ERR_BADCHANMASK               = "476"
154
+	ERR_NOCHANMODES               = "477"
155
+	ERR_BANLISTFULL               = "478"
156
+	ERR_NOPRIVILEGES              = "481"
157
+	ERR_CHANOPRIVSNEEDED          = "482"
158
+	ERR_CANTKILLSERVER            = "483"
159
+	ERR_RESTRICTED                = "484"
160
+	ERR_UNIQOPPRIVSNEEDED         = "485"
161
+	ERR_NOOPERHOST                = "491"
162
+	ERR_UMODEUNKNOWNFLAG          = "501"
163
+	ERR_USERSDONTMATCH            = "502"
164
+	ERR_HELPNOTFOUND              = "524"
165
+	ERR_CANNOTSENDRP              = "573"
166
+	RPL_WHOISSECURE               = "671"
167
+	RPL_YOURLANGUAGESARE          = "687"
168
+	RPL_WHOISLANGUAGE             = "690"
169
+	ERR_CHANNAMEINUSE             = "692"
170
+	ERR_CANNOTRENAME              = "693"
171
+	RPL_HELPSTART                 = "704"
172
+	RPL_HELPTXT                   = "705"
173
+	RPL_ENDOFHELP                 = "706"
174
+	ERR_NOPRIVS                   = "723"
175
+	RPL_MONONLINE                 = "730"
176
+	RPL_MONOFFLINE                = "731"
177
+	RPL_MONLIST                   = "732"
178
+	RPL_ENDOFMONLIST              = "733"
179
+	ERR_MONLISTFULL               = "734"
180
+	RPL_LOGGEDIN                  = "900"
181
+	RPL_LOGGEDOUT                 = "901"
182
+	ERR_NICKLOCKED                = "902"
183
+	RPL_SASLSUCCESS               = "903"
184
+	ERR_SASLFAIL                  = "904"
185
+	ERR_SASLTOOLONG               = "905"
186
+	ERR_SASLABORTED               = "906"
187
+	ERR_SASLALREADY               = "907"
188
+	RPL_SASLMECHS                 = "908"
189
+	RPL_REG_SUCCESS               = "920"
190
+	RPL_VERIFY_SUCCESS            = "923"
191
+	RPL_REG_VERIFICATION_REQUIRED = "927"
192
+	ERR_TOOMANYLANGUAGES          = "981"
193
+	ERR_NOLANGUAGE                = "982"
200 194
 
201 195
 	// draft numerics
202 196
 	// these haven't been assigned actual codes, so we use RPL_NONE's code (300),

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

@@ -173,21 +173,6 @@ func (server *Server) setISupport() (err error) {
173 173
 	isupport.Add("TOPICLEN", strconv.Itoa(config.Limits.TopicLen))
174 174
 	isupport.Add("UTF8MAPPING", casemappingName)
175 175
 
176
-	// account registration
177
-	if config.Accounts.Registration.Enabled {
178
-		// 'none' isn't shown in the REGCALLBACKS vars
179
-		var enabledCallbacks []string
180
-		for _, name := range server.config.Accounts.Registration.EnabledCallbacks {
181
-			if name != "*" {
182
-				enabledCallbacks = append(enabledCallbacks, name)
183
-			}
184
-		}
185
-
186
-		isupport.Add("ACCCOMMANDS", "CREATE,VERIFY")
187
-		isupport.Add("REGCALLBACKS", strings.Join(enabledCallbacks, ","))
188
-		isupport.Add("REGCREDTYPES", "passphrase,certfp")
189
-	}
190
-
191 176
 	err = isupport.RegenerateCachedReply()
192 177
 	if err != nil {
193 178
 		return

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