-- 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.0 module Gamgee.Effects.ByteStore data ByteStore m a [ReadByteStore] :: ByteStore m (Maybe LByteString) [WriteByteStore] :: LByteString -> ByteStore m () readByteStore :: forall r_abQZ. MemberWithError ByteStore r_abQZ => Sem r_abQZ (Maybe LByteString) writeByteStore :: forall r_abR0. MemberWithError ByteStore r_abR0 => LByteString -> Sem r_abR0 () 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_aglU b_agjJ. (MemberWithError CryptoRandom r_aglU, ByteArray b_agjJ) => Int -> Sem r_aglU b_agjJ 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_agCh r_agEH. MemberWithError (SecretInput i_agCh) r_agEH => Text -> Sem r_agEH i_agCh 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 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.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.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.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 GHC.Show.Show Gamgee.Token.TokenDigits 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 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.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.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 GHC.Show.Show Gamgee.Token.TokenType 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_at3i r_at4L. MemberWithError (JSONStore o_at3i) r_at4L => o_at3i -> Sem r_at4L () jsonDecode :: forall o_at3k r_at4N. MemberWithError (JSONStore o_at3k) r_at4N => Sem r_at4N o_at3k -- | 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_awmN. MemberWithError TOTP r_awmN => TokenSpec -> Sem r_awmN Text getTOTP :: forall r_awmP. MemberWithError TOTP r_awmP => TokenSpec -> POSIXTime -> Sem r_awmP 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 ()