Implement HTTP basic external auth

References: https://todo.sr.ht/~emersion/soju/12
Prevent error handler from falling through in user.run
Add unix as supported upstream URL scheme to service
contrib/znc-import: new utility

Allows populating the soju database from a ZNC config file.
Fix deadlock in DB.Close

This method was calling itself, instead of the underlying SQLite
database's Close method.
Broadcast unhandled messages to downstream connections

In case labelled-response isn't supported, broadcast unhandled messages
to all downstream connections. That's better than silently dropping the
Strip network name from nickname when auto-saving network
Add support for upstream Unix socket connections

References: https://todo.sr.ht/~emersion/soju/51
Parse upstream URLs with net/url

This allows us to ignore the path part of the URL. This is preliminary
work for unix URLs.
Check upstream address with net.SplitHostPort

Looking for a colon is incorrect, IPv6 addresses can contain colons too.
Sort and split JOIN messages

Sort channels so that channels with a key appear first. Split JOIN
messages so that we don't reach the message size limit.
Make length check clearer in sendNames
Accept "irc" WebSocket subprotocol
Add RemoteAddr to ircConn interface
dc592636 — Hubert Hirtz 8 months ago
Send compact channel name lists

This commit resolves `sendNames`' TODO.
Only read X-Forwarded-* if remote address is loopback
Extract X-Forwarded-* headers for WebSocket connections
Reply to WHO BouncerServ

Closes: https://todo.sr.ht/~emersion/soju/75
Handle registration failures

References: https://todo.sr.ht/~emersion/soju/30
Return io.EOF on websocket connection closure