~emersion/soju

v0.8.0 4 months ago .tar.gz browse log

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.0 10 months ago .tar.gz browse log

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.2 1 year, 4 months ago .tar.gz browse log

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

v0.6.1 1 year, 5 months ago .tar.gz browse log

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.0 1 year, 6 months ago .tar.gz browse log

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.2 2 years ago .tar.gz browse log

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

v0.5.1 2 years ago .tar.gz browse log

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

v0.5.0 2 years ago .tar.gz browse log

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

v0.4.0 2 years ago .tar.gz browse log

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

v0.3.0 2 years ago .tar.gz browse log

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
1 / 2