This repository was archived by the owner on Apr 14, 2026. It is now read-only.
Repository navigation
Releases: emersion/soju
Releases · emersion/soju
Release list
0.8.0
soju v0.8.0
This release contains the following new features:
- Support for a new file-upload IRC extension, to allow clients to
upload files to the bouncer. The extension is disabled by default and
requires an HTTP listener to be set up.
- Unix domain sockets are now supported for HTTP and WebSocket listeners.
- Round-robien DNS resolution is used when per-user IP addresses are set
up, to better spread load for larger bouncer deployments.
- Highlights are now ignored when they appear inside a URL.
Full commit history below.
Alex McGrath (1):
fileupload: add CORS header fields
Egor (1):
Add unix domain socket listeners for HTTP and WS
Henrique Dias (1):
Upgrade to go-sqlite3 to fix musl build
Moritz Poldrack (2):
Fix crash on start when file-upload is disabled
doc: add documentation for the file-upload key
Simon Ser (43):
doc/man: add note that memory message store is basic
Add .b4-config
contrib/certbot: new document
contrib/tlstunnel: new document
database: move schema into separate file
contrib/certbot: set -eu in renewal hook
server: fix malformed Web Push subscriber URI
downstream: use fresh context to send timeout errors
Add conn.Shutdown
upstream: consoldate TCP dial into function
config: use scfg unmarshaler
Add https:// and http+insecure:// listeners
cmd/soju: add withDefaultPort helper
config: fix MaxUserNetworks default value
service: don't send PART if not joined in "channel delete"
doc/per-user-ip: fix subnet length in ip route command
Upgrade dependencies
doc/ext/bouncer-networks: drop work-in-progress disclaimer
Add support for file uploads
Add http-ingress config directive
doc/ext/filehost: fix heading level
downstream: fix FILEHOST endpoint
fileupload: serve select MIME types as inline
doc: note that file uploads require an HTTP listener
config: validate http-origin patterns
Upgrade dependencies
Wire up server logger to testing package
Ignore highlights in URLs
fileupload: append ext to filename if missing
fileupload: hardcode a few primary file extensions
fileupload: URL-escape output filename
upstream: use round-robin DNS resolution when per-user IPs are set up
Upgrade dependencies
upstream: fix conditional for resolveIPAddr
auth/pam: upgrade to github.com/msteinert/pam v2
server: print error on getOrCreateUser failure
fileupload: fix http-origin pattern matching
upstream: fix panic on malformed RPL_CHANNELMODEIS
downstream: shallow copy message in SendMessage instead of deep copy
downstream: ensure numerics always carry a source prefix
Drop unnecessary prefixes for numerics
Drop source prefix from most non-numeric server messages
Remove RLIMIT_NOFILE bump
Tomasz Hołubowicz (1):
contrib/clients: update information on ERC for Emacs
delthas (1):
Automatically join a stored channel on INVITE
dubious (1):
Upstream change for senpai
jacob1 (2):
Fix missing prefix on away numerics
Include prefix in CAP messages again
0.7.0
soju v0.7.0
This is a smaller release, it contains small new features and bug fixes.
- The new draft/pre-away extension allows short-lived and background clients
(e.g. chathistorysync and Goguma's background worker) to not toggle the
auto-away status.
- The new draft/no-implicit-names extension allows clients with low bandwidth
to connect faster (e.g. Goguma with 3G).
- The contrib/migrate-db script is now a lot faster.
- SASL ANONYMOUS is now supported to log out from an upstream network.
- STATUSMSG messages are now properly routed.
Full commit history below.
Antonio Mika (1):
Update user.go to not broadcast a push notification when generated from us
Calvin Lee (4):
fix empty CHATHISTORY TARGETS
database: batch msg inserts
contrib/migrate-db: use explicit src/dest network
Fix saving `+draft/react` is msgstores
Eric Mertens (7):
Fix capability associated with account message-tag
Don't drop RPL_LISTSTART - passthrough to downstream
ERR_NOSUCHSERVER unqueues WHOIS
Pass MODE and TOPIC through for unjoined channels
Add support for STATUSMSG
Forward complete MODE message to upstream when changing modes
Only log unhandled messages in debug mode
Simon Ser (62):
downstream: set CLIENTTAGDENY=* when upstream is missing message-tags
upstream: add forwardMsgByID
upstream: forward ERR_NOSUCHNICK
upstream: don't print "unhandled message" for registration errors
downstream: return channel in cached WHO reply
gitignore: add doc/sojuctl.1
user: fix dup upstream connections due to race
user: unconditonally stop network in updateNetwork()
downstream: return FAIL on unknown BOUNCER command before registration
downstream: take irc.Message in handleCap
Improve Server.Handle readability
downstream: inline authenticate function
user: fix upstream connections closed after 1 minute
downstream: fix connection registration
Stop setting *user in downstreamConn.register
downstream: rename downstreamRegistration.password to pass
downstream: add support for ANONYMOUS SASL auth
downstream: error out if SASL PLAIN identity is specified
upstream: introduce upstreamConn.forwardMessage
downstream: pass context to SendMessage
contrib/systemd: add AmbientCapabilities=CAP_NET_BIND_SERVICE
doc/packaging: add section about binding to privileged ports
database/sqlite: fix missing argument in DeleteUser
Panic if isHighlight is called with empty nick
Use database.GetNick in network.isHighlight
service: reject params for commands that don't take any
Rename Config.Log{Driver,Path} to MsgStore
Add CHATHISTORY test
downstream: fix nick in auth error message
msgstore/znclog: fix panic on malformed input line
msgstore/znclog: fix error message
downstream: improve SASL error logging
Upgrade dependencies
server: add metric for goroutine panics
Introduce soju.im/pre-away
Replace soju.im/pre-away with draft/pre-away
service: add a way to reset a network certfp
Upgrade dependencies
doc: expand on message store specificities
doc: clarify that client suffixes are not required for chathistory
doc: remove mention of dropped multi-upstream mode
contrib/clients: drop mention of single-upstream mode
Use * instead of nick in some numeric replies
server: drop TODO about configurable vars
Use downstreamConn.upstreamForCommand when handling user MODE
Remove remnant comments about multi-upstream mode
Don't send bouncer-networks updates for removed networks
build: cleanup all man pages
build: improve readability of Go -ldflags
service: convert network certfp to lower-case
doc: add openssl command to fetch server fingerprint
go fmt
database: add NewNetwork
database: fix default value for Network.AutoAway
database: add NewUser
cmd/sojudb: use User.SetPassword
contrib/znc-import: leave password empty by default
database: drop unnecessary comment
Upgrade dependencies
upstream: use unspecified AWAY reason if possible
conn: drop ErrClosed workaround for WebSocket
Add support for draft/no-implicit-names
delthas (1):
Fix SEARCH queries with special characters on SQLite
sentriz (1):
database: use postgresQueryTimeout for PostgresDB StoreMessages
0.6.2
soju v0.6.2
Simon Ser (5):
service: reject params for commands that don't take any
downstream: fix nick in auth error message
msgstore/znclog: fix panic on malformed input line
msgstore/znclog: fix error message
downstream: improve SASL error logging
0.6.1
soju v0.6.1
Simon Ser (14):
downstream: set CLIENTTAGDENY=* when upstream is missing message-tags
upstream: add forwardMsgByID
upstream: forward ERR_NOSUCHNICK
upstream: don't print "unhandled message" for registration errors
downstream: return channel in cached WHO reply
gitignore: add doc/sojuctl.1
user: fix dup upstream connections due to race
user: unconditonally stop network in updateNetwork()
downstream: return FAIL on unknown BOUNCER command before registration
user: fix upstream connections closed after 1 minute
downstream: error out if SASL PLAIN identity is specified
database/sqlite: fix missing argument in DeleteUser
Panic if isHighlight is called with empty nick
Use database.GetNick in network.isHighlight
0.6.0
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
0.5.2
soju v0.5.2
Ember Sawady (2):
Fix NICK on upstreams supporting MONITOR
Fix labeled-response without downstream echo-message
Jeff Martin (1):
server: fix panic stacktrace print formatting
Petr Ročkai (1):
downstream: fix inverted range in CHATHISTORY LATEST with a timestamp
Reto Brunner (1):
Use output given to NewLogger
Simon Ser (8):
downstream: re-format doc comment with Go 1.19 style
upstream: add timeout for pending commands
Downgrade Web Push urgency for unimportant messages
Broadcast Web Push subscriptions in a new goroutine
downstream: break findWebPushSubscription in two functions
downstream: add hard limit on Web Push subscriptions
go fmt
Pass-through ISUPPORT LINELEN
0.5.1
soju v0.5.1
This bugfix release addresses issues in the PostgreSQL database backend.
Simon Ser (5):
database/postgres: fix inverted network and user in StoreWebPushSubscription
database/postgres: make WebPushSubscription.user NOT NULL
database/postgres: set max open conns
database/postgres: fix inverted networkID check in StoreWebPushSubscription
database/postgres: fix inverted networkID check in ListWebPushSubscriptions
0.5.0
soju v0.5.0
Highlights for this release:
- Add support for soju.im/webpush for push notification support on
mobile platforms.
- Add support for soju.im/search to query message stores.
- Add support for draft/read-marker to synchronize read markers between
clients of the same user.
- Add support for chghost, echo-message and @+draft/channel-context
- Allow users to delete their own account.
- Multi-upstream mode now requires a "/*" suffix to be added to the
username to be enabled. Note, multi-upstream mode will be dropped in
a future version.
Full commit history below.
Brett Cornwall (1):
doc/getting-started: Fix simple misspelling.
Frank Steinborn (1):
contrib/clients: Add information about irssi
Simon Ser (119):
downstream: drop delivery receipts when client supports chathistory
upstream: use network case-mapping in updateMonitor
downstream: set case-mapping for monitored
Mark BouncerServ as online in MONITOR, don't forward to upstream
irc: introduce capRegistry
Use capRegistry for downstreamConn
Use capRegistry for upstreamConn
downstream: atomically ack/nak capabilities
service: limit number of -connect-command flags
Warn about non-FQDN hostnames
doc/soju.1: recommend using a FQDN for the hostname
downstream: improve ERR_ERRONEUSNICKNAME message a bit
Enable bot mode for BouncerServ
downstream: ignore nickname during connection registration
downstream: move multi-upstream name handling to loadNetwork
downstream: reject negative or zero network IDs in parseBouncerNetID
downstream: process BOUNCER BIND in downstreamConn.welcome
downstream: improve grouping of downstreamConn fields
downstream: move negotiatingCaps to downstreamRegistration
downstream: explain when downstreamConn.sasl is nil
Add support for RPL_VISIBLEHOST
doc/soju.1: fix syntax error
Add support for chghost
downstream: rejigger hostname logic in newDOwnstreamConn
downstream: always populate downstreamConn.username
Ensure all incoming messages have a prefix set
downstream: copy message when degrading extended-join
downstream: strip back "*" prefix
Add the soju.im/no-implicit-names extension
Remove unnecessary zero initialization
upstream: don't populate time tag for numerics
downstream: clarify "user not active" error message
downstream: send RPL_ENDOFWHO on unmarshalEntity error
doc: split off multi-upstream documentation
contrib/clients: senpai now supports soju.im/bouncer-networks
doc/getting-started: add paragraph about client names
doc/getting-started: mention TLS and on-disk logs
Allow nil network in Get{Nick,Username,Realname}
downstream: set realname for network-less connections
Use SETNAME when updating user-wide realname
downstream: update user realname on SETNAME
Refuse to change nick on bouncer connection
Simplify and improve WHOIS forwarding
server: print panic stack trace as string
upstream: use labeled-response for queued commands
Queue WHOIS commands
Remove unnecessary lastDownstreamID initialization
upstream: pass context to upstreamConn.requestCaps
downstream: unify PRIVMSG/NOTICE and TAGMSG codepaths
downstream: use upstream user/host for echo message
doc/getting-started: ask to install soju
upstream: use context to set connectToUpstream timeout
Split upstream connection handling to separate function
Add timeout for upstream connection registration
Add TODO for upstreamConn.register race
Drop user.forEachDownstream
Add user.notifyBouncerNetworkState
downstream: improve error message on unrecognized message
readme: restrict CI badge to master branch
doc/ext/bouncer-networks: specify how attributes are cleared in notifications
upstream: fix missing WHOIS in abortPendingCommands
doc/ext/bouncer-networks: remove BOUNCER BIND auth restriction
downstream: fix setting tls=0 in bouncer-networks
db_sqlite: drop mutex
upstream: fix panic in isChannel
Introduce a database package
msgstore: add loadMessageOptions
msgstore: rename searchMessageOptions, export fields
Introduce an xirc package
Add msgstore package
Move identd to separate package
Rename "log" config directive to "message-store"
config: add `message-store memory`
xirc: move command constants over
Rename join to generateJoin
xirc: move ChannelStatus over
xirfc: move over message generation functions
xirc: encode tokens in GenerateIsupport
xirc: move over CapRegistry
xirc: move over WHOX helpers
xirc: move over Membership
xirc: add GenerateSASL
Move batch struct to upstream.go
Remove bridge.go
Add soju.im/account-required
Drop casemapMap.OriginalKey
Drop size arg from newCasemapMap
Make casemapMap more type-safe
Don't provide name in channel casemapMap Set and ForEach
database: add User.{Check,Set}Password
Upgrade dependencies
Add webpush extension
downstream: fix panic in findWebPushSubscription for unbound conns
database: add missing user column to WebPushSubscription table
database/sqlite: add migration for WebPushSubscription.user
upstream: rename variables to clear up target confusion
upstream: improve server message detection
readme: copy over updated description from website
upstream: add support for @+draft/channel-context
Add support for draft/read-marker
Fix draft/read-marker entry in permanentDownstreamCaps
contrib/znc-import: move to subdir
upstream: unset SASL state on RPL_TRYAGAIN
upstream: handle ERR_UNKNOWNERROR and ERR_NEEDMOREPARAMS for queued commands
upstream: fix server message detection for wildcard targets
upstream: compare service nick with case-mapping
upstream: drop upstreamConn.nickCM
downstream: fix MARKREAD/READ command name in broadcast
Send MARKREAD push notifications
Add per-user default nickname
downstream: simplify NICK handling when disconnected
downstream: relay SETNAME with upstreamConn.SendMessageLabeled
upstream: ignore RPL_ENDOFWHO without pending command
Aggregate AWAY status from all connected clients
dowstream: remove noop WEBPUSH REGISTER
downstream: fix downstream check for draft/read-marker
upstream: pre-registration NOTICEs come from servers
upstream: regain desired nick when MONITOR is missing
downstream: reply to INFO
delthas (12):
downstream: Enable handling READ when upstream is disconnected
Fix build on systems without syscall.Rlimit
Send any welcome error messages to the downstream
Require an explicit `*` network suffix for multi-upstream
Enable resetting a BOUNCER NETWORK port
bouncer-networks: Add a read-only error attribute
upstream: handle CAP ACK -name
Add support for the upstream echo-message capability
Enable message-tags only when all upstreams support it
Add support for the SEARCH extension
Keep batch tag for downstreams with batch cap
Fix network.forEachDownstream exiting on first non-match
gildarts (4):
Add detach option to channel update
contrib/migrate-db: new script
Add ability for a user to delete themselves
database: upgrade bcrypt cost as needed
jesopo (1):
contrib/clients: correct comment about catgirl
0.4.0
soju v0.4.0
Highlights for this release:
- Add support for the new soju.im/read extension
- Add support for proxying sasl and draft/account-registration after
connection registration
- Improved BouncerServ commands: make network argument optional, add
"sasl status"
- Fallback to alternative nick if unavailable (and use MONITOR to roll
back to the preferred nick as soon as possible)
- Add exponential backoff when re-connecting to upstream servers
Full commit history below.
Chris Howey (1):
bump required go version to 1.15
Simon Ser (76):
Add missing account-notify to permanentUpstreamCaps
Abort SASL if in-progress while completing registration
Use RPL_LOGGEDIN/OUT to mirror upstream status
Send RPL_LOGGEDIN with bouncer account in multi-upstream mode
Add support for post-connection-registration upstream SASL auth
Remove sasl cap after registration if network doesn't support it
Return more descriptive auth failure errors
downstream: improve unmarshalEntityNetwork error message
doc/soju.1: add `network create` example
Add support for draft/account-registration proxying
Add "sasl status" command
Validate address in user.checkNetwork
Add context to connectToUpstream
Fix upstream gauge metric
Add soju_upstream_connect_errors_total metric
Add exponential backoff when re-connecting to upstream
Don't retry connecting on permanent failure
Mark ACCOUNT_REQUIRED error as permanent connection failure
Cancel pending commands on downstream disconnect
Add context to upstreamConn.handleMessage
Add context to network.storeClientDeliveryReceipts
Use golang.org/x/time/rate
Avoid forwarding MONITOR requests if upstream doesn't support it
Fallback to alt nick
Read nickname from RPL_WELCOME
Stop incrementing hopcount in RPL_WHOREPLY
Remove Logger.Print
Add Logger.Debugf
Downgrade conn log messages to debug
Improve msgStore.Append log message wording
Add username to downstreamConn log messages
Disallow ',' in nicknames
Use more descriptive errors when aborting pending commands
Improve error message when downstream doesn't authenticate
Use dc.nick instead of "*" for RPL_* messages
service: send summary when executing "server notice"
server: cleanup user in defer
Add context to {conn,upstreamConn}.SendMessage
Don't forward duplicate JOIN commands
Block RPL_{CREATIONTIME,TOPICWHOTIME} for detached channels
Add support for downstream multi-line AUTHENTICATE commands
Handle upstream multi-line SASL
Add context to upstreamConn.handleCapAck
Don't send RPL_NOTOPIC on JOIN
Retry on temporary net.Listener failure
Fix incorrect listen addr in error message
Drop user.forEachNetwork
Ensure consistent network ordering
Fix capitalization of handleServiceSASLStatus
service: switch to -network flag for certfp and sasl commands
service: make name arg optional for network commands
Forbid empty and flag-looking network names
db_postgres: use enum for sasl_mechanism
makefile: switch to BSD/GNU make
Add context to upstreamConn.runUntilRegistered
Add context to upstreamConn.register
Refactor generateWHOXReply
Fix flags variable name in RPL_WHOREPLY handler
doc: move read spec to ext/
Ignore READ commands for service
Introduce formatServerTime
irc: add isHighlight tests
irc: simplify isHighlight
msgstore_fs: fix direct message targets
downstream: panic when registering twice
downstream: be less strict when picking up client name
downstream: fail on client or network name mismatch
Upgrade dependencies
downstream: fix network name msimatch check being too strict
downstream: re-format illegalNickChars doc comment
downstream: disallow '.' in nicknames
doc/ext: add README
contrib/clients: warn about catgirl
contrib/clients: add goguma
db: allow registering multiple metrics collectors
db_postgres: report network metrics with hostname label
Theodor Thornhill (1):
contrib/clients: Add information about emacs irc clients
delthas (2):
Fix echo-message for TAGMSG
Add support for the wip soju.im/read capability and READ command
0.3.0
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