jaraco / irc

Full-featured Python IRC library for Python.
MIT License
390 stars 84 forks source link

Add support for SASL PLAIN authentication #199

Closed anisse closed 10 months ago

anisse commented 1 year ago

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

jaraco commented 10 months ago

Oh, gosh. I can't believe I let this library languish for so long. Thanks for the contrib. I'll review and get it in ASAP.