|
@@ -9,7 +9,8 @@ import qualified Data.Attoparsec.ByteString as BA
|
|
|
|
|
|
import qualified Data.ByteString as BS
|
|
|
import qualified Data.ByteString.Lazy as LBS
|
|
|
-import Data.ByteString.Base64 as Base64
|
|
|
+import qualified Data.ByteString.Base64 as Base64
|
|
|
+import qualified Data.ByteString.Base64.URL as Base64url
|
|
|
import qualified Text.StringConvert as SC
|
|
|
import Text.Read (readMaybe)
|
|
|
|
|
@@ -41,7 +42,7 @@ makeHeader k v = Header k v . SC.s $ k ++ ": " ++ v ++ "\r\n"
|
|
|
|
|
|
-- | True if the header key matches
|
|
|
hasKey :: String -> Header -> Bool
|
|
|
-hasKey k h = map C.toLower k == key h
|
|
|
+hasKey k h = map C.toLower k == (map C.toLower $ key h)
|
|
|
|
|
|
-- | Retrieves a single header with the given key
|
|
|
getHeader :: [Header] -> String -> Maybe Header
|
|
@@ -67,6 +68,12 @@ getBase64Header hh s = getHeaderValue hh s >>= (rightToJust . Base64.decode . SC
|
|
|
where
|
|
|
rightToJust = either (\_ -> Nothing) Just
|
|
|
|
|
|
+-- | Retrieves the binary value of a base64url encoded header
|
|
|
+getBase64urlHeader :: [Header] -> String -> Maybe BS.ByteString
|
|
|
+getBase64urlHeader hh s = getHeaderValue hh s >>= (rightToJust . Base64url.decode . SC.s)
|
|
|
+ where
|
|
|
+ rightToJust = either (\_ -> Nothing) Just
|
|
|
+
|
|
|
-- | Gets the reader value, and converts it with readMaybe
|
|
|
getReadHeader :: Read a => [Header] -> String -> Maybe a
|
|
|
getReadHeader hh s = getHeaderValue hh s >>= readMaybe
|
|
@@ -93,11 +100,11 @@ addressHeader = "fCMTP-Address"
|
|
|
|
|
|
-- | Retrieves the meta information from resource headers
|
|
|
resourceInfo :: PlainHeaders -> ResourceInfo
|
|
|
-resourceInfo (PlainHeaders _ ss _) = let
|
|
|
+resourceInfo (PlainHeaders pp ss _) = let
|
|
|
(mimet, mimep) = fromMaybe (def, def) $ getHeaderValue ss Mime.contentTypeHeaderName >>= bparse PMime.parseContentType
|
|
|
curr = fromMaybe URI.NoRevision $ URI.Revision <$> getHeaderValue ss revisionHeader
|
|
|
bb = map URI.Revision $ getMultipleValue ss baseHeader
|
|
|
- uu = catMaybes . map (bparse URI.parseURI) $ getMultipleValue ss addressHeader
|
|
|
+ uu = catMaybes . map (bparse URI.parseURI) $ getMultipleValue pp addressHeader
|
|
|
in ResourceInfo mimet mimep curr bb uu
|
|
|
where
|
|
|
bparse :: BA.Parser a -> String -> Maybe a
|