715 Commits

Author SHA1 Message Date
contact
bd1a481bfb doc/per-user-ip: new documentation article
git-svn-id: file:///srv/svn/repo/suika/trunk@715 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 17:04:14 +00:00
contact
9faf7f6b8f Upgrade dependencies
git-svn-id: file:///srv/svn/repo/suika/trunk@714 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 15:57:41 +00:00
contact
467c6df654 Add pprof HTTP server
This enables production debugging of the bouncer.

Closes: https://todo.sr.ht/~emersion/soju/155

git-svn-id: file:///srv/svn/repo/suika/trunk@713 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 15:18:52 +00:00
contact
8b44d4ce3c Add Prometheus instrumentation for the database
git-svn-id: file:///srv/svn/repo/suika/trunk@712 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:19 +00:00
contact
ca58716f6c Add message counter metrics
git-svn-id: file:///srv/svn/repo/suika/trunk@711 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:19 +00:00
contact
867d701eed Add number of upstream connections to metrics
git-svn-id: file:///srv/svn/repo/suika/trunk@710 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:19 +00:00
contact
edb293a257 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.

git-svn-id: file:///srv/svn/repo/suika/trunk@709 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:19 +00:00
contact
f3ca203794 Add basic active users and downstreams metrics
git-svn-id: file:///srv/svn/repo/suika/trunk@708 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:19 +00:00
contact
7eaaf2b78f Add basic Prometheus metrics exporter
This only exports the default metrics for now.

References: https://todo.sr.ht/~emersion/soju/142

git-svn-id: file:///srv/svn/repo/suika/trunk@707 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:58:18 +00:00
contact
99b503c800 Update downstream caps/nick/realname before sending MOTD
The MOTD indicates the end of the registration's message burst, and
the server can send arbitrary messages before it.

Update the supported capabilities, the nick and the realname before
MOTD to make it so client logic that runs on MOTD can work with
up-to-date info.

git-svn-id: file:///srv/svn/repo/suika/trunk@706 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:27:34 +00:00
contact
5161f92e29 Add per-user IP addresses
The new upstream-user-ip directive allows bouncer operators to
assign one IP address per user.

git-svn-id: file:///srv/svn/repo/suika/trunk@705 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 14:07:58 +00:00
contact
56e1247cf4 Add timeout for downstream connection registration
git-svn-id: file:///srv/svn/repo/suika/trunk@704 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 13:54:03 +00:00
contact
896462a4b0 Introduce conn.NewContext
This function wraps a parent context, and returns a new context
cancelled when the connection is closed. This will make it so
operations started from downstreamConn.handleMessage will be
cancelled when the connection is closed.

git-svn-id: file:///srv/svn/repo/suika/trunk@703 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 12:13:55 +00:00
contact
e7502fa150 Lift up context to downstreamConn.handleMessage
git-svn-id: file:///srv/svn/repo/suika/trunk@702 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:38:08 +00:00
contact
c4dc482d71 Add context arg to downstreamConn.welcome()
git-svn-id: file:///srv/svn/repo/suika/trunk@701 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:33:30 +00:00
contact
aa4b02c1bb Add context to downstreamConn.handleMessageUnregistered
git-svn-id: file:///srv/svn/repo/suika/trunk@700 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:29:23 +00:00
contact
c07a0ddcbe Lower sanityCheckServer timeout to 15s
Should still be more than enough to connect even if the network is
somewhat flaky.

git-svn-id: file:///srv/svn/repo/suika/trunk@699 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:12:40 +00:00
contact
e88bc359cf Add context arg to sanityCheckServer
As a bonus, the timeout now applies to the whole TLS dial
operation. Before the timeout only applied to the net dial
operation, making it possible for a bad server to stall the request
by making the TLS handshake extremely slow.

git-svn-id: file:///srv/svn/repo/suika/trunk@698 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:10:56 +00:00
contact
caf05fd066 Use background context in tests
git-svn-id: file:///srv/svn/repo/suika/trunk@697 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 11:04:24 +00:00
contact
bcc7fa6ffa contrib/znc-import: use background context
git-svn-id: file:///srv/svn/repo/suika/trunk@696 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 10:56:16 +00:00
contact
ef39ddf576 sojuctl: use background context
git-svn-id: file:///srv/svn/repo/suika/trunk@695 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 10:54:28 +00:00
contact
d473fb1a5d Add config option to globally disable multi-upstream mode
Closes: https://todo.sr.ht/~emersion/soju/122

git-svn-id: file:///srv/svn/repo/suika/trunk@694 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 10:41:11 +00:00
contact
729d41ba86 Set isMultiUpstream flag in downstreamConn.welcome()
This will make it easier to globally disable multi-upstream mode.

git-svn-id: file:///srv/svn/repo/suika/trunk@693 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 10:22:26 +00:00
contact
e76b51543f Add downstreamConn.isMultiUpstream
git-svn-id: file:///srv/svn/repo/suika/trunk@692 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-17 10:17:09 +00:00
contact
8f1a6e4432 Allow most config options to be reloaded
Closes: https://todo.sr.ht/~emersion/soju/42

git-svn-id: file:///srv/svn/repo/suika/trunk@691 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 23:38:04 +00:00
contact
132ca8f555 Don't send user in prefix for echo messages
This is not very useful and confuses clients.

git-svn-id: file:///srv/svn/repo/suika/trunk@690 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 22:53:25 +00:00
contact
f8cbb93de1 Add panic handlers for user and downstream goroutines
This only brings down a single user or downstream on panic, instead
or bringing down the whole bouncer.

Closes: https://todo.sr.ht/~emersion/soju/139

git-svn-id: file:///srv/svn/repo/suika/trunk@689 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 20:40:17 +00:00
delthas
d90513bee4 Return an empty CHATHISTORY TARGETS batch when in multi-upstream
When on an unbound bouncer network downstream, we should return no
targets (there are none, because there are no upstreams at all).

When on a multi-upstream downstream, we should return no targets as we
don't support multi-upstream CHATHISTORY TARGETS.

Before this patch, we returned a misleading error message:
:example.com 403 :Missing network suffix in name

git-svn-id: file:///srv/svn/repo/suika/trunk@688 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 20:30:04 +00:00
contact
ae9ecc0718 cmd/soju: bump max number of opened files
The bouncer process may be dealing with many opened FDs. The default
on Linux is 1024. To support bouncers with a lot of users, bump
RLIMIT_NOFILE to the max as advised in [1].

[1]: http://0pointer.net/blog/file-descriptor-limits.html

git-svn-id: file:///srv/svn/repo/suika/trunk@687 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 20:22:43 +00:00
delthas
a056e2f696 Send the downstream host for PRIVMSG echo messages
If a downstream of prefix host `foo` sends a message, the other
downstream of prefix host `bar` should receive an echo PRIVMSG with
prefix host bar.

This fixes a regression where no prefix host was sent at all.

git-svn-id: file:///srv/svn/repo/suika/trunk@686 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 16:45:23 +00:00
delthas
14e0806745 Add support for draft/extended-monitor
References: https://github.com/ircv3/ircv3-specifications/pull/466

git-svn-id: file:///srv/svn/repo/suika/trunk@685 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 13:38:19 +00:00
contact
5bb767bf62 Add support for MONITOR
Add support for MONITOR in single-upstream mode.

Each downstream has its own set of monitored targets. These sets
are merged together to compute the MONITOR commands to send to
upstream.

Each upstream has a set of monitored targets accepted by the server
alongside with their status (online/offline). This is used to
directly send replies to downstreams adding a target another
downstream has already added, and send MONITOR S[TATUS] replies.

Co-authored-by: delthas <delthas@dille.cc>

git-svn-id: file:///srv/svn/repo/suika/trunk@684 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-15 13:34:04 +00:00
contact
c4562a004e Add ELIST support in single-upstream mode
We just forward the command as-is, so we can pass down the ISUPPORT
token as well.

Closes: https://todo.sr.ht/~emersion/soju/148

git-svn-id: file:///srv/svn/repo/suika/trunk@683 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-09 21:12:46 +00:00
contact
54c906a82c Add a queue for WHO commands
This has the following upsides:

- We can now routes WHO replies to the correct client, without
  broadcasting them to everybody.
- We are less likely to hit server rate limits when multiple downstreams
  are issuing WHO commands at the same time.

git-svn-id: file:///srv/svn/repo/suika/trunk@682 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-09 21:09:17 +00:00
contact
c652cb0188 Remove support for mixed multi-upstream LIST
Multi-upstream connections can still send LIST commands with a
network suffix.

git-svn-id: file:///srv/svn/repo/suika/trunk@681 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-09 20:32:26 +00:00
contact
86ddd39b77 Add context support to Server.createUser
git-svn-id: file:///srv/svn/repo/suika/trunk@680 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 19:29:14 +00:00
contact
a6d7a40af8 Add partial context support to handleUserUpdate
More plumbing needed to make sure we don't block too long waiting
for the reply.

git-svn-id: file:///srv/svn/repo/suika/trunk@679 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 18:48:32 +00:00
contact
6e0be5f3d9 Check context cancellation in handleServiceServerNotice
This prevents this function from blocking forever if it exceeds the
deadline.

git-svn-id: file:///srv/svn/repo/suika/trunk@678 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 18:42:36 +00:00
contact
a3ca35f09e Add context support to service
References: https://todo.sr.ht/~emersion/soju/141

git-svn-id: file:///srv/svn/repo/suika/trunk@677 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 18:40:48 +00:00
contact
31f86a9f9d Add context support to user and network mutations
References: https://todo.sr.ht/~emersion/soju/141

git-svn-id: file:///srv/svn/repo/suika/trunk@676 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 18:36:10 +00:00
contact
e3bb551273 Plumb context in downstreamConn.handleMessageRegistered
References: https://todo.sr.ht/~emersion/soju/141

git-svn-id: file:///srv/svn/repo/suika/trunk@675 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-08 17:11:24 +00:00
contact
2caeb0f764 Fix upstream USER command when both username and nick are empty
git-svn-id: file:///srv/svn/repo/suika/trunk@674 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-07 17:33:59 +00:00
hubert
f4842d052b Skip list/type A mode arguments
Type-A modes always have an argument[0], but soju doesn't care about
them since it doesn't keep track of mode lists (ban/invite/.. lists).

[0] https://modern.ircdocs.horse/#mode-message
> Type A: Modes that add or remove an address to or from a list. These
> modes MUST always have a parameter when sent from the server to a
> client.

git-svn-id: file:///srv/svn/repo/suika/trunk@673 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-04 11:24:15 +00:00
contact
52d2b1ed2a Add plus sign in RPL_UMODEIS reply
git-svn-id: file:///srv/svn/repo/suika/trunk@672 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 21:02:19 +00:00
contact
53c9b0049b Set mode +o on admins for bouncer-only connections
git-svn-id: file:///srv/svn/repo/suika/trunk@671 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 20:42:42 +00:00
contact
9d67b78657 Turn CHATHISTORY and backlog limits into constants
git-svn-id: file:///srv/svn/repo/suika/trunk@670 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 17:29:21 +00:00
contact
34689ca82d msgstore_memory: add comment about Append dropping messages
git-svn-id: file:///srv/svn/repo/suika/trunk@669 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 17:25:39 +00:00
contact
9d44ab9586 msgstore_fs: abort on timeout
git-svn-id: file:///srv/svn/repo/suika/trunk@668 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 17:21:12 +00:00
contact
58db345425 msgstore: add context to messageStore methods
This allows setting a hard timeout.

git-svn-id: file:///srv/svn/repo/suika/trunk@667 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 17:21:05 +00:00
contact
21f482684d msgstore: take Network as arg instead of network
The message stores don't need to access the internal network
struct, they just need network metadata such as ID and name.

This can ease moving message stores into a separate package in the
future.

git-svn-id: file:///srv/svn/repo/suika/trunk@666 f0ae65fe-ee39-954e-97ec-027ff2717ef4
2021-11-03 15:37:01 +00:00