James Lu
44083ccd5e
core: Store opertype info in all IrcUser objects
...
This allows plugins to define custom opertypes for their clients, and still have them show in WHOIS queries.
2016-03-26 12:55:23 -07:00
James Lu
fbd8659a7d
classes: spawn PyLink clients with a custom opertype
2016-03-26 12:49:10 -07:00
James Lu
45c2abdae7
Irc: run initVars() on connect too
...
2b16f25b61
is wrong; it caused reconnects to fail with disconnect loops.
2016-03-25 17:14:16 -07:00
James Lu
b2b04c8e75
classes: really ignore errors when shutting down sockets
2016-03-25 17:03:25 -07:00
James Lu
03b53aee59
Merge branch 'staging' into devel
2016-03-25 15:03:05 -07:00
James Lu
2b16f25b61
classes.Irc: clear state on disconnect, not on connect
...
Possible fix for #183 - when networks disconnect, their server index wasn't cleared properly, causing errors from servers already existing to be thrown when the same server name is spawned again.
2016-03-25 15:00:15 -07:00
James Lu
1930739aad
Revert "Irc: don't call initVars() on IRC object initialization"
...
This reverts commit 5a68dc1bc5
.
2016-03-25 14:54:29 -07:00
James Lu
f5f0df52ce
classes: raise KeyError, not return KeyError...
2016-03-19 18:00:44 -07:00
James Lu
e948db5c7b
classes: support looking at older versions of prefix modes mappings
2016-03-19 17:54:18 -07:00
James Lu
e8b0018585
classes: Implement IrcChannel.is(Voice|Halfop|Op)Plus ( #168 )
2016-03-19 17:37:38 -07:00
James Lu
ed333a6d1b
classes: implement IrcChannel.isOp, isVoice, getPrefixmodes, etc
...
Ref #168 .
2016-03-19 17:32:32 -07:00
James Lu
8135f3a735
core: Depluralize prefixmodes mappings ( #168 )
...
This is an API breaking change. I really don't know why I made these keys plural to start, since it only made things more complicated. Prefix modes are not pluralized in the list of supported modes of each IRCd.
2016-03-19 17:25:04 -07:00
James Lu
1d4350c4fd
classes: provide IrcChannel objects with their own name using KeyedDefaultdict
...
Closes #171 .
2016-03-19 17:01:39 -07:00
James Lu
b6889fb097
irc: fix spacing in certificate fingerprint logging
2016-03-07 20:30:24 -08:00
James Lu
cf15bed58d
classes: add services_account field in IrcUser ( #25 ), default 'identified' attribute to empty string instead of None
2016-02-07 18:11:09 -08:00
James Lu
0d4655c381
core: support multiple channel loggers with DIFFERENT log levels & fix example conf ( #83 )
2016-01-30 23:35:51 -08:00
James Lu
669e889e6f
Support configurable SSL fingerprint hash types ( Closes #157 )
2016-01-30 23:04:13 -08:00
James Lu
14efb27fe8
Initial experimental support for logging to channels ( #83 )
...
Doesn't support rehashing and all that yet.
2016-01-23 13:52:37 -08:00
James Lu
5a68dc1bc5
Irc: don't call initVars() on IRC object initialization
...
This is already done in connect(), so it isn't really necessary to populate these variables when first connect hasn't happened yet.
2016-01-23 13:52:37 -08:00
James Lu
812a866a4e
protocols: rename pingServer -> ping
2016-01-16 17:11:23 -08:00
James Lu
3a53005d8c
protocols: messageClient -> message, noticeClient -> notice
2016-01-16 16:44:23 -08:00
James Lu
acdd7dbb78
protocols: rename joinClient(...) -> join(...)
2016-01-16 16:36:45 -08:00
James Lu
925e11d6c4
classes.Irc: when disconnecting, suppress socket read errors in run() ( #152 )
2016-01-09 20:25:53 -08:00
James Lu
cf2fcf9263
classes.Irc: only allow one shutdown sequence at a time ( #152 )
2016-01-09 20:25:53 -08:00
James Lu
f70ca54ae4
classes: IRC object disconnect tweaks (really fixes #152 )
...
- disconnect() was missing a socket.shutdown() cause, as socket.close() does NOT cause connections to close immediately! https://docs.python.org/3/library/socket.html#socket.socket.close
- Merge _disconnect() and disconnect(), the latter was just a wrapper with little use
2016-01-09 20:04:10 -08:00
James Lu
b1aa4c2ec5
classes: show instance type in classes.IrcUser/IrcChannel/IrcServer
2016-01-09 19:15:39 -08:00
James Lu
0c48ea6791
Merge branch 'staging' into devel
...
Fix #154 . This everts what was done to address #152 , but unclean shutdowns are not as bad as having the server fork endlessly!
2016-01-07 22:08:12 -08:00
James Lu
a385bc32d9
Revert "classes: replace threading.Timer with normal threads for schedulePing"
...
This reverts commit 64bb646d1e
.
2016-01-05 19:35:16 -08:00
James Lu
a7104dc01c
Revert "classes: actually, loop schedulePing only when connection_thread is alive"
...
This reverts commit 124100fcf5
.
2016-01-05 19:35:15 -08:00
James Lu
6577013ada
Irc: Return False instead of None when isInternalClient fails to find a match
2015-12-31 17:53:33 -08:00
James Lu
eac934c237
classes: sort code, move nickToUid, clientToServer, isInternalClient, isInternalServer into the Irc class
...
The following BREAKING changes are made:
utils.nickToUid(irc, nick) -> irc.nickToUid(nick)
utils.isInternalClient(irc, uid) -> irc.isInternalClient(uid)
utils.isInternalServer(irc, uid) -> irc.isInternalServer(uid)
utils.clientToServer(irc, uid) -> utils.getServer(uid)
2015-12-31 17:28:47 -08:00
James Lu
124100fcf5
classes: actually, loop schedulePing only when connection_thread is alive
...
Related to #152 . Probably still not perfect, but shutdowns are somewhat faster than they were before.
2015-12-29 11:36:39 -08:00
James Lu
91f75e4d93
classes: Don't require self.connected to be set for "No data received" disconnects
...
Previously, this would've caused an infinite loop if a socket closed (e.g. from server shutdown) while PyLink was connecting.
2015-12-29 11:23:06 -08:00
James Lu
64bb646d1e
classes: replace threading.Timer with normal threads for schedulePing
...
Closes #152 .
2015-12-29 10:58:22 -08:00
James Lu
11b8821228
classes: log raw hook data for reference
2015-12-26 16:43:40 -08:00
James Lu
01a4da5d3a
classes: Fix another missing docstring
2015-12-26 14:47:23 -08:00
James Lu
fbf33e15a6
classes: in Irc.runline(), return the parsed hook args after processing
2015-12-22 10:46:54 -08:00
James Lu
e4fb64aeba
Document more parts of the core - comments are cool right
2015-12-06 17:40:13 -08:00
James Lu
b0e66ddd6e
classes: log offending hook data when a hook function errors
...
Closes #126 .
2015-11-08 10:56:09 -08:00
James Lu
2eeba50a2a
Modularize TS updating code ( Closes #129 )
2015-11-08 10:49:09 -08:00
James Lu
e4cfd1e1e6
Irc: log unrecognized commands to INFO too
2015-10-23 19:07:17 -07:00
James Lu
e942b411f1
classes: introduce irc.reply()
2015-10-23 18:29:01 -07:00
James Lu
f80b383d06
Irc: actually abort when handle_events errors
2015-10-09 21:35:42 -07:00
James Lu
4e2876104f
Irc: require autoconnect value to be >= 1
...
This prevents sending a flood of connects whenever a server is unreachable.
2015-10-02 23:21:40 -07:00
James Lu
1c8ee5d84b
core: support IPv6 connections
2015-10-02 23:17:57 -07:00
James Lu
7e57798f4d
core: refresh various serverdata attributes on REHASH
2015-10-02 23:17:55 -07:00
James Lu
55d9eb240f
classes.Irc: prettier __repr__
2015-09-28 19:25:45 -07:00
James Lu
e84a2d1025
Modularize our import hacks, make Irc() take a conf object again
2015-09-28 19:12:45 -07:00
James Lu
bbedd38703
world: rename command_hooks=>hooks, bot_commands=>commands
2015-09-27 10:53:25 -07:00
James Lu
97a135a6f1
classes: add special PYLINK_SELF(PRIVMSG/NOTICE) hooks for command loopback
2015-09-26 10:20:23 -07:00
James Lu
034731ab1e
core: log which plugin is being called when calling hooks
2015-09-26 10:20:23 -07:00
James Lu
822544e3cc
core: keep track of where last command was called & make command calling a shared function
...
Prerequisite for FANTASY command implementation (#111 ).
2015-09-26 10:20:23 -07:00
James Lu
c77d170765
Move parseArgs and removeClient into the base Protocol class
...
These aren't really TS6-specific, and can be useful anywhere.
2015-09-24 18:03:30 -07:00
James Lu
19c4c2ce3f
classes: split up run() into run() and runline()
...
This helps the debugging process, by allowing us to also inject lines directly into the protocol module.
2015-09-19 10:31:43 -07:00
James Lu
fb91ff8ea3
Remove allow_abcd attributes from protocols (not needed anymore)
2015-09-17 19:07:37 -07:00
James Lu
069cd62865
core: allow marking spawned clients as manipulatable or protected
...
This flag determines whether the client should be manipulated by commands like bots.py's MODE/QUIT/JOIN commands, or protected from them (services).
2015-09-17 19:01:54 -07:00
James Lu
b87e34efa2
Slightly more consistent logging format...
2015-09-16 21:32:27 -07:00
James Lu
7ced47e9b3
bots: don't allow setting umode +o on InspIRCd users (forbidden and causes desync)
2015-09-14 18:09:39 -07:00
James Lu
c5b6658200
bots: more validation in "MODE" to prevent bad things from happening
...
This adds a new "allow_forceset_usermodes" attribute to protocol modules, which determines whether the IRCd allows us to force usermode changes on other servers' clients.
Also, make sure our target is a valid nick/UID/channel, and that the parsed modes are not empty!
2015-09-14 17:46:20 -07:00
James Lu
fd16a42708
Irc: log the offending line when an error is caught in handle_events
2015-09-13 17:58:59 -07:00
James Lu
a28715c2c6
IrcChannel: allow .deepcopy()
2015-09-13 13:47:04 -07:00
James Lu
46fab1cab7
classes.FakeProto: store UIDs as strings
2015-09-12 22:26:38 -07:00
James Lu
3a8d3d146c
protocols: make "uidgen" a protocol instance attribute
2015-09-12 16:02:51 -07:00
James Lu
df42a81191
classes/protocols: store server descriptions internally
...
Closes #106 .
2015-09-12 12:07:59 -07:00
James Lu
3217f726f8
Fix those test cases again.
2015-09-06 23:39:10 -07:00
James Lu
62e7cc4fca
move utils.msg() => classes.Irc.msg()
...
New function gets an extra (optional) "source" argument for specifying a sender UID. It's also shorter since no IRC object has to be passed to utils.
2015-09-06 22:23:44 -07:00
James Lu
57da0aa3b3
Classify all our protocol modules - why didn't I do this earlier
2015-09-05 18:00:57 -07:00
James Lu
eac81de176
Irc: add internal support for aborting connections
...
New "aborted" threading event, which can be set to True in order to stop the existing run() loop
Autoconnect confirmed to work with this.
2015-09-02 22:06:18 -07:00
James Lu
5480ae14c4
classes: Remove "opertype" IrcUser() argument
...
This is useless and should've never been here, oops.
2015-08-31 14:11:12 -07:00
James Lu
f9b4457ced
Decorate relay clients, etc. with custom OPERTYPEs
...
New PyLink internal hook: PYLINK_CLIENT_OPERED, called (supposedly) when a client opers up.
2015-08-31 13:31:20 -07:00
James Lu
1062e47b72
classes.IrcChannel: default modes to +nt on join
...
This may have regressions; who knows...
2015-08-31 09:09:03 -07:00
James Lu
d270a18285
Remove unused imports
2015-08-30 12:53:30 -07:00
James Lu
549a1d1ba4
classes: IrcServer.users is now a set()
2015-08-29 12:35:06 -07:00
James Lu
adb9ef13a6
classes: fixes for the test API
...
- fakeirc: drop dummyhook, call hooks in run() - the protocol module doesn't do this for us anymore
- Irc: don't thread if we're in test mode (temp. hack for now)
2015-08-29 10:10:45 -07:00
James Lu
973aba6de7
Move utils' global variables to world.py
2015-08-29 09:39:33 -07:00
James Lu
b71e508acc
classes.Irc no longer needs a conf argument; tweak tests again
2015-08-28 19:38:16 -07:00
James Lu
ad5fc97e21
Many fixes to test API, utils.reverseModes stub
2015-08-28 19:28:06 -07:00
James Lu
3d621b00df
Move checkAuthenticated() to utils, and give it and isOper() toggles for allowing oper/PyLink logins
2015-08-25 20:47:21 -07:00
James Lu
090fa85a46
Move Irc() from main.py to classes.py
...
This prevents import loops (main->utils->classes->main) from the changes in the next commit.
2015-08-25 20:37:47 -07:00
James Lu
1a57dfcdc3
prs+IrcUser: add incoming (handle_away) and outgoing (awayClient) AWAY handling
2015-08-12 04:17:01 -07:00
James Lu
254ccea0a3
remove some debugging cruft and unused imports
2015-07-23 11:46:45 -07:00
James Lu
8a1f965303
Consistently use applyModes in spawnClient, so user modes are stored like ('o', None) instead of ('+o', None)
...
Drop the 'modes' argument in IrcUser, for this is incorrect.
2015-07-22 21:14:22 -07:00
James Lu
686467ffa6
Remove endburst toggling in spawnServer, has_bursted IrcServer flag
...
Neither are being used at all; they're essentially dead code.
2015-07-22 20:39:38 -07:00
James Lu
b1e409ff3e
relay: unbreak topic handling ( closes #68 )
...
Introducing a new .topicset attributing in IrcChannel denoting whether we've received a TOPIC for this channel from the uplink yet.
2015-07-20 13:18:04 -07:00
James Lu
a51cfcb7b2
Fix fakeirc and tests for relay ( #56 )
2015-07-17 22:52:55 -07:00
James Lu
d97fce8205
IrcUser & pr/insp: Implement user channel tracking
2015-07-16 12:20:40 -07:00
James Lu
67f5bbba4b
add a utils.started threaded trigger, so plugins can ACTUALLY wait until all Irc objects have been initialized to do their work
2015-07-13 16:07:55 -07:00
James Lu
ffec80ee45
tests/: update for new multi-net config format
2015-07-09 18:42:38 -07:00
James Lu
8576778ddc
Make the 'bot' conf block available in Irc() as irc.botdata
...
Protocol modules shouldn't read conf directly, so that we can override the config in testing.
2015-07-08 13:56:17 -07:00
James Lu
8f75c5363c
Move all the FakeIRC stuff to classes.py, update FakeIRC with the ability to get hook data
2015-07-07 18:07:20 -07:00
James Lu
33d23893f8
pr/inspircd: update channel TS when receiving remote FJOIN with lower TS
2015-07-06 19:00:20 -07:00
James Lu
8bed47e7bb
pr/inspircd: handlers for FTOPIC and TOPIC (ref #31 ); make handle_nick return 'newnick' instead of 'target' as arg
2015-07-06 15:33:23 -07:00
James Lu
b22f674785
Support prefix modes (+qaohv); refactor applyModes to apply in place; add removeuser() to IrcChannel
...
Closes #16 .
2015-07-05 12:48:39 -07:00
James Lu
dafeff6324
Add channel mode handling (more testing needed)
...
Closes #28 .
2015-07-05 00:20:45 -07:00
James Lu
0c8a30323a
proto/inspircd: raise ProtocolError instead of calling sys.exit on errors
2015-07-03 18:07:01 -07:00
James Lu
c686523a6e
Add pseudoserver spawning, adapting _sendFromServer and spawnClient accordingly.
...
Now you can spawn multiple servers for a multi-server botnet!
Also, create proto.isInternalServer() / utils.isServerName() checkers.
Closes #22 .
2015-06-21 15:03:58 -07:00
James Lu
aeb53a14e3
Make IrcUser.modes a set
2015-06-20 20:58:25 -07:00
James Lu
379f442a14
Add basic user mode tracking ( Closes #10 )
2015-06-20 20:36:35 -07:00
James Lu
70480b8830
Make IrcChannel.users a set and add part handling
...
This should be everything needed for basic channel enumeration: closes #13 .
2015-06-07 09:43:13 -07:00
James Lu
4b9e7b1937
Fix #17 (netsplit quits)
...
copy() all the things! Also purge empty channels on quit.
2015-06-07 09:33:35 -07:00
James Lu
6680942424
More code and broken shenanigans
...
- plugins/commands.py: add admin-only eval command
- add IrcChannel class and basic channel (FJOIN/QUIT) handling
- Move SQUIT/QUIT handling code to a shared removeClient function
- Unfortunately, this causes a regression where the users and channels indexes aren't purged on a netsplit :(
2015-06-06 23:06:33 -07:00
James Lu
c33d5922c6
Turn spawn pseudoclient and JOIN into its own functions, and move IrcUser/IrcServer to its own module
...
These classes are protocol independent, so we may as well split them for future protocol modules.
2015-06-06 22:17:45 -07:00