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