space-0.1.0: src/Space/ModifiedTime.hs
module Space.ModifiedTime
( Modified(..)
, EpochTime
, getMTime
, formattedMTime
, modifiedSince
) where
import Data.ByteString (ByteString)
import System.Posix.Types (EpochTime)
import System.Posix.Files.ByteString
import Network.HTTP.Types
import Network.HTTP.Date
import Network.Wai (Request, requestHeaders)
data Modified = NotModified | Modified
getMTime :: ByteString -> IO EpochTime
getMTime = fmap modificationTime . getFileStatus
formattedMTime :: EpochTime -> ByteString
formattedMTime = formatHTTPDate . epochTimeToHTTPDate
modifiedSince :: Request -> EpochTime -> Modified
modifiedSince req mtime = case since of
Nothing -> Modified
Just rawReqTime -> case parseHTTPDate rawReqTime of
Nothing -> Modified
Just reqTime -> if reqTime < epochTimeToHTTPDate mtime
then Modified
else NotModified
where
since = lookup hIfModifiedSince (requestHeaders req)