wai-app-static 2.0.0.4 → 2.0.0.5
raw patch · 2 files changed
+68/−1 lines, 2 filesdep +cmdargsdep +wai-extradep +warpdep ~directorydep ~timedep ~wai-app-staticnew-component:exe:warp
Dependencies added: cmdargs, wai-extra, warp
Dependency ranges changed: directory, time, wai-app-static
Files
- app/warp-static.hs +53/−0
- wai-app-static.cabal +15/−1
+ app/warp-static.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}+import Network.Wai.Application.Static (staticApp, defaultFileServerSettings)+import Network.Wai.Handler.Warp+ ( runSettings, defaultSettings, settingsHost, settingsPort+ )+import System.Console.CmdArgs hiding (def)+import Text.Printf (printf)+import System.Directory (canonicalizePath)+import Control.Monad (unless)+import Network.Wai.Middleware.Autohead+import Network.Wai.Middleware.RequestLogger (logStdout)+import Network.Wai.Middleware.Gzip+import qualified Data.Map as Map+import qualified Data.ByteString.Char8 as S8+import Control.Arrow ((***))+import Data.Text (pack)+import Data.String (fromString)+import Network.Mime (defaultMimeMap, mimeByExt, defaultMimeType)+import WaiAppStatic.Types (ssIndices, toPiece, ssGetMimeType, fileName, fromPiece)+import Data.Maybe (mapMaybe)++data Args = Args+ { docroot :: FilePath+ , index :: [FilePath]+ , port :: Int+ , noindex :: Bool+ , quiet :: Bool+ , verbose :: Bool+ , mime :: [(String, String)]+ , host :: String+ }+ deriving (Show, Data, Typeable)++defaultArgs :: Args+defaultArgs = Args "." ["index.html", "index.htm"] 3000 False False False [] "*"++main :: IO ()+main = do+ Args {..} <- cmdArgs defaultArgs+ let mime' = map (pack *** S8.pack) mime+ let mimeMap = Map.fromList mime' `Map.union` defaultMimeMap+ docroot' <- canonicalizePath docroot+ unless quiet $ printf "Serving directory %s on port %d with %s index files.\n" docroot' port (if noindex then "no" else show index)+ let middle = gzip def { gzipFiles = GzipCompress }+ . (if verbose then logStdout else id)+ . autohead+ runSettings defaultSettings+ { settingsPort = port+ , settingsHost = fromString host+ } $ middle $ staticApp (defaultFileServerSettings $ fromString docroot)+ { ssIndices = if noindex then [] else mapMaybe (toPiece . pack) index+ , ssGetMimeType = return . mimeByExt mimeMap defaultMimeType . fromPiece . fileName+ }
wai-app-static.cabal view
@@ -1,5 +1,5 @@ name: wai-app-static-version: 2.0.0.4+version: 2.0.0.5 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -64,6 +64,20 @@ if flag(print) cpp-options: -DPRINT++Executable warp+ Main-is: warp-static.hs+ hs-source-dirs: app+ Build-depends: base >= 4 && < 5+ , warp >= 2.0 && < 2.2+ , wai-app-static >= 2.0 && < 2.1+ , wai-extra >= 2.0 && < 2.2+ , cmdargs >= 0.6.7+ , directory >= 1.0+ , containers >= 0.2+ , bytestring >= 0.9.1.4+ , text >= 0.7+ , mime-types >= 0.1 && < 0.2 test-suite runtests hs-source-dirs: test