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