{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-deprecations #-}
module Inferno.VersionControl.Server.UnzipRequest where
import Codec.Compression.GZip (decompress)
import qualified Data.ByteString.Lazy as BL
import Network.Wai
ungzipRequest :: Middleware
ungzipRequest :: Middleware
ungzipRequest Application
app Request
req = Application
app Request
req'
where
req' :: Request
req'
| Just ByteString
"gzip" <- forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup HeaderName
"Content-encoding" (Request -> RequestHeaders
requestHeaders Request
req) = Request -> Request
go Request
req
| Bool
otherwise = Request
req
go :: Request -> Request
go Request
r = Request
r {requestBody :: IO ByteString
requestBody = ByteString -> ByteString
decompressNonEmpty forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Request -> IO ByteString
strictRequestBody Request
r)}
decompressNonEmpty :: ByteString -> ByteString
decompressNonEmpty ByteString
"" = ByteString
""
decompressNonEmpty ByteString
x = ByteString -> ByteString
BL.toStrict forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
decompress forall a b. (a -> b) -> a -> b
$ ByteString
x