-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Tool for generating TOTP MFA tokens. -- -- Tool for generating TOTP MFA tokens. Please see the README on GitHub -- at https://github.com/rkaippully/gamgee#readme @package gamgee @version 1.2.2 module Gamgee.Effects.ByteStore data ByteStore m a [ReadByteStore] :: ByteStore m (Maybe LByteString) [WriteByteStore] :: LByteString -> ByteStore m () readByteStore :: forall r_a8zC. MemberWithError ByteStore r_a8zC => Sem r_a8zC (Maybe LByteString) writeByteStore :: forall r_a8zD. MemberWithError ByteStore r_a8zD => LByteString -> Sem r_a8zD () module Gamgee.Effects.CryptoRandom -- | An effect capable of providing random bytes for use with cryptonite data CryptoRandom m a -- | Generate random bytes [RandomBytes] :: ByteArray b => Int -> CryptoRandom m b randomBytes :: forall r_ab1S b_ab0q. (MemberWithError CryptoRandom r_ab1S, ByteArray b_ab0q) => Int -> Sem r_ab1S b_ab0q runCryptoRandomIO :: Member (Embed IO) r => Sem (CryptoRandom : r) a -> Sem r a module Gamgee.Effects.SecretInput -- | An effect that provides input to the application. Intended to be used -- in contexts where the input is a secret such as passwords. -- Interpretations may chose to "protect" the input appropriately. For -- example, an IO interpretation may chose not to echo the input to the -- console. data SecretInput i m a -- | Retrieve a secret input [SecretInput] :: Text -> SecretInput i m i secretInput :: forall i_abeS r_abfS. MemberWithError (SecretInput i_abeS) r_abfS => Text -> Sem r_abfS i_abeS runSecretInputIO :: Member (Embed IO) r => Sem (SecretInput Text : r) a -> Sem r a -- | Data structures to define and manipulate tokens module Gamgee.Token -- | Type of token TOTP or HOTP (not supported yet) data TokenType TOTP :: TokenType -- | Label of the token newtype TokenLabel TokenLabel :: Text -> TokenLabel [unTokenLabel] :: TokenLabel -> Text -- | Secret used to generate OTPs data TokenSecret TokenSecretPlainText :: Text -> TokenSecret TokenSecretAES256 :: Text -> Text -> TokenSecret [tokenSecretAES256IV] :: TokenSecret -> Text [tokenSecretAES256Data] :: TokenSecret -> Text -- | Optional issuer of this token newtype TokenIssuer TokenIssuer :: Text -> TokenIssuer [unTokenIssuer] :: TokenIssuer -> Text data TokenAlgorithm AlgorithmSHA1 :: TokenAlgorithm AlgorithmSHA256 :: TokenAlgorithm AlgorithmSHA512 :: TokenAlgorithm data TokenDigits Digits6 :: TokenDigits Digits8 :: TokenDigits -- | Refresh interval of the token in seconds newtype TokenPeriod TokenPeriod :: Word16 -> TokenPeriod [unTokenPeriod] :: TokenPeriod -> Word16 data TokenSpec TokenSpec :: TokenType -> TokenLabel -> TokenSecret -> TokenIssuer -> TokenAlgorithm -> TokenDigits -> TokenPeriod -> TokenSpec -- | TOTP/HOTP token [tokenType] :: TokenSpec -> TokenType -- | A short unique label for this token used to identify it [tokenLabel] :: TokenSpec -> TokenLabel -- | The secret provided by the issuer to generate tokens [tokenSecret] :: TokenSpec -> TokenSecret -- | The name of the issuer [tokenIssuer] :: TokenSpec -> TokenIssuer -- | SHA algorithm used to generate tokens [tokenAlgorithm] :: TokenSpec -> TokenAlgorithm -- | Number of digits in the token - 6 or 8 [tokenDigits] :: TokenSpec -> TokenDigits -- | Refresh interval of the token - typically 30 sec [tokenPeriod] :: TokenSpec -> TokenPeriod newtype TokenIdentifier TokenIdentifier :: Text -> TokenIdentifier [unTokenIdentifier] :: TokenIdentifier -> Text type Tokens = HashMap TokenIdentifier TokenSpec data Config Config :: Word32 -> Tokens -> Config [configVersion] :: Config -> Word32 [configTokens] :: Config -> Tokens getIdentifier :: TokenSpec -> TokenIdentifier currentConfigVersion :: Word32 initialConfig :: Config instance GHC.Show.Show Gamgee.Token.TokenType instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenLabel instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenLabel instance Data.String.IsString Gamgee.Token.TokenLabel instance GHC.Show.Show Gamgee.Token.TokenLabel instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenSecret instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenSecret instance GHC.Generics.Generic Gamgee.Token.TokenSecret instance GHC.Show.Show Gamgee.Token.TokenSecret instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenIssuer instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenIssuer instance Data.String.IsString Gamgee.Token.TokenIssuer instance GHC.Show.Show Gamgee.Token.TokenIssuer instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenAlgorithm instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenAlgorithm instance GHC.Generics.Generic Gamgee.Token.TokenAlgorithm instance GHC.Show.Show Gamgee.Token.TokenAlgorithm instance GHC.Show.Show Gamgee.Token.TokenDigits instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenPeriod instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenPeriod instance GHC.Show.Show Gamgee.Token.TokenPeriod instance GHC.Real.Integral Gamgee.Token.TokenPeriod instance GHC.Real.Real Gamgee.Token.TokenPeriod instance GHC.Num.Num Gamgee.Token.TokenPeriod instance GHC.Enum.Enum Gamgee.Token.TokenPeriod instance GHC.Classes.Ord Gamgee.Token.TokenPeriod instance GHC.Classes.Eq Gamgee.Token.TokenPeriod instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenSpec instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenSpec instance GHC.Show.Show Gamgee.Token.TokenSpec instance GHC.Generics.Generic Gamgee.Token.TokenSpec instance Data.Aeson.Types.ToJSON.ToJSONKey Gamgee.Token.TokenIdentifier instance Data.Aeson.Types.FromJSON.FromJSONKey Gamgee.Token.TokenIdentifier instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenIdentifier instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenIdentifier instance Relude.String.Conversion.ToString Gamgee.Token.TokenIdentifier instance GHC.Base.Semigroup Gamgee.Token.TokenIdentifier instance Data.String.IsString Gamgee.Token.TokenIdentifier instance Data.Hashable.Class.Hashable Gamgee.Token.TokenIdentifier instance GHC.Show.Show Gamgee.Token.TokenIdentifier instance GHC.Classes.Eq Gamgee.Token.TokenIdentifier instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.Config instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.Config instance GHC.Generics.Generic Gamgee.Token.Config instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenDigits instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenDigits instance Data.Aeson.Types.FromJSON.FromJSON Gamgee.Token.TokenType instance Data.Aeson.Types.ToJSON.ToJSON Gamgee.Token.TokenType module Gamgee.Effects.Error -- | Errors returned by Gamgee effects data EffError AlreadyExists :: TokenIdentifier -> EffError NoSuchToken :: TokenIdentifier -> EffError CryptoError :: CryptoError -> EffError CorruptIV :: ByteString -> EffError CorruptBase64Encoding :: Text -> EffError SecretDecryptError :: Text -> EffError InvalidTokenPeriod :: TokenPeriod -> EffError UnsupportedConfigVersion :: Word32 -> EffError JSONDecodeError :: Text -> EffError instance GHC.Classes.Eq Gamgee.Effects.Error.EffError instance GHC.Show.Show Gamgee.Effects.Error.EffError module Gamgee.Effects.JSONStore data JSONStore o m a [JsonEncode] :: o -> JSONStore o m () [JsonDecode] :: JSONStore o m o jsonEncode :: forall o_amaJ r_amcb. MemberWithError (JSONStore o_amaJ) r_amcb => o_amaJ -> Sem r_amcb () jsonDecode :: forall o_amaL r_amcd. MemberWithError (JSONStore o_amaL) r_amcd => Sem r_amcd o_amaL -- | Reinterprets a JSONStore as a ByteStore runJSONStore :: Member (Error EffError) r => Sem (JSONStore Tokens : r) a -> Sem (ByteStore : r) a configStoreToByteStore :: Member (Error EffError) r => Sem (JSONStore Config : r) a -> Sem (ByteStore : r) a -- | Cryptographic effect for securing tokens module Gamgee.Effects.Crypto -- | Effect for encrypting and decrypting secrets data Crypto m a -- | Encrypts a secret with an optional password [Encrypt] :: Text -> Text -> Crypto m TokenSecret -- | Decrypt a secret with an optional password [Decrypt] :: Text -> Text -> Text -> Crypto m Text encryptSecret :: Members [SecretInput Text, Crypto] r => TokenSpec -> Sem r TokenSpec decryptSecret :: Members [SecretInput Text, Crypto] r => TokenSpec -> Sem r Text runCrypto :: Members [CryptoRandom, Error EffError] r => Sem (Crypto : r) a -> Sem r a module Gamgee.Effects.TOTP data TOTP m a [GetSecret] :: TokenSpec -> TOTP m Text [GetTOTP] :: TokenSpec -> POSIXTime -> TOTP m Text getSecret :: forall r_aoHE. MemberWithError TOTP r_aoHE => TokenSpec -> Sem r_aoHE Text getTOTP :: forall r_aoHG. MemberWithError TOTP r_aoHG => TokenSpec -> POSIXTime -> Sem r_aoHG Text runTOTP :: Members [SecretInput Text, Crypto, Error EffError] r => Sem (TOTP : r) a -> Sem r a module Gamgee.Effects runStateJSON :: Sem (State o : r) a -> Sem (JSONStore o : r) a module Gamgee.Operation addToken :: Members [State Tokens, Crypto, SecretInput Text, Error EffError] r => TokenSpec -> Sem r () deleteToken :: Members [State Tokens, Error EffError] r => TokenIdentifier -> Sem r () listTokens :: Members [State Tokens, Output Text] r => Sem r () getOTP :: Members [State Tokens, Error EffError, Output Text, TOTP] r => TokenIdentifier -> POSIXTime -> Sem r () getInfo :: Members [Input FilePath, Output Value] r => Sem r (Maybe Config) -> Sem r () changePassword :: Members [State Tokens, SecretInput Text, Crypto, TOTP, Error EffError] r => TokenIdentifier -> Sem r ()