Hello community, here is the log from the commit of package ghc-wai-extra for openSUSE:Factory checked in at 2015-08-05 06:50:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-wai-extra (Old) and /work/SRC/openSUSE:Factory/.ghc-wai-extra.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-wai-extra" Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-wai-extra/ghc-wai-extra.changes 2015-07-16 17:19:00.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-wai-extra.new/ghc-wai-extra.changes 2015-08-05 06:50:57.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Jul 27 08:03:04 UTC 2015 - mimi...@gmail.com + +- update to 3.0.10 +* Network.Wai.Middleware.Routed module added +* Adding Request Body to RequestLogger + +------------------------------------------------------------------- Old: ---- wai-extra-3.0.8.2.tar.gz New: ---- wai-extra-3.0.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-wai-extra.spec ++++++ --- /var/tmp/diff_new_pack.MTZ9Ht/_old 2015-08-05 06:50:58.000000000 +0200 +++ /var/tmp/diff_new_pack.MTZ9Ht/_new 2015-08-05 06:50:58.000000000 +0200 @@ -21,7 +21,7 @@ %bcond_with tests Name: ghc-wai-extra -Version: 3.0.8.2 +Version: 3.0.10 Release: 0 Summary: Provides some basic WAI handlers and middleware License: MIT ++++++ wai-extra-3.0.8.2.tar.gz -> wai-extra-3.0.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.8.2/ChangeLog.md new/wai-extra-3.0.10/ChangeLog.md --- old/wai-extra-3.0.8.2/ChangeLog.md 2015-07-09 20:35:55.000000000 +0200 +++ new/wai-extra-3.0.10/ChangeLog.md 2015-07-24 19:15:26.000000000 +0200 @@ -1,3 +1,11 @@ +## 3.0.10 + +* Adding Request Body to RequestLogger [#401](https://github.com/yesodweb/wai/pull/401) + +## 3.0.9 + +* Network.Wai.Middleware.Routed module added + ## 3.0.7 * Add appearsSecure: check if a request appears to be using SSL even in the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.8.2/Network/Wai/Middleware/RequestLogger.hs new/wai-extra-3.0.10/Network/Wai/Middleware/RequestLogger.hs --- old/wai-extra-3.0.8.2/Network/Wai/Middleware/RequestLogger.hs 2015-07-09 20:35:55.000000000 +0200 +++ new/wai-extra-3.0.10/Network/Wai/Middleware/RequestLogger.hs 2015-07-24 19:15:26.000000000 +0200 @@ -44,6 +44,7 @@ import Data.Default.Class (Default (def)) import Network.Wai.Logger import Network.Wai.Middleware.RequestLogger.Internal +import Data.Text.Encoding (decodeUtf8') data OutputFormat = Apache IPAddrSource | Detailed Bool -- ^ use colors? @@ -222,6 +223,8 @@ return (req', body) _ -> return (req, []) + let reqbodylog _ = if null body then [""] else ansiColor White " Request Body: " <> body <> ["\n"] + reqbody = concatMap (either (const [""]) reqbodylog . decodeUtf8') body postParams <- if requestMethod req `elem` ["GET", "HEAD"] then return [] else do postParams <- liftIO $ allPostParams body @@ -247,7 +250,7 @@ -- log the status of the response cb $ mconcat $ map toLogStr $ ansiMethod (requestMethod req) ++ [" ", rawPathInfo req, "\n"] ++ - params ++ + params ++ reqbody ++ ansiColor White " Accept: " ++ [accept, "\n"] ++ if isRaw then [] else ansiColor White " Status: " ++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.8.2/Network/Wai/Middleware/Routed.hs new/wai-extra-3.0.10/Network/Wai/Middleware/Routed.hs --- old/wai-extra-3.0.8.2/Network/Wai/Middleware/Routed.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/wai-extra-3.0.10/Network/Wai/Middleware/Routed.hs 2015-07-24 19:15:26.000000000 +0200 @@ -0,0 +1,39 @@ +-- | +-- +-- Since 3.0.9 +module Network.Wai.Middleware.Routed + ( routedMiddleware + , hostedMiddleware + ) where + +import Network.Wai +import Data.ByteString (ByteString) +import Data.Text (Text) + +-- | Apply a middleware based on a test of pathInfo +-- +-- example: +-- +-- > let corsify = routedMiddleWare ("static" `elem`) addCorsHeaders +-- +-- Since 3.0.9 +routedMiddleware :: ([Text] -> Bool) -- ^ Only use middleware if this pathInfo test returns True + -> Middleware -- ^ middleware to apply the path prefix guard to + -> Middleware -- ^ modified middleware +routedMiddleware pathCheck middle app req + | pathCheck (pathInfo req) = middle app req + | otherwise = app req + +-- | Only apply the middleware to certain hosts +-- +-- Since 3.0.9 +hostedMiddleware :: ByteString -- ^ Domain the middleware applies to + -> Middleware -- ^ middleware to apply the path prefix guard to + -> Middleware -- ^ modified middleware +hostedMiddleware domain middle app req + | hasDomain domain req = middle app req + | otherwise = app req + +hasDomain :: ByteString -> Request -> Bool +hasDomain domain req = maybe False (== domain) mHost + where mHost = requestHeaderHost req diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.8.2/test/Network/Wai/Middleware/RoutedSpec.hs new/wai-extra-3.0.10/test/Network/Wai/Middleware/RoutedSpec.hs --- old/wai-extra-3.0.8.2/test/Network/Wai/Middleware/RoutedSpec.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/wai-extra-3.0.10/test/Network/Wai/Middleware/RoutedSpec.hs 2015-07-24 19:15:26.000000000 +0200 @@ -0,0 +1,53 @@ +{-# LANGUAGE OverloadedStrings #-} +module Network.Wai.Middleware.RoutedSpec + ( main + , spec + ) where + +import Test.Hspec + +import Network.Wai.Middleware.Routed +import Network.Wai.Middleware.ForceSSL (forceSSL) + +import Network.HTTP.Types (methodPost, status200, status301, status307) +import Network.Wai +import Network.Wai.Test +import Data.ByteString (ByteString) +import Data.String (IsString) + +main :: IO () +main = hspec spec + +spec :: Spec +spec = describe "forceSSL" $ do + it "routed middleware" $ do + let destination = "https://example.com/d/" + let routedSslJsonApp prefix = routedMiddleware (checkPrefix prefix) forceSSL jsonApp + checkPrefix p (p1:_) = p == p1 + checkPrefix _ _ = False + + flip runSession (routedSslJsonApp "r") $ do + res <- testDPath "http" + assertNoHeader location res + assertStatus 200 res + assertBody "{\"foo\":\"bar\"}" res + + flip runSession (routedSslJsonApp "d") $ do + res2 <- testDPath "http" + assertHeader location destination res2 + assertStatus 301 res2 + +jsonApp :: Application +jsonApp _req cps = cps $ responseLBS status200 + [("Content-Type", "application/json")] + "{\"foo\":\"bar\"}" + +testDPath :: ByteString -> Session SResponse +testDPath proto = + request $ flip setRawPathInfo "/d/" defaultRequest + { requestHeaders = [("X-Forwarded-Proto", proto)] + , requestHeaderHost = Just "example.com" + } + +location :: IsString ci => ci +location = "Location" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.8.2/wai-extra.cabal new/wai-extra-3.0.10/wai-extra.cabal --- old/wai-extra-3.0.8.2/wai-extra.cabal 2015-07-09 20:35:55.000000000 +0200 +++ new/wai-extra-3.0.10/wai-extra.cabal 2015-07-24 19:15:26.000000000 +0200 @@ -1,5 +1,5 @@ Name: wai-extra -Version: 3.0.8.2 +Version: 3.0.10 Synopsis: Provides some basic WAI handlers and middleware. description: Provides basic WAI handler and middleware functionality: @@ -135,6 +135,7 @@ Network.Wai.Middleware.HttpAuth Network.Wai.Middleware.StreamFile Network.Wai.Middleware.ForceSSL + Network.Wai.Middleware.Routed Network.Wai.Parse Network.Wai.Request Network.Wai.UrlMap @@ -153,6 +154,7 @@ Network.Wai.RequestSpec Network.Wai.Middleware.ApprootSpec Network.Wai.Middleware.ForceSSLSpec + Network.Wai.Middleware.RoutedSpec Network.Wai.Middleware.StripHeadersSpec WaiExtraSpec build-depends: base >= 4 && < 5