-
v0.8.06d0f7330 · ·
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
-
v0.7.067f7d9aa · ·
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
-
v0.6.11e99e08c · ·
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
-
v0.6.0f2b6d086 · ·
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
-
v0.5.2aee65cd2 · ·
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