Simon Ser
d21fc06d88
server: cleanup user in defer
...
If a user goroutine panics, this correctly removes it from the
global map instead of leaving a dangling entry behind.
2021-12-08 15:00:02 +01:00
Simon Ser
9caa6f9ca0
service: send summary when executing "server notice"
...
Sometimes this command times out. Display the number of skipped
users.
2021-12-08 14:55:31 +01:00
Simon Ser
f7e151396d
Use dc.nick instead of "*" for RPL_* messages
...
Makes it clearer what these fields are used for. The default value
for dc.nick is "*".
2021-12-07 09:42:32 +01:00
Simon Ser
aae0fb9f22
Improve error message when downstream doesn't authenticate
2021-12-07 09:40:02 +01:00
Simon Ser
b6c47a517c
Use more descriptive errors when aborting pending commands
2021-12-06 22:33:50 +01:00
Simon Ser
5c819a2c6c
Disallow ',' in nicknames
...
It breaks lists as in `PRIVMSG a,b,c :foo`.
2021-12-06 19:23:28 +01:00
Simon Ser
1a78b3d905
Add username to downstreamConn log messages
2021-12-06 18:56:00 +01:00
Simon Ser
d7f7e351af
Improve msgStore.Append log message wording
2021-12-06 18:46:10 +01:00
Simon Ser
8b7df6dd46
Downgrade conn log messages to debug
2021-12-06 18:40:37 +01:00
Simon Ser
d829d2ab12
Add Logger.Debugf
...
Makes it easy to print debugging messages which aren't targeted at
the user. See [1] for motivation.
[1]: https://dave.cheney.net/2015/11/05/lets-talk-about-logging
2021-12-06 18:35:49 +01:00
Simon Ser
7dd884d3da
Remove Logger.Print
...
Callers can just use Logger.Printf instead.
2021-12-06 18:27:36 +01:00
Simon Ser
f881a42b4b
Stop incrementing hopcount in RPL_WHOREPLY
...
It's extra code for something clients should ignore because it's
unreliable and useless.
2021-12-06 18:08:53 +01:00
Simon Ser
548b1c6930
Read nickname from RPL_WELCOME
...
References: https://github.com/ircdocs/modern-irc/pull/146
2021-12-06 17:58:54 +01:00
Simon Ser
1c285a1b72
Fallback to alt nick
...
If the nickname we want is taken, fallback to another one by
appending underscores. Use MONITOR to figure out when we can request
our desired nick again.
Closes: https://todo.sr.ht/~emersion/soju/35
2021-12-04 20:07:23 +01:00
Simon Ser
f2a28f6e22
Avoid forwarding MONITOR requests if upstream doesn't support it
...
Clients aren't supposed to do this, but in case they do, let's
send them an error.
2021-12-04 19:29:39 +01:00
Simon Ser
b2957c05d5
Use golang.org/x/time/rate
...
Instead of hand-rolling our own rate-limiter based on goroutines,
use golang.org/x/time/rate.
2021-12-02 23:52:29 +01:00
Simon Ser
f75ee272a4
Add context to network.storeClientDeliveryReceipts
2021-12-02 23:32:12 +01:00
Simon Ser
04b0c2fd6b
Add context to upstreamConn.handleMessage
2021-12-02 23:27:12 +01:00
Simon Ser
a413681253
Cancel pending commands on downstream disconnect
...
If a client queues a high number of commands and then disconnects,
remove all of the pending commands. This avoids unnecessarily
sending commands whose results won't be used.
2021-12-02 19:29:44 +01:00
Simon Ser
1620344f0a
Mark ACCOUNT_REQUIRED error as permanent connection failure
...
There's no point in retrying to connect in this case.
2021-12-02 17:58:56 +01:00
Simon Ser
fd9a935f3e
Don't retry connecting on permanent failure
...
Closes: https://todo.sr.ht/~emersion/soju/164
2021-12-02 17:33:11 +01:00
Simon Ser
578020e553
Add exponential backoff when re-connecting to upstream
...
The first reconnection attempt waits for 1min, the second the 2min,
and so on up to 10min. There's a 1min jitter so that multiple failed
connections don't try to reconnect at the exact same time.
Closes: https://todo.sr.ht/~emersion/soju/161
2021-12-02 12:14:35 +01:00
Simon Ser
8acc07d591
Add soju_upstream_connect_errors_total metric
2021-12-02 11:15:51 +01:00
Simon Ser
d11216917b
Fix upstream gauge metric
...
It wasn't decremented on error. While at it, increment it when
connecting to the upstream network.
2021-12-02 11:03:56 +01:00
Simon Ser
73287f242e
Add context to connectToUpstream
2021-12-02 10:53:43 +01:00
Simon Ser
33a639ecf0
Validate address in user.checkNetwork
2021-12-01 15:57:54 +01:00
Simon Ser
43c440e600
Add "sasl status" command
2021-12-01 11:03:27 +01:00
Simon Ser
23fd727618
Add support for draft/account-registration proxying
...
This adds support for the draft/account-registration extension [1].
This allows downstreams to register on upstream networks.
[1]: https://ircv3.net/specs/extensions/account-registration
2021-11-30 12:02:54 +01:00
Simon Ser
e42b507377
doc/soju.1: add network create
example
2021-11-30 09:26:07 +01:00
Simon Ser
522e20cca1
downstream: improve unmarshalEntityNetwork error message
...
Closes: https://todo.sr.ht/~emersion/soju/162
2021-11-29 16:41:52 +01:00
Simon Ser
c36192ab02
Return more descriptive auth failure errors
2021-11-29 13:14:16 +01:00
Simon Ser
e3d7c33bcd
Remove sasl cap after registration if network doesn't support it
...
This will stop clients from trying to issue AUTHENTICATE requests
after connection registration.
2021-11-21 16:28:38 +01:00
Simon Ser
313c6e7f97
Add support for post-connection-registration upstream SASL auth
...
Once the downstream connection has logged in with their bouncer
credentials, allow them to issue more SASL auths which will be
redirected to the upstream network. This allows downstream clients
to provide UIs to login to transparently login to upstream networks.
2021-11-21 16:10:54 +01:00
Simon Ser
4e84b41592
Send RPL_LOGGEDIN with bouncer account in multi-upstream mode
2021-11-21 11:00:57 +01:00
Simon Ser
c2a5461cb8
Use RPL_LOGGEDIN/OUT to mirror upstream status
...
This will allow clients to properly show/hide UI to login and
register.
2021-11-19 19:21:48 +01:00
Simon Ser
b5a868bbcd
Abort SASL if in-progress while completing registration
...
Implements the following recommendation from the spec:
> If the client completes registration (with CAP END, NICK, USER and any other
> necessary messages) while the SASL authentication is still in progress, the
> server SHOULD abort it and send a 906 numeric, then register the client
> without authentication.
2021-11-19 18:55:07 +01:00
Simon Ser
c6f5508765
Add missing account-notify to permanentUpstreamCaps
2021-11-19 11:55:22 +01:00
Thomas Vigouroux
4831b61186
Add CHATHISTORY LATEST support
...
This patch adds a bit more compliance to the chathistory IRCv3 specification.
2021-11-18 21:06:26 +01:00
Simon Ser
cec335ee9c
contrib/clients: WeeChat 3.3 enables all IRCv3 caps by default
2021-11-18 21:05:58 +01:00
Simon Ser
ac4696a507
Disallow empty string for nick
2021-11-18 09:44:33 +01:00
Hubert Hirtz
dcc1eff130
Allow AUTHENTICATE before NICK
...
Now that dc.nick is not blank during registration, sasl replies from the
server are correct and cap handling can be a bit simplified.
2021-11-18 09:40:23 +01:00
Simon Ser
98af48d254
doc/per-user-ip: new documentation article
2021-11-17 18:04:14 +01:00
Simon Ser
254108bd99
Upgrade dependencies
2021-11-17 16:57:41 +01:00
Simon Ser
d722f56000
Add pprof HTTP server
...
This enables production debugging of the bouncer.
Closes: https://todo.sr.ht/~emersion/soju/155
2021-11-17 16:18:52 +01:00
Simon Ser
ea98ac042e
Add Prometheus instrumentation for the database
2021-11-17 15:58:19 +01:00
Simon Ser
5a5c93a756
Add message counter metrics
2021-11-17 15:58:19 +01:00
Simon Ser
efc4c62725
Add number of upstream connections to metrics
2021-11-17 15:58:19 +01:00
Simon Ser
7fa8c78122
Add int64 gauge abstraction
...
We want to serve metrics via both BouncerServ and Prometheus. Add
a tiny abstraction to avoid updating multiple metrics at once.
2021-11-17 15:58:19 +01:00
Simon Ser
df6b161f55
Add basic active users and downstreams metrics
2021-11-17 15:58:19 +01:00
Simon Ser
8f8d7aab0e
Add basic Prometheus metrics exporter
...
This only exports the default metrics for now.
References: https://todo.sr.ht/~emersion/soju/142
2021-11-17 15:58:18 +01:00