aatxe / irc

the irc crate – usable, async IRC for Rust
Mozilla Public License 2.0
531 stars 97 forks source link

IRCv3 support #24

Closed ghost closed 9 years ago

ghost commented 9 years ago

Howdy. Do you have plans to implement IRCv3 support? If not, I strongly urge you to, as IRCv3 provides a number of useful extensions to IRC (particularly account-notify, extended-join, and account-msg, for bot authors) that improve the experience for users and developers alike.

RFCs 2810 through 2813 have a lot of content that have nothing to do with real-world IRC, as they're basically what IRCnet thought IRC should be at the time they were published. Nobody else bit, unfortunately, and even IRCnet today has generally moved on. The IRCv3 working group is working on a 'core protocol' based on 3.1 with 3.2's core specifications (IIRC), to be published by the IETF using the same mechanism XMPP did, but I wouldn't wait for that to materialize.

aatxe commented 9 years ago

There is a bit of stuff already included from IRCv3 (particularly, capabilities negotiation and multi-prefix), but you're correct. Other extensions would be useful, and I can include them. I'll work on it.

aatxe commented 9 years ago

I added a function to request capabilities, and a type-safe API for doing so. I've included all of IRCv3.1 except for SASL (which will be more involved). I'll try to work on IRCv3.2 soon.

ghost commented 9 years ago

Fantastic, I look forward to being able to utilize this module for IRCv3.2 testing purposes. :+1:

aatxe commented 9 years ago

As of now, most of the IRCv3.1 and IRCv3.2 extensions are in place. sasl, tls, batch, and metadata are the only official remaining ones.

aatxe commented 9 years ago

I've added help wanted because I'm not entirely sure when I'll have the time to figure out sasl and tls, but I'll take PRs for batch and metadata, too.

ghost commented 9 years ago

I probably wouldn't bother with tls, since it really hasn't worked out in practice due to secure implementation being a monumental pain in the rear for clients. sasl is fairly simple, though; it uses the same authentication mechanisms non-IRC SASL does, which means the PLAIN and EXTERNAL mechanisms. (EXTERNAL just instructs the authentication agent to use some external information, such as a cert fingerprint on SSL connections.)

aatxe commented 9 years ago

That's good to know. I'm working on metadata right now. So, hopefully, this'll all be more-or-less done soon.

aatxe commented 9 years ago

Everything except sasl (ignoring tls) has been implemented. So, I'm going to close this issue and open a new one specifically about sasl.

aatxe commented 9 years ago

Actually, I'll just keep this open until I implement sasl. It appears to be a lot simpler than I remembered thinking it was.

aatxe commented 9 years ago

As of ba58934ee97f000cf3aa78fb55ca186db9b02ce6, I think we support everything except tls.

lol768 commented 6 years ago

Any thoughts on adding sts support?

aatxe commented 6 years ago

@lol768 I just gave it a look, and it seems doable. Please open another issue for it.