smith-client-0.0.1: src/Smith/Client/Api.hs
-- |
-- Smith API definitions.
--
-- Should be used as a qualified import from top-level module:
--
-- > import qualified Smith.Client as Smith
--
-- Example:
-- > Smith.runRequest configuration Smith.userinfo
--
{-# LANGUAGE OverloadedStrings #-}
module Smith.Client.Api (
userinfo
, issue
, keys
) where
import qualified Network.HTTP.Types as HTTP
import Smith.Client.Data.Certificate
import Smith.Client.Data.CertificateAuthority
import Smith.Client.Data.CertificateRequest
import Smith.Client.Data.Environment
import Smith.Client.Data.User
import qualified Smith.Client.Response as Response
import Smith.Client.Request (Request (..))
import qualified Smith.Client.Request as Request
import qualified Smith.Client.Serial.Decode as Decode
import qualified Smith.Client.Serial.Encode as Encode
-- |
-- Obtain the identity information of the currently authenticated user or service.
--
userinfo :: Request UserInfo
userinfo =
Request HTTP.GET "userinfo"
(Response.json 200 Decode.userinfo)
Request.none
-- |
-- Issue a certificate for the specified request details.
--
issue :: CertificateRequest -> Request Certificate
issue request =
Request HTTP.POST "issue"
(Response.json 200 Decode.certificate)
(Request.json $ Encode.certificateRequest request)
-- |
-- Obtain all CA public keys for the specified environment.
--
keys :: Environment -> Request [AuthorityPublicKey]
keys environment =
Request HTTP.GET (mconcat ["environment/public-keys/", getEnvironment environment])
(Response.json 200 Decode.authorityPublicKeys)
Request.none