Skip to content

Commit d03fee0

Browse files
committed
Fix gzip for CBOR
1 parent f81261e commit d03fee0

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/Share.hs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import Network.Wai.Internal qualified as Wai
3232
import Network.Wai.Middleware.Cors
3333
import Network.Wai.Middleware.Gzip qualified as Gzip
3434
import Network.Wai.Middleware.RequestLogger (logStdoutDev)
35-
import Network.Wai.Middleware.Routed (routedMiddleware)
3635
import Servant
3736
import Share.App
3837
import Share.BackgroundJobs qualified as BackgroundJobs
@@ -123,14 +122,19 @@ mkShareServer env = do
123122
appServer reqTagsKey
124123
& hoistServerWithContext appAPI ctxType (toServantHandler env)
125124
& serveWithContext appAPI ctx
126-
& reqLoggerMiddleware
127125
& requestIDMiddleware
128126
& requestMetricsMiddleware Web.api
129127
& metricsMiddleware
130128
& skipOnLocal corsMiddleware
131-
& gzipMiddleware
129+
& Gzip.gzip gzipSettings
130+
& reqLoggerMiddleware
132131
pure waiApp
133132
where
133+
gzipSettings =
134+
Gzip.def
135+
{ Gzip.gzipFiles = Gzip.GzipCompress,
136+
Gzip.gzipCheckMime = \mime -> Gzip.defaultCheckMime mime || mime == "application/cbor"
137+
}
134138
ctxType = Proxy @(AuthCheckCtx .++ '[Cookies.CookieSettings, JWT.JWTSettings])
135139
uriFromReq req =
136140
(Env.apiOrigin env)
@@ -216,19 +220,6 @@ mkShareServer env = do
216220
appAPI = Proxy
217221
skipOnLocal :: Middleware -> Middleware
218222
skipOnLocal m = if Deployment.onLocal then id else m
219-
gzipMiddleware =
220-
-- Only apply gzipping on subsections of the api which tend to have sufficiently
221-
-- large payloads. Gzipping small payloads is a waste of time and might actually
222-
-- inflate them.
223-
-- Normally this would be done by looking at Content-Length headers, but Wai sends
224-
-- responses in the 'chunked' format and doesn't usually provide a Content-Length.
225-
flip routedMiddleware (Gzip.gzip Gzip.def) \case
226-
("codebases" : _) -> True
227-
("search" : _) -> True
228-
("sync" : _) -> True
229-
("ucm" : "v1" : "sync" : _) -> True
230-
("ucm" : "v2" : "sync" : _) -> True
231-
_ -> False
232223
corsPolicy :: Request -> Maybe CorsResourcePolicy
233224
corsPolicy req = case Deployment.deployment of
234225
Deployment.Local -> Nothing
@@ -326,7 +317,10 @@ verboseRequestResponseLogger app req responder = do
326317
case requestBodyLength req of
327318
ChunkedBody -> putStrLn "Request Body: Unknown Size"
328319
KnownLength wo -> putStrLn $ "Request Body: " <> show wo <> " bytes"
320+
putStrLn $ "Request Headers: " <> show (requestHeaders req)
329321
logStdoutDev app req $ \resp -> do
322+
-- Response headers
323+
putStrLn $ "Response Headers: " <> show (responseHeaders resp)
330324
BL.putStr $ "Response Body: "
331325
case resp of
332326
Wai.ResponseFile _ _ filePath _ -> putStrLn $ "<ResponseFile: " <> filePath <> ">"

0 commit comments

Comments
 (0)