-- 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.1.0 module Gamgee.Effects.ByteStore data ByteStore m a [ReadByteStore] :: ByteStore m (Maybe LByteString) [WriteByteStore] :: LByteString -> ByteStore m () readByteStore :: forall r_abT2. MemberWithError ByteStore r_abT2 => Sem r_abT2 (Maybe ByteString) writeByteStore :: forall r_abT3. MemberWithError ByteStore r_abT3 => LByteString -> Sem r_abT3 () 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_agni a_agl6. (MemberWithError CryptoRandom r_agni, ByteArray a_agl6) => Int -> Sem r_agni a_agl6 runCryptoRandomIO :: Member (Lift 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 a_agDE r_agG5. MemberWithError (SecretInput a_agDE) r_agG5 => Text -> Sem r_agG5 a_agDE runSecretInputIO :: Member (Lift 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_at4y r_at64. MemberWithError (JSONStore o_at4y) r_at64 => o_at4y -> Sem r_at64 () jsonDecode :: forall a_at4A r_at66. MemberWithError (JSONStore a_at4A) r_at66 => Sem r_at66 a_at4A -- | 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 [GetTOTP] :: TokenSpec -> POSIXTime -> TOTP m Text getTOTP :: forall r_awnz. MemberWithError TOTP r_awnz => TokenSpec -> POSIXTime -> Sem r_awnz 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 ()