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