James Lu
76c0db15c4
core: merge TLS validation code into IRCNetwork ( #592 )
...
Certificate verification is now enabled for all Clientbot networks, but not yet for S2S links (self-signed certs are common here and direct IP links even more so)
2018-06-15 15:29:15 -07:00
James Lu
4524aebbac
clientbot: initial pass of TLS cert validation ( #592 )
...
This works OK, but we should make the validation options built-in instead of clientbot-specific.
2018-06-15 02:47:12 -07:00
James Lu
d3125d9a8f
core: automatically detect between IPv4 / IPv6 addresses on connect
...
Closes #212 .
2018-06-15 02:43:33 -07:00
James Lu
56c035a1f5
IRCNetwork: fix broken ping timeout handling
...
Check for ping outs in the ping scheduler instead of the listener... If the connection is dead, the listener won't ever be called.
2018-06-14 01:18:33 -07:00
James Lu
b2421f5e15
IRCNetwork: simplify connection error handling
2018-06-14 01:18:33 -07:00
James Lu
579b5ce93f
IRCNetwork: split SSL connection setup into separate functions
...
* _make_ssl_context(): returns the SSLContext to use on he network (with options set)
* _setup_ssl(): sets up TLS by loading certfile / keyfile and calling wrap_socket()
* _verify_ssl(): implements certificate fingerprint verification, raising TLSVerificationError (a new subclass of ConnectionError) if this fails
This is a prerequisite for #592 .
2018-06-14 01:17:39 -07:00
James Lu
deff6d077d
match_host: remove deprecation notice for non-host globs
...
This is too flaky with commands taking arbitrary user inputs (e.g. opercmds/checkban)
2018-06-12 00:02:18 -07:00
James Lu
2ca9de2ea8
PyLinkNCWUtils: make the allowAuthed, allowOper options to is_oper no-ops
2018-06-11 23:55:19 -07:00
James Lu
18f108c328
PyLinkNCWUtils: remove check_authenticated() ( #422 )
2018-06-11 23:54:48 -07:00
James Lu
ed5d46e28a
utils: remove deprecated is* functions
2018-06-11 23:48:12 -07:00
James Lu
3bea214cb0
classes: remove irc.botdata ( #422 )
2018-06-11 23:43:57 -07:00
James Lu
f9d21c2b10
UserMapping: fix wrong args to __copy__
2018-06-09 10:44:36 -07:00
James Lu
31a0d36990
clientbot: ignore missing args in 324 / RPL_CHANNELMODEIS
...
Fixes #537 .
2018-06-08 18:45:20 -07:00
James Lu
f4de604b7d
classes: split match_host() into match_host() and match_text()
2018-06-08 18:25:23 -07:00
James Lu
b0188dab92
get_friendly_name: strip STATUSMSG prefixes before checking is_channel
2018-06-08 17:26:25 -07:00
James Lu
6f3813d3a4
UserMapping: add in missing reference to the parent irc instance
2018-06-08 15:54:06 -07:00
James Lu
e3a935d0b7
classes: make User, Channel TS a property for type-safety ( #594 )
2018-05-26 02:30:25 -07:00
James Lu
f20fa5e995
Add User.get_fields(), and rework plugins to fix $nick broken expansions
...
User.nick is no longer a writable attribute since a085aed924
, so it won't show up in __dict__ now.
get_fields() replaces the User.__dict__ hack various plugins used and also provides some new expansion variables:
- $sid and $server expand to the server ID and name respectively
- $modes and $channels are now preformatted strings
- $netname expands to the network name
$manipulatable and $_irc were removed since their values aren't quite meaningful as strings
2018-05-26 02:12:38 -07:00
James Lu
b72420a8aa
Revert "NetworkCore: return the server in get_server if the arg was a server"
...
The complete implementation of is_privileged_service() in ec3a94c4ca
explicitly checks the entity ID type, so this strange hack is not needed.
This reverts commit 9113b34b46
.
2018-05-26 01:14:32 -07:00
James Lu
ec3a94c4ca
Move U:line checking into core as PyLinkNCWUtils.is_privileged_server()
...
Closes #604 .
2018-05-26 00:14:04 -07:00
James Lu
a66a9b6336
core: demote KeyError logging in _remove_client to DEBUG
...
This is needed for #607 .
2018-05-21 00:28:16 -07:00
James Lu
20bbf531e6
wrap_message: fall back to bufsize=510 on protocols declaring S2S_BUFSIZE to be 0 (unlimited)
2018-05-18 19:09:06 -07:00
James Lu
559b262db8
core: break attempts to read from a socket if no data is available
2018-05-18 19:08:37 -07:00
James Lu
f87e646f35
core: use the most recent UID if we have an unresolved nick collision / desync
...
This is the one most likely to be correct, assuming IRCds deals with nick collisions properly on their own.
2018-05-18 18:17:04 -07:00
James Lu
73322bd9ba
wrap_message: expand UID targets into nicks before processing ( #153 )
2018-05-11 14:47:27 -07:00
James Lu
244c4fe0eb
classes: return valid channels as-is in get_friendly_name()
...
This makes it safe to use when processing message targets. (ref #153 )
2018-05-11 14:47:18 -07:00
James Lu
0ac5d424d8
core: implement text wrapping in irc.msg()
...
Closes #153 .
2018-05-11 14:38:21 -07:00
James Lu
b46ab844fe
classes: really fix KeyError crashes on duplicate QUIT
2018-04-30 11:11:14 -07:00
James Lu
e96081aa6e
PyLinkNetworkCore: make deletion from self.users non-fatal
2018-04-20 19:39:35 -07:00
James Lu
25d24e9bb2
Use non-blocking sockets again, since Linux select() doesn't guarantee that recv() won't block
2018-04-12 10:58:09 -07:00
James Lu
6bcf7d325f
PyLinkNetworkCore: add get_service_option()
...
Closes #574 .
2018-04-07 22:20:35 -07:00
James Lu
138a52611e
classes: oops, actually tell the queue thread to abort before we wait for it to stop
2018-04-07 22:12:17 -07:00
James Lu
80cbd7a257
classes: make disconnections more synchronized
...
- Make ping timer abort instantly if the network is dead
- Shut down the read and write parts of the socket separately, and only close the socket once both parts are done.
2018-04-07 21:56:10 -07:00
James Lu
84dbca4bda
classes: thread socket connects once more since they block
2018-04-07 21:56:06 -07:00
James Lu
7586989763
classes: really quash duplicate disconnect calls as much as possible
2018-03-31 11:53:50 -07:00
James Lu
f274088ea0
classes: more checks on _aborted to (hopefully) prevent duplicate disconnects triggered by _send
2018-03-30 10:47:34 -07:00
James Lu
93d590fdea
UserMapping: check for lower_nick rather than isinstance(userobj, User)
...
This makes classes reload-safe again.
2018-03-30 10:46:49 -07:00
James Lu
335fb352ec
classes: ignore errors on duplicate selector.unregister()
...
This should really be fixed more thoroughly: there are still some remaining issues after the port to select, with disconnect / reconnect being triggered twice.
2018-03-29 14:04:58 -07:00
James Lu
a085aed924
Rework irc.users and User() to transparently create a store of nicks -> UIDs
...
- This turns IRCNetwork.users into a new UserMapping class, which stores User objects by UID (str) and provides a 'bynick' dict storing case-normalized nicks to lists of UIDs.
- Turn User.nick into a property, where the setter implicitly updates the 'bynick' index and computes a case-normalized version of the nick (User.lower_nick)
2018-03-24 00:12:19 -07:00
James Lu
815535d76b
IRCNetwork: fix autoconnect not applying when socket.connect() fails
2018-03-23 20:21:49 -07:00
James Lu
814dd9a3c5
IRCNetwork: only register a socket with selectdriver after connecting
2018-03-23 20:16:59 -07:00
James Lu
bb1334696c
classes: cache more of to_lower()
2018-03-22 22:03:08 -07:00
James Lu
b522967760
Fix duplicate calls to _run_autoconnect
2018-03-22 17:42:28 -07:00
James Lu
91b86ce0e4
Remove structures.DeprecatedAttributesObject, it's vastly inefficient for what it accomplishes
2018-03-17 15:49:48 -07:00
James Lu
8100a4cea6
IRCNetwork: run _run_autoconnect in a thread so it doesn't block whatever calls disconnect()
2018-03-17 15:26:36 -07:00
James Lu
0151f77f7b
Don't clear the read buffer with every _run_irc call
2018-03-17 12:18:16 -07:00
James Lu
10d2fb93ed
classes: fix syntaxerror from merge
2018-03-17 11:06:02 -07:00
James Lu
0033612fa3
Merge branch 'devel' into engine-rework
...
Conflicts:
classes.py
2018-03-17 11:03:58 -07:00
James Lu
f7ab2564fe
Rework inbound connection handling to use select
...
Closes #588 .
2018-03-17 11:01:32 -07:00
James Lu
92460716d1
IRCNetwork: bump SOCKET_REPOLL_WAIT to 1 sec
2018-03-07 18:32:20 -08:00