Add support for SASL PLAIN authentication #199
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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