soju v0.6.0
Note to packagers: a new document (docs/packaging.md) has been added to
explain how soju should be integrated in distributions. This release
contains many changes around the build process and installation.
Highlights for this release:
- A new database message store has been introduced. Instead of being
stored in plain-text files, messages can be stored in the database.
This is useful for improved performance, full-text search, and
retaining IRCv3 message tags.
- The old sojuctl has been renamed to sojudb. The new sojuctl is a tool
which executes service commands on a running soju instance. An admin
Unix socket is used for this purpose and needs to be enabled in the
configuration file.
- External authentication has been added. This can be used to integrate
with an OAuth 2.0 server or PAM.
- New service commands: "channel delete" is a more convenient way to get
rid of channels saved but not joined, "user run" executes command as
another user, "user status" to list registered users
- Users can be disabled to not use any runtime resource while keeping
their on-disk data intact. There are new configuration options to
automatically disable inactive users after a delay and re-enable
inactive users on authentication.
- WHO information is now cached, reducing latency and mitigating rate
limits when multiple clients are connected.
- TLS certificate pinning for upstream servers has been implemented.
This can be useful to connect to servers with a self-signed
certificate.
- Auto-away can now be disabled.
- Multi-upstream mode has been completely removed. The multi-upstream-mode
configuration option has been dropped.
- Go 1.19 is now the minimum required Go version.
Full commit history below.
Enterprisey (1):
contrib/clients: Warn about Hexchat password limit
Kirill Primak (1):
service: update "user {create,update}" help
Sandra Snan (1):
Be more clear that -connect-command needs quotes
Simon Ser (100):
config: use structs to group DB/MsgAuth
database/sqlite: make optional
Upgrade dependencies
downstream: don't echo back SASL mechanism
downstream: fix CHATHISTORY LATEST without a bound
downstream: remove outdated Web Push TODO
server: close queued up connections on shutdown
server: log when waiting for user goroutines on shutdown
downstream: refuse to enable multi-upstream mode
downstream: drop downstreamConn.isMultiUpstream
downstream: drop downstreamConn.unmarshalText
downstream: drop downstreamConn.marshalUserPrefix
downstream: drop downstreamConn.marshalMessage
downstream: drop downstreamConn.marshalEntity
upstream: remove heuristic to marshal nick in errors
upstream: use forEachDownstreamByID to forward RPL_AWAY
irc: drop needMarshaling from applyChannelModes return values
doc: drop multi-upstream mode bits
config: drop multi-upstream-mode
downstream: drop downstreamConn.unmarshalEntity{,Network}
downstream: stop sending HTTP OPTIONS request on WEBPUSH REGISTER
Use ratified extended-monitor cap name
Use ratified extended-monitor cap name for needAllDownstreamCaps
contrib/clients: reference read_marker.py for Weechat
Upgrade to gopkg.in/irc.v4
Upgrade dependencies
Add WHO cache
downstream: check channel name validity on JOIN
downstream: use ERR_BADCHANMASK for invalid channel name
service: add channel delete command
service: send PART in channel delete
service: fix typo in network -cerfp flag name
doc: document command parsing rules for the service
downstream: set empty CHANTYPES for bouncer connection
doc: add "user run" to man page
service: drop unnecessary admin check in handleUserRun
database/sqlite: introduce sqliteTime type
database: store user creation date
user: take context in user.stop
Add a flag to disable users
service: indicate which users are disabled in "user status"
Add user downstream interaction time
Add disable-inactive-user config option
Add enable-user-on-auth config directive
service: add -disable-password
Use database.User.SetPassword in server tests
Add infrastructure for external authentication
Add support for external OAuth 2.0 authentication
Add support for SASL OAUTHBEARER
Auto-create users after external auth when enable-user-on-auth is on
Add support for PAM authentication
config: add missing "pam" case
downstream: only send CHATHISTORY ISUPPORT when supported
Add a default path for the config file
build: add sharedstatedir variable
build: add RUNDIR variable
build: don't record DESTDIR in config.DefaultPath
build: invoke `go build` once only
Drop permissions on Unix admin socket
database/postgres: fix nil time errors
downstream: send MSGREFTYPES ISUPPORT
msgstore: move ZNC log functions to separate package
Rate limit Web Push checks
readme: merge paragraphs about GOFLAGS
doc/packaging: new page
Bump minimum Go version to 1.19
Drop isErrClosed
Remove legacy Go build comments
identd: reference RFC
identd: use UNKNOWN for OS name
Silence "Web Push subscription expired" errors
Move authError to auth package
upstream: drop unnecessary casemapIsSet field
upstream: convert ISUPPORT tokens to upper-case
downstream: reset map with correct casemapping on MONITOR C
upstream: drop unnecessary network nil check
Drop unused partialCasemap() helper
Add downstreamConn.updateCasemapping()
Pass-through ISUPPORT CASEMAPPING
Use generics for casemapMap
Migrate case-mapping to xirc
Rename casemapMap.setCasemapping to setCaseMapping
Take case-mapping as param in newCasemapMap()
Migrate casemapMap to xirc
xirc: drop CaseMappingNone
xirc: improve CaseMapping docs
service: use database.User.SetPassword instead of bcrypt
Introduce UserUpdateFunc
downstream: fix nickCM out-of-sync with effective case-mapping
downstream: fix nil pointer deref in downstreamConn.setUser
Move DefaultUnixAdminPath to config package
doc: add man page for sojuctl
makefile: add variable with command list
Set User-Agent when sending Web Push notifications
Prune old Web Push subscriptions
Bump update time on success in network.broadcastWebPush
Simplify push subscription pruning logic
database/sqlite: delete push subscriptions and msgstore in DeleteUser
downstream: fix panic due to nil user in setUser
doc/packaging: clarify and expand
delthas (19):
Truncate message times to the second when using the FS message store
Fix clearing webpush targets after any MARKREAD
Avoid sending push notifications for all channel context messages
Store only select TAGMSG types in message stores
service: reject commands with unexpected arguments
service: refactor downstreamConn to serviceContext
service: add user run
service: add user status
xirc: Fix sending hostnames starting with ':' in WHO replies
service: Store the admin capability independently the user
service: Enable running service commands without users
service: Enable running additional commands from a global context
service: Return the error rather than printing it
sojuctl: rename to sojudb
Add administrative unix listen endpoint
Listen on the default unix admin endpoint in the default configuration
Add cmd/sojuctl
Add a database store for messages
Add support for explicit PostgreSQL schema prefixes for tests
palm93 (2):
gitignore: add sojudb
build: fix binaries not being built
rj1 (1):
Implement TLS fingerprint pinning
sentriz (1):
database/postgres: fix StoreNetwork positional arguments
zsrv (1):
Make the auto-away functionality configurable
Łukasz Margiela (1):
Add build tag for modernc/sqlite driver
Дамјан Георгиевски (1):
add an example systemd service file