~emersion/soju

v0.6.1 a month 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 2 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 8 months 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 10 months 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 10 months 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 1 year, 2 months 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 1 year, 6 months 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

v0.2.2 1 year, 7 months ago .tar.gz browse log

soju v0.2.2

Alex Karle (1):
      chathistory: Fix truncated backlog due to timezones

Simon Ser (3):
      db_sqlite: fix realname not fetched in ListUsers
      Close DB on shutdown
      Add limit for RSA bits

v0.2.1 1 year, 8 months ago .tar.gz browse log

soju v0.2.1

This is a bug fix release for soju v0.2.0.

Chris Smith (1):
      Set a higher timeout for proxyproto listeners

Hubert Hirtz (5):
      Explicitly close connection to SQLite on failed upgrade
      Use NULL-tolerant comparison for DeliveryReceipts
      Allow CAP negotiation to happen with CAP REQ
      msgstore_fs: escape "." and ".."
      Fix DeliveryReceipt not being cleaned up

Simon Ser (2):
      readme: add note to use system libsqlite3
      Workaround lack of net.ErrClosed in WebSocket library

v0.2.0 1 year, 8 months ago .tar.gz browse log

soju v0.2.0

This release brings a set of bug fixes and new features. New features include:

- Support for a new soju.im/bouncer-networks extension, allowing clients
  to automatically integrate with soju's multi-network functionality.
  gamja and Weechat (via a script) take advantage of it.
- Support for CHATHISTORY BETWEEN and TARGETS, allowing better chat
  history integration in clients.
- Improved handling of MOTD, LUSERS, STATS and unknown IRC commands

Alexey Yerin (1):
      service: show SHA-512 fingerprint

Drew DeVault (1):
      db: refactor into interface

Gregory Anders (3):
      Forward MOTD messages downstream
      Forward user mode changes in single-upstream mode
      Slightly relax new log file permissions

Hubert Hirtz (6):
      Implement CHATHISTORY BETWEEN
      Fix CAP LIST listing disabled capabilities
      Don't forward label tags
      Don't build soju when calling "make install"
      Hand-made word splitter for BouncerServ
      Add a C compiler to the list of dependencies

Jake Nelson (1):
      Sort `channel status` channels by name

Philip K (1):
      Directly return self-messages to user in multi-upstream mode

Rafael Castillo (1):
      Check for TLS config in wss listeners

Simon Ser (57):
      Add more context to chathistory errors
      Check message stores implement expected interfaces
      contrib/clients: add gamja and senpai
      Silence net.ErrClosed errors
      Relay self-WHO/WHOIS in single-upstream mode
      readme: move quickstart to dedicated doc page
      readme: add link to IRC channel
      doc/soju.1: document -connect-command
      doc/soju.1: document user delete command
      readme: link to rendered man page
      Pass-through the BOT ISUPPORT token
      Implement the soju.im/bouncer-networks extension
      Add pass to bouncer network attributes
      Send network settings in LISTNETWORKS
      Introduce the soju.im/bouncer-networks-notify capability
      Don't send connection status NOTICEs with bouncer-networks
      Vendor BATCH bouncer-networks type
      contrib/clients: add note about bouncer-networks
      Add channel status service command
      Add support for IRCv3 setname
      doc/getting-started: s/Freenode/Libera Chat/
      Allow networks to be disabled
      Broadcast BOUNCER notifications to all downstream connections
      Fix typo in BOUNCER notifications: s/status/state/
      Reject JOIN with invalid channel names
      Send placeholder when no network/channel is returned by BouncerServ
      Forward unknown commands to upstream in single-upstream mode
      doc/ext/bouncer-networks: fix typo
      Implement CHATHISTORY TARGETS
      Prune detached channels from CHATHISTORY TARGETS
      Add downstreamConn.SendBatch helper
      Make user MODE commands fail in multi-upstream mode
      Don't suggest users to /motd in multi-upstream mode
      doc/soju.1: explain http-origin defaults
      contrib/clients: add reference to Weechat script
      Add support for account-tag
      Add support for utf8-only
      Forward LUSERS and STATS messages after initial registration
      Unify downstream PRIVMSG and NOTICE handling
      Allow admins to broadcast message to all bouncer users
      doc/soju.1: document bouncer-wide broadcasts
      Disallow '$' in nicks
      readme: list dependencies
      Add per-user realname setting
      Only update realname if specified in "user udpate"
      Merge "change-password" into "user update"
      doc/soju.1: improve "user create" docs
      Introduce user.updateUser
      ci: add gofmt check
      contrib/clients: sort alphabetically and wrap lines
      Pass-through CLIENTTAGDENY in ISUPPORT
      go fmt: add go:build tags
      Don't send network notification when removed
      Split unmarshalEntity into two functions
      Don't require upstream to be connected for CHATHISTORY
      Send empty history for service
      Upgrade dependencies

delthas (2):
      service: Introduce network quote
      contrib/clients: Mention Hexchat
1 / 2

Branches

unauth-downstream
nuke-multi-upstream
msgstore-bouncer-network-events
websocket-proxy-header
refactor-new-packages