{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
module Network.Wai.SAML2.NameIDFormat (
NameIDFormat(..),
parseNameIDFormat,
showNameIDFormat
) where
import GHC.Generics (Generic)
import Data.Text (Text, unpack)
data NameIDFormat
= Unspecified
| EmailAddress
| X509SubjectName
| WindowsDomainQualifiedName
| KerberosPrincipalName
| Entity
| Provider
| Federated
| Transient
| Persistent
deriving (NameIDFormat -> NameIDFormat -> Bool
(NameIDFormat -> NameIDFormat -> Bool)
-> (NameIDFormat -> NameIDFormat -> Bool) -> Eq NameIDFormat
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NameIDFormat -> NameIDFormat -> Bool
== :: NameIDFormat -> NameIDFormat -> Bool
$c/= :: NameIDFormat -> NameIDFormat -> Bool
/= :: NameIDFormat -> NameIDFormat -> Bool
Eq, Eq NameIDFormat
Eq NameIDFormat =>
(NameIDFormat -> NameIDFormat -> Ordering)
-> (NameIDFormat -> NameIDFormat -> Bool)
-> (NameIDFormat -> NameIDFormat -> Bool)
-> (NameIDFormat -> NameIDFormat -> Bool)
-> (NameIDFormat -> NameIDFormat -> Bool)
-> (NameIDFormat -> NameIDFormat -> NameIDFormat)
-> (NameIDFormat -> NameIDFormat -> NameIDFormat)
-> Ord NameIDFormat
NameIDFormat -> NameIDFormat -> Bool
NameIDFormat -> NameIDFormat -> Ordering
NameIDFormat -> NameIDFormat -> NameIDFormat
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NameIDFormat -> NameIDFormat -> Ordering
compare :: NameIDFormat -> NameIDFormat -> Ordering
$c< :: NameIDFormat -> NameIDFormat -> Bool
< :: NameIDFormat -> NameIDFormat -> Bool
$c<= :: NameIDFormat -> NameIDFormat -> Bool
<= :: NameIDFormat -> NameIDFormat -> Bool
$c> :: NameIDFormat -> NameIDFormat -> Bool
> :: NameIDFormat -> NameIDFormat -> Bool
$c>= :: NameIDFormat -> NameIDFormat -> Bool
>= :: NameIDFormat -> NameIDFormat -> Bool
$cmax :: NameIDFormat -> NameIDFormat -> NameIDFormat
max :: NameIDFormat -> NameIDFormat -> NameIDFormat
$cmin :: NameIDFormat -> NameIDFormat -> NameIDFormat
min :: NameIDFormat -> NameIDFormat -> NameIDFormat
Ord, Int -> NameIDFormat -> ShowS
[NameIDFormat] -> ShowS
NameIDFormat -> String
(Int -> NameIDFormat -> ShowS)
-> (NameIDFormat -> String)
-> ([NameIDFormat] -> ShowS)
-> Show NameIDFormat
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NameIDFormat -> ShowS
showsPrec :: Int -> NameIDFormat -> ShowS
$cshow :: NameIDFormat -> String
show :: NameIDFormat -> String
$cshowList :: [NameIDFormat] -> ShowS
showList :: [NameIDFormat] -> ShowS
Show, (forall x. NameIDFormat -> Rep NameIDFormat x)
-> (forall x. Rep NameIDFormat x -> NameIDFormat)
-> Generic NameIDFormat
forall x. Rep NameIDFormat x -> NameIDFormat
forall x. NameIDFormat -> Rep NameIDFormat x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. NameIDFormat -> Rep NameIDFormat x
from :: forall x. NameIDFormat -> Rep NameIDFormat x
$cto :: forall x. Rep NameIDFormat x -> NameIDFormat
to :: forall x. Rep NameIDFormat x -> NameIDFormat
Generic)
parseNameIDFormat :: MonadFail m => Text -> m NameIDFormat
parseNameIDFormat :: forall (m :: * -> *). MonadFail m => Text -> m NameIDFormat
parseNameIDFormat = \case
Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:Kerberos" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
KerberosPrincipalName
Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
WindowsDomainQualifiedName
Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
X509SubjectName
Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
EmailAddress
Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Unspecified
Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:entity" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Entity
Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:federated" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Federated
Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Persistent
Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:provider" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Provider
Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:transient" -> NameIDFormat -> m NameIDFormat
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure NameIDFormat
Transient
Text
unknown -> String -> m NameIDFormat
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m NameIDFormat) -> String -> m NameIDFormat
forall a b. (a -> b) -> a -> b
$ String
"parseNameIDFormat: unknown format " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
unpack Text
unknown
showNameIDFormat :: NameIDFormat -> Text
showNameIDFormat :: NameIDFormat -> Text
showNameIDFormat = \case
NameIDFormat
KerberosPrincipalName -> Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:Kerberos"
NameIDFormat
WindowsDomainQualifiedName -> Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName"
NameIDFormat
X509SubjectName -> Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName"
NameIDFormat
EmailAddress -> Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
NameIDFormat
Unspecified -> Text
"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
NameIDFormat
Entity -> Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
NameIDFormat
Federated -> Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:federated"
NameIDFormat
Persistent -> Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
NameIDFormat
Provider -> Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:provider"
NameIDFormat
Transient -> Text
"urn:oasis:names:tc:SAML:2.0:nameid-format:transient"