powerdns-0.4.4: PowerDNS/API/Cryptokeys.hs
-- |
-- Module: PowerDNS.API.Cryptokeys
-- Description: Cryptokeys endpoints for PowerDNS API
--
-- This module implements the endpoints described at [Cryptokeys API](https://doc.powerdns.com/authoritative/http-api/cryptokey.html)
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TemplateHaskell #-}
module PowerDNS.API.Cryptokeys
(
-- * API
CryptokeysAPI(..)
-- * Data types
, Cryptokey(..)
)
where
import Data.Data (Data)
import Control.DeepSeq (NFData)
import Data.Aeson.TH (defaultOptions,
fieldLabelModifier,
deriveJSON)
import qualified Data.Text as T
import Servant.API
import Servant.API.Generic
import PowerDNS.Internal.Utils (Empty(..), strip)
data CryptokeysAPI f = CryptokeysAPI
{ apiListCryptokeys :: f :- Summary "List cryptokeys"
:> "servers" :> Capture "server_id" T.Text :> "zones" :> Capture "zone_id" T.Text :> "cryptokeys"
:> Get '[JSON] [Cryptokey]
, apiCreateCryptokey :: f :- Summary "Create cryptokey"
:> "servers" :> Capture "server_id" T.Text :> "zones" :> Capture "zone_id" T.Text :> "cryptokeys"
:> ReqBody '[JSON] Cryptokey
:> PostCreated '[JSON] Cryptokey
, apiGetCryptokey :: f :- Summary "Get cryptokey"
:> "servers" :> Capture "server_id" T.Text :> "zones" :> Capture "zone_id" T.Text :> "cryptokeys" :> Capture "cryptokey_id" T.Text
:> Get '[JSON] Cryptokey
, apiUpdateCryptokey :: f :- Summary "Update cryptokey"
:> "servers" :> Capture "server_id" T.Text :> "zones" :> Capture "zone_id" T.Text :> "cryptokeys" :> Capture "cryptokey_id" T.Text
:> ReqBody '[JSON] Cryptokey
:> PutNoContent
, apiDeleteCryptokey :: f :- Summary "Delete cryptokey"
:> "servers" :> Capture "server_id" T.Text :> "zones" :> Capture "zone_id" T.Text :> "cryptokeys" :> Capture "cryptokey_id" T.Text
:> DeleteNoContent
} deriving Generic
----------------------------------------------------------------------------------------
data Cryptokey = Cryptokey
{ ck_type :: Maybe T.Text
, ck_id :: Maybe Integer
, ck_keytype :: Maybe T.Text
, ck_active :: Maybe Bool
, ck_published :: Maybe Bool
, ck_dnskey :: Maybe T.Text
, ck_ds :: Maybe [T.Text]
, ck_privatekey :: Maybe T.Text
, ck_algorithm :: Maybe T.Text
, ck_bits :: Maybe Integer
} deriving (Eq, Ord, Read, Show, Generic, NFData, Data, Empty)
$(deriveJSON defaultOptions { fieldLabelModifier = strip "ck_"} ''Cryptokey)