If the client sends a long multiline, then pauses on its own
before sending more data, we want to apply deferred fakelag
during the pause, rather than upon receiving the next input line.
* 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)
If the final channel we attempted to list had no messages, sql.ErrNoRows
would be returned as the error for the entire function, which would
prevent any channels from appearing in the targets list.
* default build includes everything
* allow compiling out PRECIS and Skeleton (still included by default)
* consistently use `postgresql` in identifiers
* All FAIL messages take the endpoint as a parameter when available
* Use MAX_REGISTRATIONS instead of FORBIDDEN when appropriate
* Add handler for unknown subcommand
* fix#2227
Instead of returning an error from Accept(), force the caller to process
errors from trying to read and parse the PROXY protocol.
The advantage here is that we don't have to rely on (net.Error).Temporary
or incur timed backoff from net/http when hitting these errors. However,
we still risk stalling processing of new incoming connections if someone
opens a connection to the proxy listener and doesn't send anything.
This is hard to fix while maintaining the net.Listener abstraction in
cooperation with http.Server.
* reduce proxy deadline to 5 seconds
* Add API endpoint /v1/ns/passwd to change passwords
* New naming scheme for API endpoints under /v1/ns/
* /v1/ns/list no longer returns error responses
* Consistently return UNKNOWN_MSGID for unknown or invalid msgids
* If both client's DMs are stored in persistent history, a single
server.DeleteMessage will delete the single canonical copy of the message.
So the second call will fail, which is fine.