{-# LANGUAGE OverloadedStrings #-}
module BDCS.RPM.Signatures(mkRSASignature,
mkSHASignature)
where
import Codec.RPM.Tags(Tag, findTag, tagValue)
import qualified Data.ByteString as BS
import Data.ByteString.Char8(pack)
import Database.Esqueleto
import BDCS.DB(Builds, BuildSignatures(..))
import BDCS.Exceptions(DBException(..), throwIfNothing)
mkRSASignature :: [Tag] -> Key Builds -> BuildSignatures
mkRSASignature tags buildId = let
rsaSig = getRSASig `throwIfNothing` MissingRPMTag "RSAHeader"
in
BuildSignatures buildId "RSA" rsaSig
where
getRSASig = findTag "RSAHeader" tags >>= \t -> tagValue t :: Maybe BS.ByteString
mkSHASignature :: [Tag] -> Key Builds -> BuildSignatures
mkSHASignature tags buildId = let
shaSig = getSHASig `throwIfNothing` MissingRPMTag "SHA1Header"
in
BuildSignatures buildId "SHA1" shaSig
where
getSHASig = findTag "SHA1Header" tags >>= \t -> (tagValue t :: Maybe String) >>= Just . pack