{-# LANGUAGE OverloadedStrings #-}

module Network.DomainAuth.DK.Types where

import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.Map as M
import Network.DNS
import Network.DomainAuth.Mail

----------------------------------------------------------------

{-|
  Canonicalized key for DomainKey-Signature:.
-}
dkFieldKey :: CanonFieldKey
dkFieldKey = "domainkey-signature"

----------------------------------------------------------------

data DkAlgorithm = DK_RSA_SHA1 deriving (Eq,Show)
data DkCanonAlgo = DK_SIMPLE | DK_NOFWS deriving (Eq,Show)
--data DkQuery = DK_DNS deriving (Eq,Show)
type DkFields = M.Map L.ByteString Bool -- Key Bool

{-|
  Abstract type for DomainKey-Signature:
-}

data DK = DK {
    dkAlgorithm :: DkAlgorithm
  , dkSignature :: L.ByteString
  , dkCanonAlgo :: DkCanonAlgo
  , dkDomain0   :: L.ByteString
  , dkFields    :: Maybe DkFields
--  , dkQuery     :: Maybe DkQuery -- gmail does not provide, sigh
  , dkSelector0 :: L.ByteString
  } deriving (Eq,Show)

{-|
  Getting of the value of the \"d\" tag in DomainKey-Signature:.
-}
dkDomain :: DK -> Domain
dkDomain = L.unpack . dkDomain0

{-|
  Getting of the value of the \"s\" tag in DomainKey-Signature:.
-}
dkSelector :: DK -> String
dkSelector = L.unpack . dkSelector0