Seal.hs 955 B

12345678910111213141516171819202122232425262728
  1. module Data.SMTP.Parser.Seal (
  2. --parseRcptSeal, parseRcptSealParam, SealAttribute,
  3. headersToSeal) where
  4. import Data.SMTP.Types.Seal
  5. import Data.SMTP.Types.Resource
  6. import qualified Data.ByteString.Base64 as B64
  7. import qualified Data.ByteString.Char8 as C8
  8. import Data.ByteString (ByteString)
  9. headersToSeal :: [Header] -> Maybe Seal
  10. headersToSeal hh = let
  11. mycp = decode2maybe =<< getH hh cpHeaderName
  12. mynonce = decode2maybe =<< getH hh nonceHeaderName
  13. mycode = decode2maybe =<< getH hh sealHeaderName
  14. in do
  15. cp' <- mycp
  16. code' <- mycode
  17. Just $ Seal cp' code' mynonce
  18. where
  19. getH :: [Header] -> String -> Maybe ByteString
  20. getH hh' h = C8.pack <$> getHeaderValue hh' h
  21. either2maybef :: (a -> Either b c) -> a -> Maybe c
  22. either2maybef f v = either2maybe $ f v
  23. either2maybe :: Either a b -> Maybe b
  24. either2maybe (Left _) = Nothing
  25. either2maybe (Right v) = Just v
  26. decode2maybe = either2maybef B64.decode