aboutsummaryrefslogtreecommitdiff
path: root/http2irc.py
diff options
context:
space:
mode:
authorGravatar JustAnotherArchivist2021-12-07 09:57:30 +0000
committerGravatar JustAnotherArchivist2021-12-07 09:57:30 +0000
commit619089f071e744682504e93799c75fd910d1c23f (patch)
treea691854bf70472b1e29b02d4a7ce1bacc26d48fd /http2irc.py
parentReplace LF with two spaces (diff)
signature
Validate nickname against RFC 2812 rules
Diffstat (limited to 'http2irc.py')
-rw-r--r--http2irc.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/http2irc.py b/http2irc.py
index cfc38cc..d0eca95 100644
--- a/http2irc.py
+++ b/http2irc.py
@@ -115,8 +115,12 @@ class Config(dict):
if obj['irc']['family'] not in ('inet', 'INET', 'inet6', 'INET6'):
raise InvalidConfig('Invalid IRC family')
obj['irc']['family'] = getattr(socket, f'AF_{obj["irc"]["family"].upper()}')
- if 'nick' in obj['irc'] and not isinstance(obj['irc']['nick'], str): #TODO: Check whether it's a valid nickname
- raise InvalidConfig('Invalid IRC nick')
+ if 'nick' in obj['irc']:
+ if not isinstance(obj['irc']['nick'], str) or not obj['irc']['nick']:
+ raise InvalidConfig('Invalid IRC nick')
+ if obj['irc']['nick'][0] not in string.ascii_letters + '[]\\`_^{|}' or obj['irc']['nick'].strip(string.ascii_letters + string.digits + '[]\\`_^{|}') != '':
+ # The allowed characters in nicknames (per RFC 2812) are a strict subset of the ones for usernames, so no need to also check for the latter.
+ raise InvalidConfig('Invalid IRC nick: contains illegal characters')
if len(IRCClientProtocol.nick_command(obj['irc']['nick'])) > 510:
raise InvalidConfig('Invalid IRC nick: NICK command too long')
if 'real' in obj['irc'] and not isinstance(obj['irc']['real'], str):