module Snap.Snaplet.CustomAuth.Util where
import Control.Error.Util
import Control.Monad.State
import Data.ByteString (ByteString)
import Data.Monoid
import Data.Text (Text)
import Data.Text.Encoding
import Snap hiding (path)
import Snap.Snaplet.CustomAuth.AuthManager
getStateName
:: Handler b (AuthManager u e b) Text
getStateName = do
path <- maybe "auth" id . hush . decodeUtf8' <$> getSnapletRootURL
name <- maybe "auth" id <$> getSnapletName
return $ "__" <> name <> "_" <> path <> "_state"
getParamText
:: forall (f :: * -> *).
MonadSnap f
=> ByteString
-> f (Maybe Text)
getParamText n = (hush . decodeUtf8' =<<) <$> getParam n
setFailure
:: Handler b (AuthManager u e b) ()
-> Maybe Text
-> Either e (AuthFailure e)
-> Handler b (AuthManager u e b) ()
setFailure action provider failure = do
let failure' = either UserError id failure
modify $ \s -> s { oauth2Provider = provider
, authFailData = Just failure'
}
action