Commit Graph

480 Commits

Author SHA1 Message Date
Daniel Oaks a5911ad14c server: Add configurable NICKLEN and CHANNELLEN 2016-08-12 22:20:32 +10:00
Daniel Oaks 199f8bd8ae USER: disallow usernames that break the protocol 2016-06-30 23:55:44 +10:00
Daniel Oaks 19c2bb69fc Allow looking up usernames with ident on connection 2016-06-30 19:28:34 +10:00
Daniel Oaks 1d51bb450a constants: Make SEM_VER the actual version number conforming to Semantec Versioning, and VER the composed number 2016-06-30 17:42:24 +10:00
Daniel Oaks 748bc759cb Cleanups reported by goreportcard 2016-06-30 15:43:27 +10:00
Daniel Oaks b820559050 modes: Add TLS umode (+Z) 2016-06-29 01:09:07 +10:00
Daniel Oaks 41473bb444 Fix PASS handling 2016-06-28 16:06:17 +10:00
Daniel Oaks 34a099b61a Fix PING and PONG 2016-06-22 22:04:13 +10:00
Daniel Oaks 04442ddef1 Stuff is no longer completely broken. Just mostly. 2016-06-20 22:53:45 +10:00
Daniel Oaks b8dc10f92d nickname: Fix 2016-06-20 10:04:53 +10:00
Daniel Oaks 9e7a590f23 server: Fix 2016-06-19 21:59:18 +10:00
Daniel Oaks 2a519c8061 use server.name and server.nameString, name for checking and getting nice comparison, nameString for reply outputs 2016-06-19 15:43:16 +10:00
Daniel Oaks 7fcc6bdbc4 channels: Fix 2016-06-19 14:55:24 +10:00
Daniel Oaks 08225c201d continue work reorganising and redoing EVERYTHING 2016-06-19 10:01:30 +10:00
Daniel Oaks e83283e7fd urgh this should not even be commited yet, this will all be squashed out 2016-06-17 22:17:42 +10:00
Daniel Oaks 2f08401a0f Attempt to add mostly-correct license info at the top of each file... track this stuff a bit better 2016-06-15 21:50:56 +10:00
Daniel Oaks 3a9a643d30 server: Let websocket listeners also be TLS 2016-04-28 20:41:26 +10:00
Daniel Oaks 2fb6acb92a restructure SSL/TLS a bit, name config items better 2016-04-28 20:12:23 +10:00
Daniel Oaks cd7d30a997 Set default channel modes to +nt 2016-04-21 19:29:50 +10:00
Daniel Oaks 8885f14f19 PROXY: Restrict to specified addresses/hostnames 2016-04-21 16:53:55 +10:00
Daniel Oaks fb345a2dd4 user: Don't parse the second and third params anymore 2016-04-15 18:45:05 +10:00
Daniel Oaks 9acdeedec6 commands: Simplify and unify minimum required number of args handling 2016-04-15 15:57:08 +10:00
Daniel Oaks 8b79662f1a modes: use secret instead of private, it's the standard these days. fix secret channel hiding in whois 2016-04-14 22:33:38 +10:00
Daniel Oaks 0ccabead31 cap: Properly suspend registration for CAP negotiation 2016-04-14 11:25:23 +10:00
Daniel Oaks a241ea7dd6 version: Return RPL_ISUPPORT tokens, as standard 2016-04-14 09:55:22 +10:00
Daniel Oaks 3972fc49ed privileges: Add founder/admin/halfop (qah), remove owner (O)
channel owner is from 2812 and unused in the real world
2016-04-14 09:36:02 +10:00
Daniel Oaks c3288823af Add native SSL/TLS listener support from @enmand for our new config 2016-04-13 20:45:09 +10:00
Daniel Oaks 8dc2732137 server: Store MOTD in memory rather than reading it from disk every time. Fixes #3 2016-04-13 15:49:30 +10:00
Daniel Oaks 56641ff650 isupport: Don't advertise stuff that's still TODO 2016-04-13 08:59:00 +10:00
Daniel Oaks 78928c0322 isupport: STATUSMSG isn't supported, don't advertise it 2016-04-13 08:58:52 +10:00
Daniel Oaks a013205fd1 Support network name 2016-04-13 08:58:41 +10:00
Daniel Oaks c88cd328f8 Very initial RPL_ISUPPORT numeric support 2016-04-13 08:57:34 +10:00
Daniel Oaks c705bdaac5 irc/server: MOTD does not need to be clipped at 80 chars, has not been standard for a long while now 2016-04-13 08:46:14 +10:00
Edmund Huber fce54343ea touchups to irc/websocket.go per review comments 2015-06-06 16:11:06 -07:00
Edmund Huber 62302ec92e fail WebSockets with subprotocols here, because gorilla leaves it up for us to deal with subprotocols 2015-06-06 15:19:07 -07:00
Niels Freier 6a69a65860 WebSocket layer to be able to connect "web" client
Currently working with a mini irc js implem, the flow:

* PASS
* NICK
* USER
* JOIN
* PRIVMSG

works and the ping/pong timeout keep the communication open.
2015-05-04 09:47:26 +04:00
Jeremy Latt 6c10add399 improve performance by using less goroutines
- get rid of command channel in Client
- get rid of loginTimer; use other timers instead
- move debugging code to debug.go
2014-04-15 12:10:02 -07:00
Jeremy Latt b0bb0faadc remove unnecessary String()s; rename parse functions 2014-03-28 14:33:31 -07:00
Jeremy Latt 21a86c3216 fix gcstats debugging command 2014-03-28 13:03:06 -07:00
Edmund Huber d5bdc78d55 adding theater-mode, fixes #15 2014-03-20 05:05:18 +01:00
Jeremy Latt 8c44bb9ff3 ONICK command to allow operators to change users' nicks 2014-03-17 12:56:35 -07:00
Jeremy Latt 7db4347419 bind to listening sockets before asyncing 2014-03-13 17:19:39 -07:00
Jeremy Latt d85e6681d9 move modes code to its own file; fix SQL (un)marshalling 2014-03-13 13:22:38 -07:00
Jeremy Latt 39b7c2a915 Merge remote-tracking branch 'origin/master' into cleanup
Conflicts:
	irc/client.go
	irc/commands.go
	irc/constants.go
	irc/reply.go
	irc/server.go
	irc/types.go
2014-03-13 12:38:44 -07:00
Jeremy Latt 2006aff9f7 break up types.go
- remove old interfaces, move to relevant files
- remove Phase in favor of a boolean flag
2014-03-12 17:52:25 -07:00
Jeremy Latt 0126edc7af move capability handling code to a single file 2014-03-12 17:38:11 -07:00
Jeremy Latt e15f47c766 move to channel-based logging 2014-03-12 17:17:26 -07:00
Jeremy Latt d1a299792e don't buffer channels (except signal channel) 2014-03-12 16:58:11 -07:00
Jeremy Latt 4268c4a936 don't set CapNegotiating for blind CAP REQ 2014-03-12 16:57:15 -07:00
Jeremy Latt 96a108f8da mark unicode normalization with type 2014-03-12 16:45:22 -07:00
Jeremy Latt 465313c9ac Merge remote-tracking branch 'origin/master' into user-mask
Conflicts:
	irc/types.go
2014-03-08 19:23:10 -08:00
Jeremy Latt 81df7b4a5c comments and improvements for client set 2014-03-08 19:22:04 -08:00
Jeremy Latt 33df043961 fix CAP messages 2014-03-08 14:00:13 -08:00
Jeremy Latt cf76d2bd77 persist and load channel mask lists 2014-03-07 18:14:39 -08:00
Jeremy Latt 5d46e7d7fa Merge remote-tracking branch 'origin/master' into user-mask
Conflicts:
	irc/reply.go
	irc/server.go
	irc/types.go
2014-03-06 17:44:37 -08:00
Jeremy Latt 4bcd42ff34 Merge pull request #8 from jlatt/cap-protocol
basic capability negotiation
2014-03-06 17:39:12 -08:00
Jeremy Latt 12ae89ca14 minor cleanup/refactoring 2014-03-06 17:07:23 -08:00
Jeremy Latt adde42a1bf update ClientLookupSet when username changes 2014-03-06 16:53:15 -08:00
Jeremy Latt 76852b0370 implement WHOWAS with a shared ringbuffer 2014-03-06 13:55:40 -08:00
Jeremy Latt 41a6027d4e move ClientLookupSet to its own file 2014-03-06 13:10:54 -08:00
Jeremy Latt b2055595e1 WHOWAS command 2014-03-06 12:14:21 -08:00
Jeremy Latt 69cdad45ac partially-working sqlite-based usermasks 2014-03-06 11:56:32 -08:00
Jeremy Latt 832a5e1e19 allow empty server password 2014-03-06 11:00:48 -08:00
Jeremy Latt d54f530d13 Merge remote-tracking branch 'origin/master' into cap-protocol
Conflicts:
	irc/server.go
2014-03-06 10:34:50 -08:00
Jeremy Latt 5c6f8ff92a improve logging 2014-03-05 23:07:55 -08:00
Jeremy Latt fa5b1e6cf7 Merge pull request #9 from jlatt/gcfg
switch from JSON to gcfg config files
2014-03-05 23:02:22 -08:00
Jeremy Latt 04bb79a610 fix invite message to clients 2014-03-05 22:55:22 -08:00
Jeremy Latt 0874692aa8 send proper replies for cap protocol 2014-03-02 12:54:48 -08:00
Jeremy Latt 92e7a7961f notify on more signals 2014-03-02 11:51:29 -08:00
Jeremy Latt fa165a9d74 Merge remote-tracking branch 'origin/master' into gcfg
Conflicts:
	ergonomadic.go
	irc/config.go
	irc/server.go
2014-03-02 11:42:43 -08:00
Jeremy Latt 2340464265 Merge pull request #10 from jlatt/cleanup
cleanup
2014-03-02 11:37:06 -08:00
Jeremy Latt 6aa6f0aeaa notify clients when the server shuts down 2014-03-02 11:36:00 -08:00
Jeremy Latt b421971b61 move db init/open functions into a single file 2014-03-01 15:09:58 -08:00
Jeremy Latt 83d021fcb7 switch to gcfg for conf file
- add some validation for config file
- add comments explaining config
- remove TLS listener since most clients can't use it anyway
- remove unused nick generation function
2014-03-01 14:38:01 -08:00
Jeremy Latt 36602c9a3c basic capability negotiation
- multi-prefix is supported as an example
2014-02-28 19:24:38 -08:00
Jeremy Latt 9aeb813cf5 restrict nicknames to proper character set 2014-02-26 13:42:29 -08:00
Jeremy Latt 4df8ec12f6 allow nick changing 2014-02-26 12:24:52 -08:00
Jeremy Latt 66f9b42125 avoid duplicate mode changes 2014-02-25 22:19:21 -08:00
Jeremy Latt 9dc229b98f skip nick change if there is no difference 2014-02-25 20:47:59 -08:00
Jeremy Latt 45bb0d05e7 normalize all unicode input from the client 2014-02-25 20:22:07 -08:00
Jeremy Latt b30e247e77 properly persist channels 2014-02-25 15:57:35 -08:00
Jeremy Latt 02abeeb164 persistent channels persisted to a sqlite db 2014-02-25 11:11:34 -08:00
Jeremy Latt 1fe73aaa9e kill command 2014-02-25 09:10:16 -08:00
Jeremy Latt 4d2d18caf1 time command 2014-02-25 07:45:40 -08:00
Jeremy Latt f0305cf01a invite command 2014-02-25 07:35:52 -08:00
Jeremy Latt d6ec1e719b add a version command for sumeet 2014-02-24 22:04:11 -08:00
Jeremy Latt f0773c4e9e increase buffer for a server channel 2014-02-24 19:00:09 -08:00
Jeremy Latt cc6f764c85 minor cleanup 2014-02-24 17:45:04 -08:00
Jeremy Latt 72726a39b8 many changes
- load config sub files relative to config file dir
- load config file by name
- expect bcrypt for passwords
- -genpasswd for generating config-file-safe passwords
- block client thread while checking passwords (PASS and OPER)
2014-02-24 09:48:46 -08:00
Jeremy Latt be089e7f5f do bcrypt in the client main routine 2014-02-23 22:21:39 -08:00
Jeremy Latt 2229645a39 refactor server command loop 2014-02-23 19:13:45 -08:00
Jeremy Latt 0bf968e19e move command parsing and hostname lookups into the socket routine 2014-02-23 17:04:24 -08:00
Jeremy Latt 3b56b5bf42 expose various go internals as a DEBUG command 2014-02-23 10:04:31 -08:00
Jeremy Latt c5c7469cf0 good ol' fashioned refactoring 2014-02-22 13:15:31 -08:00
Jeremy Latt 1283bd35c7 encapsulate client replies in method 2014-02-22 11:40:32 -08:00
Jeremy Latt 39fb4bfb53 restrict new channels to channel regex 2014-02-21 17:19:02 -08:00
Jeremy Latt c8701febd0 loosen restrictions on WHO replies 2014-02-21 11:09:46 -08:00
Jeremy Latt c1edddb9a1 fix whois reply 2014-02-20 20:47:05 -08:00
Jeremy Latt e1c4c8e8cc don't send prefix on server-originated string coded replies 2014-02-20 20:08:32 -08:00
Jeremy Latt 23f01ff9ee handle CAP command silently in registration too 2014-02-20 19:55:03 -08:00
Jeremy Latt ad513da486 do hostname lookups in the client read thread 2014-02-20 13:03:33 -08:00
Jeremy Latt 97881b555d async hostname lookups 2014-02-20 11:51:45 -08:00
Jeremy Latt 9960089226 format replies to strings instead of using a Reply struct 2014-02-19 22:20:34 -08:00
Jeremy Latt 25ebab37d3 replies shouldn't contain references to client 2014-02-19 19:30:49 -08:00
Jeremy Latt af6a8ee6f0 remove channel buffering 2014-02-19 18:22:57 -08:00
Jeremy Latt 95f267ea4f buffer all channels 2014-02-19 17:48:03 -08:00
Jeremy Latt f090c616b3 reduce writes 2014-02-18 20:28:35 -08:00
Jeremy Latt 0cd6be8008 clean up nickname setting logic 2014-02-18 15:36:58 -08:00
Jeremy Latt 9e471b5b5d solve quit/connection close race 2014-02-18 13:25:21 -08:00
Jeremy Latt 2bc1b952a0 do idle in the server goroutine instead of the timeout goroutine 2014-02-18 11:22:56 -08:00
Jeremy Latt 4f106e7d3e make server logging consistent with other logs 2014-02-18 10:22:40 -08:00
Jeremy Latt 58517ad4e8 fix closed channel on socket close 2014-02-18 10:13:57 -08:00
Jeremy Latt 9c1ab4f610 fix socket close race 2014-02-17 23:58:02 -08:00
Jeremy Latt baf83e73d2 support USER from both RFCs 1459 and 2812 2014-02-17 22:10:48 -08:00
Jeremy Latt bb64d38684 implement who reply like ngircd 2014-02-17 21:30:14 -08:00
Jeremy Latt b17e62d0b0 names command 2014-02-17 21:02:03 -08:00
Jeremy Latt 046723a709 make whois channels possibly multiline 2014-02-17 20:47:41 -08:00
Jeremy Latt 9a5f21e78c beef up whois 2014-02-17 19:08:57 -08:00
Jeremy Latt bd3ca4ae47 fix race in idle timeout; fix some string trimming; fix some replies 2014-02-17 18:10:52 -08:00
Jeremy Latt 1a7f56a903 clean up general command and name handling 2014-02-17 17:58:22 -08:00
Jeremy Latt 6d8b381927 convert client bools to a flags map 2014-02-17 13:22:35 -08:00
Jeremy Latt f0fc3b492c list command 2014-02-16 23:51:27 -08:00
Jeremy Latt a9d7f64693 kick command 2014-02-16 23:29:11 -08:00
Jeremy Latt af5a05f390 use a select in the server commands loop 2014-02-16 22:38:43 -08:00
Jeremy Latt d5c9681a10 instantiate clients in the server command goroutine 2014-02-16 22:30:01 -08:00
Jeremy Latt dc5e258f88 don't use a goroutine when initializing clients 2014-02-16 22:26:33 -08:00
Jeremy Latt 4e56ea1bdc get rid of unnecessary concurrency for channels and clients 2014-02-16 22:20:42 -08:00
Jeremy Latt e411dafda7 get rid of mutexes in favor of channel-base syncing 2014-02-16 17:23:47 -08:00
Jeremy Latt 74b8221db7 use mutexes more 2014-02-16 10:42:25 -08:00
Jeremy Latt 81a0f19390 fix bad ref in part command 2014-02-16 09:41:16 -08:00
Jeremy Latt 0f6ee63e6e fix a race 2014-02-15 20:20:37 -08:00
Jeremy Latt 488b2ccf8f implement channel modes and messages properly 2014-02-15 19:49:20 -08:00
Jeremy Latt 0bfa2fb98f channel mode flags and member modes 2014-02-14 21:57:08 -08:00
Jeremy Latt 33b1e6c582 simplify Replier 2014-02-14 19:35:25 -08:00
Jeremy Latt 3a9027e3dc don't double-close socket 2014-02-14 19:05:30 -08:00
Jeremy Latt 4d9742d033 organize server command into phases 2014-02-14 18:28:36 -08:00
Jeremy Latt 9600be82a3 fix more data races 2014-02-14 08:42:56 -08:00
Jeremy Latt 3ba928cee6 remove server command mutex 2014-02-13 20:58:13 -08:00
Jeremy Latt be01a412d9 only quit registered clients 2014-02-13 20:52:42 -08:00
Jeremy Latt d35fe6088c attempt to fix hang condition in quit sequence 2014-02-13 20:23:22 -08:00
Jeremy Latt a9eae872c9 mutex server commands 2014-02-13 20:08:16 -08:00
Jeremy Latt b8bbc7eeb5 add more logging 2014-02-13 18:59:45 -08:00
Jeremy Latt b6a7d98b64 adjust authorization and add more hang logging 2014-02-13 18:39:33 -08:00
Jeremy Latt 965d8efdf8 add a login timout to close dropped connections 2014-02-13 13:19:26 -08:00
Jeremy Latt 6e0ab99d38 look up PROXY hostnames async 2014-02-13 11:27:04 -08:00
Jeremy Latt 4b98d2a45b clear out old clients; fix NameReply 2014-02-13 11:06:07 -08:00
Jeremy Latt c805006ab8 save reply source id at init time for nick changes 2014-02-13 10:57:58 -08:00
Jeremy Latt 261aaa128f try to fix nick message sending 2014-02-13 10:19:53 -08:00
Jeremy Latt c327042c94 destroy clients on socket close with quit 2014-02-13 09:47:10 -08:00
Jeremy Latt 7a2c9db503 don't allow send on closed channels 2014-02-13 09:35:59 -08:00
Jeremy Latt 2aa61b0dbe clean up and fix targets for quit message 2014-02-12 18:27:36 -08:00
Jeremy Latt 52dd2521c2 remove prefix from local replies; fix topic message 2014-02-12 18:14:19 -08:00
Jeremy Latt db2a21fee0 ignore target in whois 2014-02-12 09:42:47 -08:00
Jeremy Latt 6daf81ea91 notice command 2014-02-11 17:11:59 -08:00
Jeremy Latt 09887b2db3 motd command 2014-02-11 16:35:32 -08:00
Jeremy Latt a203a3ca16 ison command 2014-02-11 15:58:54 -08:00
Jeremy Latt 08d9d5ab79 away modes 2014-02-11 15:44:58 -08:00
Jeremy Latt cdae59ecf5 stub motd 2014-02-11 15:33:02 -08:00
Jeremy Latt aac0efebee send initial nick message to source client 2014-02-11 14:32:17 -08:00
Jeremy Latt a34443f155 fix reverse dns 2014-02-10 19:39:53 -08:00
Jeremy Latt 4379cb8e1c add PROXY protocol support 2014-02-10 18:40:06 -08:00
Jeremy Latt a8141a0e1c async new connections 2014-02-10 17:54:35 -08:00
Jeremy Latt fb65203805 stub cap command 2014-02-10 11:14:34 -08:00
Jeremy Latt 56cb8512dc relax SSL restrictions 2014-02-09 19:59:45 -08:00
Jeremy Latt db0f494604 TLS support 2014-02-09 19:41:00 -08:00
Jeremy Latt f3da4e0286 remove double nick-change message 2014-02-09 15:18:18 -08:00
Jeremy Latt 133b91b9f0 idle/quit timeout 2014-02-09 12:13:09 -08:00
Jeremy Latt 8a90634c0a irc operators 2014-02-09 10:07:40 -08:00
Jeremy Latt 1787ac8ebf use Reply() to wrap channel 2014-02-09 08:48:11 -08:00
Jeremy Latt 281558072a configure server with json 2014-02-09 07:53:42 -08:00
Jeremy Latt 55d3d6e946 don't overwrite base command 2014-02-08 23:51:51 -08:00
Jeremy Latt a3b7441939 type cleanup 2014-02-08 23:15:05 -08:00
Jeremy Latt 20257ec624 use ModeOp everywhere 2014-02-08 22:42:14 -08:00
Jeremy Latt 93f4b6859a more channel mode parsing and bad listing 2014-02-08 22:06:10 -08:00
Jeremy Latt d370abcd4c minimal who command 2014-02-08 18:49:52 -08:00
Jeremy Latt d8951e1b48 minimal channel mode command 2014-02-08 18:14:39 -08:00
Jeremy Latt c4f457705a minimal whois implementation 2014-02-08 17:43:59 -08:00
Jeremy Latt 06648393a1 implement join/quit and channel messages properly 2014-02-08 17:10:04 -08:00
Jeremy Latt 3f9495cda0 add data structures for decoding mode messages 2014-02-08 14:20:23 -08:00
Jeremy Latt b9cb539219 organize like a proper go package 2014-02-08 13:19:35 -08:00