Simon Ser
2351fc8b83
server: add metric for goroutine panics
...
This is useful to setup an alert when a panic occurs.
2023-06-02 11:03:21 +02:00
Simon Ser
9b9fc60f62
Rename Config.Log{Driver,Path} to MsgStore
2023-05-23 11:23:38 +02:00
Simon Ser
6f01bd86c3
downstream: pass context to SendMessage
...
Just like upstream does.
2023-04-06 13:23:20 +02:00
Simon Ser
f6043e5b98
Stop setting *user in downstreamConn.register
...
Set it in downstreamConn.welcome instead. Makes it clearer that it
must not be accessed before welcome is called (because it can only
be accessed from the user goroutine).
2023-04-05 16:54:55 +02:00
Simon Ser
53017a7a5c
Improve Server.Handle readability
2023-04-05 15:11:36 +02:00
Simon Ser
93af53c91d
Prune old Web Push subscriptions
2023-03-17 00:00:50 +01:00
Simon Ser
02ed7aa308
Set User-Agent when sending Web Push notifications
...
This allows push servers to figure out where the notifications are
coming from.
2023-03-16 23:31:39 +01:00
Simon Ser
4c8e955946
Move DefaultUnixAdminPath to config package
...
We can drop the soju package import. This shrinks down sojuctl's
size significantly (18M to 3M).
2023-03-15 17:47:47 +01:00
Simon Ser
7e891569b8
Drop isErrClosed
...
We require a new enough Go version now.
2023-02-23 10:32:36 +01:00
Simon Ser
8f1f67f1f0
Rate limit Web Push checks
...
No need to re-check that a Web Push subscription is valid every
time a downstream connects. Mobile devices may reconnect pretty
frequently.
Check at most once a day.
2023-02-18 13:27:13 +01:00
delthas
1ccc7ce6d2
Add a database store for messages
...
This adds a new config option, `logs db`, which enables storing chat
logs in the soju database.
Regular store options, CHATHISTORY options, and SEARCH operations are
supported, like the fs logs backend.
Messages are stored in a new table, Message. In order to track the list
of targets we have messages for in an optimized manner, another database
is used: MessageTarget.
All new requests are backend by indexes so should be fast even with
hundreds of thousands of messages.
A contrib script is provided for migrating existing logs fs chat logs to
the database. It can be run with eg:
go run ./contrib/migrate-logs/ logs/ sqlite3:soju.db
Co-authored-by: Simon Ser <contact@emersion.fr>
2023-02-17 14:13:43 +01:00
delthas
2713bcba34
Add administrative unix listen endpoint
...
This adds support for listening on a Unix socket for administrative
connections, that then use a simple protocol for communicating with
the service (BouncerServ) as an administrator with a global context.
The wire format used by the Unix socket is IRC, but without
registration or overheads.
Example session:
>>> BOUNCERSERV
<<< 461 * BOUNCERSERV :Not enough parameters
>>> BOUNCERSERV :n s
<<< :gensou FAIL BOUNCERSERV :this command must be run as a user
>>> BOUNCERSERV :u s
<<< :gensou PRIVMSG * :marisa: 2 networks
<<< :gensou PRIVMSG * :alice: 1 networks
<<< :gensou BOUNCERSERV OK
2023-02-06 15:15:09 +01:00
Simon Ser
c79fc0c19e
Add support for SASL OAUTHBEARER
2023-01-30 11:53:01 +01:00
Simon Ser
63ca247354
Add infrastructure for external authentication
2023-01-30 11:53:01 +01:00
Simon Ser
db49bc120f
Add enable-user-on-auth config directive
2023-01-26 19:51:35 +01:00
Simon Ser
9df9880301
Add disable-inactive-user config option
...
This can be used to automatically disable users if they don't
actively use the bouncer for a while.
2023-01-26 19:42:29 +01:00
Simon Ser
106d40dcd4
Upgrade to gopkg.in/irc.v4
2022-11-14 12:06:58 +01:00
Simon Ser
dde4ee9518
config: drop multi-upstream-mode
2022-09-26 16:57:05 +02:00
Simon Ser
027a89a0b0
server: log when waiting for user goroutines on shutdown
...
Useful for debugging.
2022-09-18 21:43:31 +02:00
Simon Ser
d354c73933
server: close queued up connections on shutdown
...
Closes: https://todo.sr.ht/~emersion/soju/204
2022-09-18 21:37:45 +02:00
Simon Ser
05a382ef16
Downgrade Web Push urgency for unimportant messages
...
For instance TAGMSG and MARKREAD aren't really high urgency.
2022-08-17 16:04:11 +02:00
Jeff Martin
a662091a9d
server: fix panic stacktrace print formatting
...
This change uses string formatting for the output of debug.Stack. The
output of debug.Stack is []byte, which isn't human readable.
2022-08-08 15:27:04 +02:00
Reto Brunner
ac01ac0143
Use output given to NewLogger
...
Previously the output param was ignored
2022-08-02 10:11:25 +02:00
Simon Ser
3863b8cb6b
Add webpush extension
...
References: https://github.com/ircv3/ircv3-specifications/pull/471
Co-authored-by: delthas <delthas@dille.cc>
2022-06-14 16:16:12 +02:00
Simon Ser
95db42e645
Move identd to separate package
2022-05-09 16:36:54 +02:00
Simon Ser
3a7dee8128
Introduce a database package
2022-05-09 15:08:04 +02:00
Simon Ser
5de2a7ec12
Remove unnecessary lastDownstreamID initialization
2022-04-04 09:59:16 +02:00
Simon Ser
9f002d0409
server: print panic stack trace as string
...
debug.Stack() returns a byte slice.
2022-04-04 09:54:48 +02:00
Simon Ser
69e9b6a439
Retry on temporary net.Listener failure
...
Instead of stopping to listen, retry on temporary failure. This
can happen when running out of FDs.
Closes: https://todo.sr.ht/~emersion/soju/183
2022-01-19 22:35:46 +01:00
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
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
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
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
Simon Ser
55840312b4
Add per-user IP addresses
...
The new upstream-user-ip directive allows bouncer operators to
assign one IP address per user.
2021-11-17 15:07:58 +01:00
Simon Ser
97152191ad
Add timeout for downstream connection registration
2021-11-17 14:54:03 +01:00
Simon Ser
3941f67380
Add config option to globally disable multi-upstream mode
...
Closes: https://todo.sr.ht/~emersion/soju/122
2021-11-17 11:41:11 +01:00
Simon Ser
73295e4fa7
Allow most config options to be reloaded
...
Closes: https://todo.sr.ht/~emersion/soju/42
2021-11-16 00:38:04 +01:00
Simon Ser
b9e06e498e
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
2021-11-15 21:40:17 +01:00
Simon Ser
d870efa666
Add context support to Server.createUser
2021-11-08 20:29:14 +01:00
Simon Ser
8b3e5e7465
Plumb context in downstreamConn.handleMessageRegistered
...
References: https://todo.sr.ht/~emersion/soju/141
2021-11-08 18:11:24 +01:00
Simon Ser
abe5f362db
Turn CHATHISTORY and backlog limits into constants
2021-11-03 18:29:21 +01:00
Simon Ser
ce69f00e3f
msgstore: add context to messageStore methods
...
This allows setting a hard timeout.
2021-11-03 18:21:05 +01:00
Simon Ser
07c962018d
Add title config option
...
Closes: https://todo.sr.ht/~emersion/soju/146
2021-11-02 22:38:07 +01:00
Simon Ser
4e35b4812f
Fix missing imports in server.go
...
Oops.
2021-10-29 16:18:34 +02:00