* Fix a race condition in persisting channel memberships for always-on
clients (the asynchronous write of the client's channel memberships
could precede the update to the channel's member list, resulting in
the membership not being observed and written)
* Ensure always-on state is flushed on shutdown (we were already
flushing timestamps, because those writes are heavily debounced, but
we were relying on immediate asynchronous writeback for channel
memberships and similar state).
* Harvest cookies from the initial websocket handshake to pass to an
auth-script (#2185)
* Allow running auth-script and ip-check-script over unix domain socket
(#2280)
* abstract history DB interface
* make mysql error logging consistent
Consistently propagate database errors to the client, making the client
responsible for logging them.
* move ListCorrespondents from Sequence to Database/Buffer
* Impose a throttle on OPER attempts regardless of whether they caused a
password check.
* Never disconnect the client on a failed attempt, even if there was a
password check.
* Change error numeric to ERR_NOOPERHOST
* Explicit information about the failure in the server log (copying Insp)
Fixes#2296.
* spec update: metadata keys are lowercase
* add batch parameter to metadata batches
* fix: connecting clients receive METADATA, not RPL_KEYVALUE
* spec update: send RPL_METADATASUBS in a metadata-subs batch
* move some helpers
* bump irctest to forked hash
This is https://github.com/progval/irctest/pull/314 but I don't want to
couple the merges
* fix: empty value is valid
* fix: deleting a nonexistent key gets a FAIL
* metadata spec update: disallow colon entirely
* refactor key validation
* implement metadata before-connect
* play the metadata in reg burst to all clients with the cap
* bump irctest
* remove all case normalization for keys
From spec discussion, we will most likely either require keys to be lowercase,
or else treat them as case-opaque, similar to message tag keys.
Block uses of the JS Fetch API to send HTTP message bodies that are also valid
IRC. The constraint on such messages is that they must begin with a valid HTTP
verb; we can detect this and reject them immediately.
getPushSubscriptions() could have a stale view of the latest subscription
renewal and successful push times. We don't want to rebuild on every renewal
or every push, so add a boolean refresh argument that controls rebuilding.
* implement draft/pre-away
* clean up some subtleties in auto-away aggregation.
* consistently apply auto-away only to always-on
* `AWAY *` should not produce user-visible changes wherever possible
See 69448b13a10a14517 / #1969; the compiler can now ensure that a uint64
intended for atomic access is always aligned to a 64-bit boundary.
Convert atomic operations on uint32s and pointers as well.