packages feed

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)