soju v0.3.0
Highlights for this release:
- Improved protocol support: MONITOR, WHOX, ELIST, account-notify,
CHATHISTORY LATEST, draft/event-playback, draft/extended-monitor
- PostgreSQL support for larger deployments
- Instrumentation via Prometheus and a new "server status" BouncerServ command
- New config options: custom MOTD and bouncer title, maximum number of
networks per user, globally disable multi-upstream mode, per-user IP
addresses
- Robustness improvements: add cancellation and timeouts throughout
- Most configuration options can be reloaded at runtime
- Add testing infrastructure
Full commit history below.
Alex Karle (1):
chathistory: Fix truncated backlog due to timezones
Alexey Yerin (1):
downstream: handle name=... in BOUNCER
Hubert Hirtz (8):
Dismiss TAGMSGs directed to BouncerServ
Send back TAGMSGs to self
Correctly send back PRIVMSGs and NOTICEs to self
PostgreSQL support
db_postgres: handle both constraints on network updates
Set hard timeouts on DB transactions
Skip list/type A mode arguments
Allow AUTHENTICATE before NICK
Simon Ser (109):
db_sqlite: switch to sql.Named
Add support for IRCv3 WebSocket text subprotocol
db_sqlite: fix realname not fetched in ListUsers
Close DB on shutdown
Add basic server test
Use isErrClosed in Server.Serve
test: add upstream
test: add NOTICE broadcast
test: get rid of testUpstream
Add "server status" command
Add limit for RSA bits
Add DB stats
msgstore_fs: add limit on number of opened files
Add WHOIS reply for BouncerServ
doc/soju.1: mention that accept-proxy-ip affects PROXY proto
Add max-user-networks config option
build: don't clobber config file
Split CertFP logic into separate file
Add "server notice" command
db_sqlite: add migration test
db_postgres: add migration test
Run server test with PostgreSQL too
Fix unused imports in tests
ci: run PostgreSQL tests
service: allow updating other users
Upgrade dependencies
Fix printf formatting in error message
msgstore_fs: fix ListTargets error on missing log dir
Stop sending RPL_CREATED
doc/soju.1: use angle-brackets for URL
doc/soju.1: add descriptions for all flags for "user create"
doc.soju.1: fix typo and improve formatting for "certfp generate"
contrib/clients: update IRCv3 caps for Weechat 3.3
db_postgres: fix constraints errors
Add bouncer MOTD
Don't strip spaces at start of MOTD
db_postgres: quote table name in StoreClientDeliveryReceipts
db_postgres: use tx for all queries in StoreClientDeliveryReceipts
db_postgres: remove unnecessary DEFAULT NULL in schema
msgstore_fs: add reference to ZNC
ci: switch to alpine/latest
msgstore_fs: rename log dir when network is renamed
Send BOUNCER REGISTRATION_IS_COMPLETED error
Remove unused REGISTRATION_IS_COMPLETED in handleMessageUnregistered
Add support for account-notify
Unify away-notify and account-notify handling
Remove incorrect AWAY TODO in downstreamConn.SendMessage
Remove unnecessary downstream cap checks
Add context args to Database interface
Always reply ERR_SASLABORTED on SASL abort
Unify BOUNCER ADDNETWORK and CHANGENETWORK
Get rid of io.EOF errors in logs
Fix missing imports in server.go
Mark BouncerServ as server operator
Mark admins as server operators in self WHO/WHOIS replies
Fix operator flag in RPL_WHOREPLY
Add support for WHOX
Mark bouncer users and BouncerServ as authenticated in WHOX/WHOIS
Add title config option
db_sqlite: use TEXT instead of VARCHAR
Make Network.Nick optional
msgstore: take Network as arg instead of network
msgstore: add context to messageStore methods
msgstore_fs: abort on timeout
msgstore_memory: add comment about Append dropping messages
Turn CHATHISTORY and backlog limits into constants
Set mode +o on admins for bouncer-only connections
Add plus sign in RPL_UMODEIS reply
Fix upstream USER command when both username and nick are empty
Plumb context in downstreamConn.handleMessageRegistered
Add context support to user and network mutations
Add context support to service
Check context cancellation in handleServiceServerNotice
Add partial context support to handleUserUpdate
Add context support to Server.createUser
Remove support for mixed multi-upstream LIST
Add a queue for WHO commands
Add ELIST support in single-upstream mode
Add support for MONITOR
cmd/soju: bump max number of opened files
Add panic handlers for user and downstream goroutines
Don't send user in prefix for echo messages
Allow most config options to be reloaded
Add downstreamConn.isMultiUpstream
Set isMultiUpstream flag in downstreamConn.welcome()
Add config option to globally disable multi-upstream mode
sojuctl: use background context
contrib/znc-import: use background context
Use background context in tests
Add context arg to sanityCheckServer
Lower sanityCheckServer timeout to 15s
Add context to downstreamConn.handleMessageUnregistered
Add context arg to downstreamConn.welcome()
Lift up context to downstreamConn.handleMessage
Introduce conn.NewContext
Add timeout for downstream connection registration
Add per-user IP addresses
Update downstream caps/nick/realname before sending MOTD
Add basic Prometheus metrics exporter
Add basic active users and downstreams metrics
Add int64 gauge abstraction
Add number of upstream connections to metrics
Add message counter metrics
Add Prometheus instrumentation for the database
Add pprof HTTP server
Upgrade dependencies
doc/per-user-ip: new documentation article
Disallow empty string for nick
contrib/clients: WeeChat 3.3 enables all IRCv3 caps by default
Thomas Vigouroux (1):
Add CHATHISTORY LATEST support
delthas (4):
Add support for draft/event-playback
Add support for draft/extended-monitor
Send the downstream host for PRIVMSG echo messages
Return an empty CHATHISTORY TARGETS batch when in multi-upstream