From 8a3d69a1366d6221634ec9433e720023f9dad804 Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Tue, 7 Jan 2020 14:15:43 -0700 Subject: [PATCH 1/2] strips gzip transfer encoding --- src/Application.hs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index 598e5d5..de9a8f5 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -28,22 +28,25 @@ module Application import Startlude -import Control.Monad.Logger (liftLoc, runLoggingT) +import Control.Monad.Logger (liftLoc, runLoggingT) import Data.Default import Data.IORef import Database.Persist.Sql -import Database.Persist.Sqlite (createSqlitePool, runSqlPool, sqlDatabase, sqlPoolSize) -import Language.Haskell.TH.Syntax (qLocation) +import Database.Persist.Sqlite (createSqlitePool, runSqlPool, sqlDatabase, sqlPoolSize) +import Language.Haskell.TH.Syntax (qLocation) import Network.Wai -import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException, - getPort, setHost, setOnException, setPort) +import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException, + getPort, setHost, setOnException, setPort) import Network.Wai.Handler.WarpTLS -import Network.Wai.Middleware.Cors (CorsResourcePolicy (..), cors, simpleCorsResourcePolicy) -import Network.Wai.Middleware.RequestLogger (Destination (Logger), IPAddrSource (..), OutputFormat (..), - destination, mkRequestLogger, outputFormat) -import System.Log.FastLogger (defaultBufSize, newStdoutLoggerSet, toLogStr) +import Network.Wai.Middleware.AcceptOverride +import Network.Wai.Middleware.Autohead +import Network.Wai.Middleware.Cors (CorsResourcePolicy (..), cors, simpleCorsResourcePolicy) +import Network.Wai.Middleware.MethodOverride +import Network.Wai.Middleware.RequestLogger (Destination (Logger), IPAddrSource (..), OutputFormat (..), + destination, mkRequestLogger, outputFormat) +import System.Log.FastLogger (defaultBufSize, newStdoutLoggerSet, toLogStr) import Yesod.Core -import Yesod.Core.Types hiding (Logger) +import Yesod.Core.Types hiding (Logger) import Yesod.Default.Config2 import Yesod.Persist.Core @@ -109,7 +112,7 @@ makeApplication foundation = do let authWare = makeAuthWare foundation -- Create the WAI application and apply middlewares appPlain <- toWaiAppPlain foundation - pure . logWare . cors (const . Just $ policy) . authWare . defaultMiddlewaresNoLogging $ appPlain + pure . logWare . cors (const . Just $ policy) . authWare . acceptOverride . autohead . methodOverride $ appPlain where policy = simpleCorsResourcePolicy { corsMethods = ["GET", "HEAD", "OPTIONS", "POST", "PATCH", "PUT", "DELETE"], corsRequestHeaders = ["app-version", "Content-Type", "Authorization"] } From d6a5d980cc4341572a59baffaf66e0ef9d8f13b0 Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Tue, 7 Jan 2020 14:34:34 -0700 Subject: [PATCH 2/2] manually set content length --- src/Handler/Apps.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Handler/Apps.hs b/src/Handler/Apps.hs index bc17f55..2da2526 100644 --- a/src/Handler/Apps.hs +++ b/src/Handler/Apps.hs @@ -24,6 +24,7 @@ import Lib.Registry import Lib.Semver import Lib.Types.Semver import System.FilePath ((<.>)) +import System.Posix.Files (fileSize, getFileStatus) pureLog :: Show a => a -> Handler a pureLog = liftA2 (*>) ($logInfo . show) pure @@ -58,7 +59,10 @@ getApp rootDir ext = do Just (RegisteredAppVersion (_, filePath)) -> do exists <- liftIO $ doesFileExist filePath if exists - then respondSource typePlain $ CB.sourceFile filePath .| awaitForever sendChunkBS + then do + sz <- liftIO $ fileSize <$> getFileStatus filePath + addHeader "Content-Length" (show sz) + respondSource typePlain $ CB.sourceFile filePath .| awaitForever sendChunkBS else notFound