docusign-client-0.0.1: src/DocuSign/Client/Authentication.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module DocuSign.Client.Authentication
( AuthenticationHeader (..)
, authenticationHeaderKey
) where
import Data.Aeson ( FromJSON
, ToJSON
, defaultOptions
, genericParseJSON
, genericToJSON
, parseJSON
, toJSON )
import Data.UUID ( UUID )
import Data.Text ( Text )
import DocuSign.Base.Fields ( modifyFieldLabel )
import GHC.Generics ( Generic )
import Network.HTTP.Types.Header ( HeaderName )
data AuthenticationHeader = AuthenticationHeader
{ authenticationHeaderIntegratorKey :: UUID
, authenticationHeaderUsername :: Text
, authenticationHeaderPassword :: Text
} deriving (Show, Eq, Generic)
-- In the JSON serialization of an AuthenticationHeader, field names must start
-- with a capital letter, which is against the normal convention. Hence we must
-- define custom implementations of FromJSON and ToJSON:
instance FromJSON AuthenticationHeader where
parseJSON = genericParseJSON
$ modifyFieldLabel (dropLength "authenticationHeader")
$ defaultOptions
instance ToJSON AuthenticationHeader where
toJSON = genericToJSON
$ modifyFieldLabel (dropLength "authenticationHeader")
$ defaultOptions
authenticationHeaderKey :: HeaderName
authenticationHeaderKey = "X-DocuSign-Authentication"
dropLength :: String -> String -> String
dropLength = drop . length