{-# LANGUAGE OverloadedStrings, FlexibleContexts, PackageImports #-} module Network.Sasl.External.Client (sasl) where import "monads-tf" Control.Monad.State import "monads-tf" Control.Monad.Error import Data.Pipe import qualified Data.ByteString as BS import Network.Sasl sasl :: ( MonadState m, SaslState (StateType m), MonadError m, Error (ErrorType m) ) => ( BS.ByteString, (Bool, Pipe (Either Success BS.ByteString) BS.ByteString m ()) ) sasl = ("EXTERNAL", client script) script :: ( MonadState m, SaslState (StateType m), MonadError m, Error (ErrorType m) ) => Client m script = Client (Just clientMessage) [] Nothing clientMessage :: ( MonadState m, SaslState (StateType m), MonadError m, Error (ErrorType m) ) => Send m clientMessage = do st <- gets getSaslState let Just username = lookup "username" st return username