-- | Internal module. module Network.Hawk.Internal.Client.HeaderParser ( parseWwwAuthenticateHeader , parseServerAuthorizationHeader , WwwAuthenticateHeader(..) , ServerAuthorizationHeader(..) ) where import Data.ByteString (ByteString) import Data.Time.Clock.POSIX (POSIXTime) import Network.Hawk.Types import Control.Monad (join) import Network.Hawk.Util parseWwwAuthenticateHeader :: ByteString -> Either String WwwAuthenticateHeader parseWwwAuthenticateHeader = fmap snd . parseHeader wwwKeys wwwAuthHeader parseServerAuthorizationHeader :: ByteString -> Either String ServerAuthorizationHeader parseServerAuthorizationHeader = fmap snd . parseHeader serverKeys serverAuthReplyHeader wwwKeys = ["error", "tsm", "ts"] serverKeys = ["mac", "ext", "hash"] wwwAuthHeader :: AuthAttrs -> Either String WwwAuthenticateHeader wwwAuthHeader m = do err <- authAttr m "error" case authAttrMaybe m "ts" of Just ts' -> do ts <- readTs ts' tsm <- authAttr m "tsm" return $ WwwAuthenticateHeader err (Just ts) (Just tsm) Nothing -> return $ WwwAuthenticateHeader err Nothing Nothing serverAuthReplyHeader :: AuthAttrs -> Either String ServerAuthorizationHeader serverAuthReplyHeader m = do mac <- authAttr m "mac" let hash = authAttrMaybe m "hash" let ext = authAttrMaybe m "ext" return $ ServerAuthorizationHeader mac hash ext