irc-core 2.7.0 → 2.7.1
raw patch · 3 files changed
+33/−10 lines, 3 filesdep ~basedep ~hashabledep ~primitivePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, hashable, primitive
API changes (from Hackage documentation)
+ Irc.Commands: AuthenticatePayload :: ByteString -> AuthenticatePayload
+ Irc.Commands: instance GHC.Show.Show Irc.Commands.AuthenticatePayload
+ Irc.Commands: ircAuthenticates :: AuthenticatePayload -> [RawIrcMsg]
+ Irc.Commands: newtype AuthenticatePayload
- Irc.Commands: encodeExternalAuthentication :: Text -> Text
+ Irc.Commands: encodeExternalAuthentication :: Text -> AuthenticatePayload
- Irc.Commands: encodePlainAuthentication :: Text -> Text -> Text
+ Irc.Commands: encodePlainAuthentication :: Text -> Text -> AuthenticatePayload
Files
- ChangeLog.md +4/−0
- irc-core.cabal +1/−1
- src/Irc/Commands.hs +28/−9
ChangeLog.md view
@@ -1,5 +1,9 @@ # Revision history for irc-core +## 2.7.1++* Add `ircAuthenticates` and `AuthenticatePayload`+ ## 2.7.0 * Fix encoding when final argument is empty
irc-core.cabal view
@@ -1,5 +1,5 @@ name: irc-core-version: 2.7.0+version: 2.7.1 synopsis: IRC core library for glirc description: IRC core library for glirc .
src/Irc/Commands.hs view
@@ -61,16 +61,20 @@ , ircZnc -- * SASL support+ , AuthenticatePayload(..) , ircAuthenticate+ , ircAuthenticates , encodePlainAuthentication , encodeExternalAuthentication ) where import Irc.RawIrcMsg import Irc.Identifier+import Data.ByteString (ByteString) import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Encoding as Text+import qualified Data.ByteString as B import qualified Data.ByteString.Base64 as Enc nonempty :: Text -> [Text]@@ -407,28 +411,43 @@ RawIrcMsg ircZnc = rawIrcMsg "ZNC" --- | AUTHENTICATE command+-- | Payload for 'ircAuthenticates'+newtype AuthenticatePayload = AuthenticatePayload ByteString+ deriving Show+ ircAuthenticate :: Text {- ^ authentication mechanism -} -> RawIrcMsg ircAuthenticate msg = rawIrcMsg "AUTHENTICATE" [msg] +-- | AUTHENTICATE command generator. Returns a list+-- because AUTHENTICATE has a chunking behavior.+ircAuthenticates ::+ AuthenticatePayload {- ^ authentication payload -} ->+ [RawIrcMsg]+ircAuthenticates (AuthenticatePayload bytes) =+ map (ircAuthenticate . Text.decodeUtf8) (chunks (Enc.encode bytes))+ where+ chunks :: ByteString -> [ByteString]+ chunks b+ | B.null b = ["+"]+ | B.length b >= 400 = B.take 400 b : chunks (B.drop 400 b)+ | otherwise = [b]+ -- | Encoding of username and password in PLAIN authentication encodePlainAuthentication :: Text {- ^ username -} -> Text {- ^ password -} ->- Text+ AuthenticatePayload encodePlainAuthentication user pass- = Text.decodeUtf8- $ Enc.encode+ = AuthenticatePayload $ Text.encodeUtf8 $ Text.intercalate "\0" [user,user,pass] -- | Encoding of username in EXTERNAL authentication encodeExternalAuthentication :: Text {- ^ username -} ->- Text-encodeExternalAuthentication user- = Text.decodeUtf8- $ Enc.encode- $ Text.encodeUtf8 user+ AuthenticatePayload+encodeExternalAuthentication+ = AuthenticatePayload+ . Text.encodeUtf8