packages feed

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 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