irc
irc copied to clipboard
Add support for SASL PLAIN authentication
This implements a minimal state machine to do the SASL PLAIN authentication dance.
It could have been done even simpler by sending all the commands and not checking for server capabilities, but I don't think it's being a good citizen.
It changes the ServerConnection api by adding a sasl_login argument, and reusing the old password argument, since I couldn't think of a usecase where both were needed. The SimpleIRCClient and SingleServerIRCBot can also pass this new argument.
A new "login_failed" generated event is added and is sent in some of the cases where the SASL login can fail. Note that there is no timeout on the state machine, so if the server does not send any of the expected commands, it will just stay active forever, potentially with the login failing.
It was tested on libera.chat with the cobe bot and seems to work reasonably well.
Fixes #195