{-# LANGUAGE OverloadedStrings #-}
module AWS.Credentials (Credentials, accessKey, secretKey, newCredentials, lookupCredentials) where
import Data.Aeson (FromJSON (..), Value (..), (.:))
import qualified Data.Text as T
import System.Environment (lookupEnv)
{- | AWS Security credentials comprising of an access key ID and a secret key.
Temporary security tokens are not supported
-}
data Credentials = MkCredentials
{ accessKey :: !T.Text
, secretKey :: !T.Text
}
newCredentials ::
-- | Access Key
T.Text ->
-- | Secret Key
T.Text ->
Credentials
newCredentials = MkCredentials
{- | Use the provided environment variables to create
`Credentials`
-}
lookupCredentials ::
-- | Access Key environment variable
String ->
-- | Secret Key environment variable
String ->
IO (Maybe Credentials)
lookupCredentials akVar skVar = do
ak <- fmap T.pack <$> lookupEnv akVar
sk <- fmap T.pack <$> lookupEnv skVar
pure $ MkCredentials <$> ak <*> sk
instance FromJSON Credentials where
parseJSON (Object o) =
MkCredentials
<$> o .: "access-key"
<*> o .: "secret-key"
parseJSON _ = fail "Not a Credentials"