module Paddle.Env where
import Prelude ()
import Protolude
import qualified OpenSSL as SSL
import qualified OpenSSL.EVP.PKey as SSL
import qualified OpenSSL.PEM as SSL
data PaddleSecrets = PaddleSecrets
{ PaddleSecrets -> Text
paddlePublicKey :: Text
, PaddleSecrets -> Text
paddleApiKey :: Text
, PaddleSecrets -> Int
paddleVendorId :: Int
} deriving (PaddleSecrets -> PaddleSecrets -> Bool
(PaddleSecrets -> PaddleSecrets -> Bool)
-> (PaddleSecrets -> PaddleSecrets -> Bool) -> Eq PaddleSecrets
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaddleSecrets -> PaddleSecrets -> Bool
$c/= :: PaddleSecrets -> PaddleSecrets -> Bool
== :: PaddleSecrets -> PaddleSecrets -> Bool
$c== :: PaddleSecrets -> PaddleSecrets -> Bool
Eq)
data Env = Env
{ Env -> SomePublicKey
pctxPubKey :: SSL.SomePublicKey
, Env -> Int
pctxVendorId :: Int
, Env -> Text
pctxApiKey :: Text
} deriving (Env -> Env -> Bool
(Env -> Env -> Bool) -> (Env -> Env -> Bool) -> Eq Env
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Env -> Env -> Bool
$c/= :: Env -> Env -> Bool
== :: Env -> Env -> Bool
$c== :: Env -> Env -> Bool
Eq)
init :: (MonadIO m) => PaddleSecrets -> m Env
init :: PaddleSecrets -> m Env
init PaddleSecrets
secrets = do
SomePublicKey
pubKey <- IO SomePublicKey -> m SomePublicKey
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SomePublicKey -> m SomePublicKey)
-> IO SomePublicKey -> m SomePublicKey
forall a b. (a -> b) -> a -> b
$ IO SomePublicKey -> IO SomePublicKey
forall a. IO a -> IO a
SSL.withOpenSSL (IO SomePublicKey -> IO SomePublicKey)
-> IO SomePublicKey -> IO SomePublicKey
forall a b. (a -> b) -> a -> b
$ String -> IO SomePublicKey
SSL.readPublicKey (Text -> String
forall a b. ConvertText a b => a -> b
toS (PaddleSecrets -> Text
paddlePublicKey PaddleSecrets
secrets))
Env -> m Env
forall (m :: * -> *) a. Monad m => a -> m a
return Env :: SomePublicKey -> Int -> Text -> Env
Env
{ pctxPubKey :: SomePublicKey
pctxPubKey = SomePublicKey
pubKey
, pctxVendorId :: Int
pctxVendorId = PaddleSecrets -> Int
paddleVendorId PaddleSecrets
secrets
, pctxApiKey :: Text
pctxApiKey = PaddleSecrets -> Text
paddleApiKey PaddleSecrets
secrets
}