hack-contrib-2009.4.52: src/Hack/Contrib/Middleware/ETag.hs
-- | Stolen from rack-contrib: Automatically sets the ETag header on all String bodies
module Hack.Contrib.Middleware.ETag (etag) where
import Hack
import Hack.Contrib.Utils
import Hack.Contrib.Response
import Hack.Contrib.Constants
import MPSUTF8
import Prelude hiding ((.), (^), (>))
import Data.Digest.Pure.MD5
import Data.ByteString.Lazy.Char8 as C
etag :: Middleware
etag app = \env -> do
r <- app env
if r.has_header _ETag
then r.return
else r.set_header _ETag (r.tag) .return
where
tag =
body
> C.pack
> md5
> show