module Crypto.WebAuthn.Encoding.Strings
( encodeCredentialType,
decodeCredentialType,
encodeUserVerificationRequirement,
decodeUserVerificationRequirement,
encodeAuthenticatorAttachment,
decodeAuthenticatorAttachment,
encodeResidentKeyRequirement,
decodeResidentKeyRequirement,
encodeAttestationConveyancePreference,
decodeAttestationConveyancePreference,
encodeAuthenticatorTransport,
decodeAuthenticatorTransport,
)
where
import qualified Crypto.WebAuthn.Model.Types as T
import Data.Text (Text)
encodeCredentialType :: T.CredentialType -> Text
encodeCredentialType :: CredentialType -> Text
encodeCredentialType CredentialType
T.CredentialTypePublicKey = Text
"public-key"
decodeCredentialType :: Text -> Either Text T.CredentialType
decodeCredentialType :: Text -> Either Text CredentialType
decodeCredentialType Text
"public-key" = CredentialType -> Either Text CredentialType
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CredentialType
T.CredentialTypePublicKey
decodeCredentialType Text
str = Text -> Either Text CredentialType
forall a b. a -> Either a b
Left (Text -> Either Text CredentialType)
-> Text -> Either Text CredentialType
forall a b. (a -> b) -> a -> b
$ Text
"Unknown PublicKeyCredentialType string: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
str
encodeUserVerificationRequirement :: T.UserVerificationRequirement -> Text
encodeUserVerificationRequirement :: UserVerificationRequirement -> Text
encodeUserVerificationRequirement UserVerificationRequirement
T.UserVerificationRequirementRequired = Text
"required"
encodeUserVerificationRequirement UserVerificationRequirement
T.UserVerificationRequirementPreferred = Text
"preferred"
encodeUserVerificationRequirement UserVerificationRequirement
T.UserVerificationRequirementDiscouraged = Text
"discouraged"
decodeUserVerificationRequirement :: Text -> Either Text T.UserVerificationRequirement
decodeUserVerificationRequirement :: Text -> Either Text UserVerificationRequirement
decodeUserVerificationRequirement Text
"discouraged" = UserVerificationRequirement
-> Either Text UserVerificationRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure UserVerificationRequirement
T.UserVerificationRequirementDiscouraged
decodeUserVerificationRequirement Text
"preferred" = UserVerificationRequirement
-> Either Text UserVerificationRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure UserVerificationRequirement
T.UserVerificationRequirementPreferred
decodeUserVerificationRequirement Text
"required" = UserVerificationRequirement
-> Either Text UserVerificationRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure UserVerificationRequirement
T.UserVerificationRequirementRequired
decodeUserVerificationRequirement Text
str = Text -> Either Text UserVerificationRequirement
forall a b. a -> Either a b
Left (Text -> Either Text UserVerificationRequirement)
-> Text -> Either Text UserVerificationRequirement
forall a b. (a -> b) -> a -> b
$ Text
"Unknown UserVerificationRequirement string: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
str
encodeAuthenticatorAttachment :: T.AuthenticatorAttachment -> Text
encodeAuthenticatorAttachment :: AuthenticatorAttachment -> Text
encodeAuthenticatorAttachment AuthenticatorAttachment
T.AuthenticatorAttachmentPlatform = Text
"platform"
encodeAuthenticatorAttachment AuthenticatorAttachment
T.AuthenticatorAttachmentCrossPlatform = Text
"cross-platform"
decodeAuthenticatorAttachment :: Text -> Either Text T.AuthenticatorAttachment
decodeAuthenticatorAttachment :: Text -> Either Text AuthenticatorAttachment
decodeAuthenticatorAttachment Text
"platform" = AuthenticatorAttachment -> Either Text AuthenticatorAttachment
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AuthenticatorAttachment
T.AuthenticatorAttachmentPlatform
decodeAuthenticatorAttachment Text
"cross-platform" = AuthenticatorAttachment -> Either Text AuthenticatorAttachment
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AuthenticatorAttachment
T.AuthenticatorAttachmentCrossPlatform
decodeAuthenticatorAttachment Text
str = Text -> Either Text AuthenticatorAttachment
forall a b. a -> Either a b
Left (Text -> Either Text AuthenticatorAttachment)
-> Text -> Either Text AuthenticatorAttachment
forall a b. (a -> b) -> a -> b
$ Text
"Unknown AuthenticatorAttachment string: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
str
encodeResidentKeyRequirement :: T.ResidentKeyRequirement -> Text
encodeResidentKeyRequirement :: ResidentKeyRequirement -> Text
encodeResidentKeyRequirement ResidentKeyRequirement
T.ResidentKeyRequirementDiscouraged = Text
"discouraged"
encodeResidentKeyRequirement ResidentKeyRequirement
T.ResidentKeyRequirementPreferred = Text
"preferred"
encodeResidentKeyRequirement ResidentKeyRequirement
T.ResidentKeyRequirementRequired = Text
"required"
decodeResidentKeyRequirement :: Text -> Either Text T.ResidentKeyRequirement
decodeResidentKeyRequirement :: Text -> Either Text ResidentKeyRequirement
decodeResidentKeyRequirement Text
"discouraged" = ResidentKeyRequirement -> Either Text ResidentKeyRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResidentKeyRequirement
T.ResidentKeyRequirementDiscouraged
decodeResidentKeyRequirement Text
"preferred" = ResidentKeyRequirement -> Either Text ResidentKeyRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResidentKeyRequirement
T.ResidentKeyRequirementPreferred
decodeResidentKeyRequirement Text
"required" = ResidentKeyRequirement -> Either Text ResidentKeyRequirement
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResidentKeyRequirement
T.ResidentKeyRequirementRequired
decodeResidentKeyRequirement Text
str = Text -> Either Text ResidentKeyRequirement
forall a b. a -> Either a b
Left (Text -> Either Text ResidentKeyRequirement)
-> Text -> Either Text ResidentKeyRequirement
forall a b. (a -> b) -> a -> b
$ Text
"Unknown ResidentKeyRequirement string: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
str
encodeAttestationConveyancePreference :: T.AttestationConveyancePreference -> Text
encodeAttestationConveyancePreference :: AttestationConveyancePreference -> Text
encodeAttestationConveyancePreference AttestationConveyancePreference
T.AttestationConveyancePreferenceNone = Text
"none"
encodeAttestationConveyancePreference AttestationConveyancePreference
T.AttestationConveyancePreferenceIndirect = Text
"indirect"
encodeAttestationConveyancePreference AttestationConveyancePreference
T.AttestationConveyancePreferenceDirect = Text
"direct"
encodeAttestationConveyancePreference AttestationConveyancePreference
T.AttestationConveyancePreferenceEnterprise = Text
"enterprise"
decodeAttestationConveyancePreference :: Text -> Either Text T.AttestationConveyancePreference
decodeAttestationConveyancePreference :: Text -> Either Text AttestationConveyancePreference
decodeAttestationConveyancePreference Text
"none" = AttestationConveyancePreference
-> Either Text AttestationConveyancePreference
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AttestationConveyancePreference
T.AttestationConveyancePreferenceNone
decodeAttestationConveyancePreference Text
"indirect" = AttestationConveyancePreference
-> Either Text AttestationConveyancePreference
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AttestationConveyancePreference
T.AttestationConveyancePreferenceIndirect
decodeAttestationConveyancePreference Text
"direct" = AttestationConveyancePreference
-> Either Text AttestationConveyancePreference
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AttestationConveyancePreference
T.AttestationConveyancePreferenceDirect
decodeAttestationConveyancePreference Text
"enterprise" = AttestationConveyancePreference
-> Either Text AttestationConveyancePreference
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AttestationConveyancePreference
T.AttestationConveyancePreferenceEnterprise
decodeAttestationConveyancePreference Text
str = Text -> Either Text AttestationConveyancePreference
forall a b. a -> Either a b
Left (Text -> Either Text AttestationConveyancePreference)
-> Text -> Either Text AttestationConveyancePreference
forall a b. (a -> b) -> a -> b
$ Text
"Unknown AttestationConveyancePreference string: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
str
encodeAuthenticatorTransport :: T.AuthenticatorTransport -> Text
encodeAuthenticatorTransport :: AuthenticatorTransport -> Text
encodeAuthenticatorTransport AuthenticatorTransport
T.AuthenticatorTransportUSB = Text
"usb"
encodeAuthenticatorTransport AuthenticatorTransport
T.AuthenticatorTransportNFC = Text
"nfc"
encodeAuthenticatorTransport AuthenticatorTransport
T.AuthenticatorTransportBLE = Text
"ble"
encodeAuthenticatorTransport AuthenticatorTransport
T.AuthenticatorTransportInternal = Text
"internal"
encodeAuthenticatorTransport (T.AuthenticatorTransportUnknown Text
str) = Text
str
decodeAuthenticatorTransport :: Text -> T.AuthenticatorTransport
decodeAuthenticatorTransport :: Text -> AuthenticatorTransport
decodeAuthenticatorTransport Text
"usb" = AuthenticatorTransport
T.AuthenticatorTransportUSB
decodeAuthenticatorTransport Text
"nfc" = AuthenticatorTransport
T.AuthenticatorTransportNFC
decodeAuthenticatorTransport Text
"ble" = AuthenticatorTransport
T.AuthenticatorTransportBLE
decodeAuthenticatorTransport Text
"internal" = AuthenticatorTransport
T.AuthenticatorTransportInternal
decodeAuthenticatorTransport Text
str = Text -> AuthenticatorTransport
T.AuthenticatorTransportUnknown Text
str