module Network.Wai.SAML2.XML (
saml2Name,
saml2pName,
xencName,
dsName,
mdName,
ecName,
toMaybeText,
showUTCTime,
parseUTCTime,
FromXML(..),
oneOrFail,
parseSettings
) where
import qualified Data.Text as T
import Data.Time
import Data.Time.Format.ISO8601 (iso8601ParseM)
import Text.XML
import Text.XML.Cursor
saml2Name :: T.Text -> Name
saml2Name :: Text -> Name
saml2Name Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"urn:oasis:names:tc:SAML:2.0:assertion") (forall a. a -> Maybe a
Just Text
"saml2")
saml2pName :: T.Text -> Name
saml2pName :: Text -> Name
saml2pName Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"urn:oasis:names:tc:SAML:2.0:protocol") (forall a. a -> Maybe a
Just Text
"saml2p")
xencName :: T.Text -> Name
xencName :: Text -> Name
xencName Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"http://www.w3.org/2001/04/xmlenc#") (forall a. a -> Maybe a
Just Text
"xenc")
dsName :: T.Text -> Name
dsName :: Text -> Name
dsName Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"http://www.w3.org/2000/09/xmldsig#") (forall a. a -> Maybe a
Just Text
"ds")
mdName :: T.Text -> Name
mdName :: Text -> Name
mdName Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"urn:oasis:names:tc:SAML:2.0:metadata") (forall a. a -> Maybe a
Just Text
"md")
ecName :: T.Text -> Name
ecName :: Text -> Name
ecName Text
name =
Text -> Maybe Text -> Maybe Text -> Name
Name Text
name (forall a. a -> Maybe a
Just Text
"http://www.w3.org/2001/10/xml-exc-c14n#") (forall a. a -> Maybe a
Just Text
"ec")
toMaybeText :: [T.Text] -> Maybe T.Text
toMaybeText :: [Text] -> Maybe Text
toMaybeText [] = forall a. Maybe a
Nothing
toMaybeText [Text]
xs = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ [Text] -> Text
T.concat [Text]
xs
timeFormat :: String
timeFormat :: String
timeFormat = String
"%Y-%m-%dT%H:%M:%S%6QZ"
showUTCTime :: UTCTime -> T.Text
showUTCTime :: UTCTime -> Text
showUTCTime = String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall t. FormatTime t => TimeLocale -> String -> t -> String
formatTime TimeLocale
defaultTimeLocale String
timeFormat
parseUTCTime :: MonadFail m => T.Text -> m UTCTime
parseUTCTime :: forall (m :: * -> *). MonadFail m => Text -> m UTCTime
parseUTCTime = forall (m :: * -> *) t. (MonadFail m, ISO8601 t) => String -> m t
iso8601ParseM forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack
class FromXML a where
parseXML :: MonadFail m => Cursor -> m a
oneOrFail :: MonadFail m => String -> [a] -> m a
oneOrFail :: forall (m :: * -> *) a. MonadFail m => String -> [a] -> m a
oneOrFail String
err [] = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
err
oneOrFail String
_ (a
x:[a]
_) = forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x
parseSettings :: ParseSettings
parseSettings :: ParseSettings
parseSettings = forall a. Default a => a
def { psRetainNamespaces :: Bool
psRetainNamespaces = Bool
True }