Hello community, here is the log from the commit of package ghc-wai-extra for openSUSE:Factory checked in at 2015-07-16 17:18:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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-05-29 10:38:29.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-wai-extra.new/ghc-wai-extra.changes 2015-07-16 17:19:00.000000000 +0200 @@ -1,0 +2,5 @@ +Mon Jul 13 05:56:11 UTC 2015 - [email protected] + +- update to 3.0.8.2 + +------------------------------------------------------------------- Old: ---- wai-extra-3.0.7.1.tar.gz New: ---- wai-extra-3.0.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-wai-extra.spec ++++++ --- /var/tmp/diff_new_pack.4G4tbG/_old 2015-07-16 17:19:00.000000000 +0200 +++ /var/tmp/diff_new_pack.4G4tbG/_new 2015-07-16 17:19:00.000000000 +0200 @@ -15,17 +15,18 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + %global pkg_name wai-extra %bcond_with tests -Name: ghc-%{pkg_name} -Version: 3.0.7.1 +Name: ghc-wai-extra +Version: 3.0.8.2 Release: 0 Summary: Provides some basic WAI handlers and middleware +License: MIT Group: System/Libraries -License: MIT Url: https://hackage.haskell.org/package/%{pkg_name} Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -133,37 +134,29 @@ %prep %setup -q -n %{pkg_name}-%{version} - %build %ghc_lib_build - %install %ghc_lib_install - %check %if %{with tests} %cabal test %endif - %post devel %ghc_pkg_recache - %postun devel %ghc_pkg_recache - %files -f %{name}.files %defattr(-,root,root,-) %doc LICENSE - %files devel -f %{name}-devel.files %defattr(-,root,root,-) %doc README.md - %changelog ++++++ wai-extra-3.0.7.1.tar.gz -> wai-extra-3.0.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.7.1/Network/Wai/Middleware/AddHeaders.hs new/wai-extra-3.0.8.2/Network/Wai/Middleware/AddHeaders.hs --- old/wai-extra-3.0.7.1/Network/Wai/Middleware/AddHeaders.hs 2015-04-22 07:02:35.000000000 +0200 +++ new/wai-extra-3.0.8.2/Network/Wai/Middleware/AddHeaders.hs 2015-07-09 20:35:55.000000000 +0200 @@ -6,7 +6,7 @@ ) where import Network.HTTP.Types (ResponseHeaders, Header) -import Network.Wai (Middleware) +import Network.Wai (Middleware, modifyResponse, mapResponseHeaders) import Network.Wai.Internal (Response(..)) import Data.ByteString (ByteString) @@ -18,13 +18,7 @@ -- -- Since 3.0.3 -addHeaders h app req respond = app req $ respond . addHeaders' (map (first CI.mk) h) - -mapHeader :: (ResponseHeaders -> ResponseHeaders) -> Response -> Response -mapHeader f (ResponseFile s h b1 b2) = ResponseFile s (f h) b1 b2 -mapHeader f (ResponseBuilder s h b) = ResponseBuilder s (f h) b -mapHeader f (ResponseStream s h b) = ResponseStream s (f h) b -mapHeader _ r@(ResponseRaw _ _) = r +addHeaders h = modifyResponse $ addHeaders' (map (first CI.mk) h) addHeaders' :: [Header] -> Response -> Response -addHeaders' h = mapHeader (\hs -> h ++ hs) +addHeaders' h = mapResponseHeaders (\hs -> h ++ hs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.7.1/Network/Wai/Middleware/RequestLogger.hs new/wai-extra-3.0.8.2/Network/Wai/Middleware/RequestLogger.hs --- old/wai-extra-3.0.7.1/Network/Wai/Middleware/RequestLogger.hs 2015-04-22 07:02:35.000000000 +0200 +++ new/wai-extra-3.0.8.2/Network/Wai/Middleware/RequestLogger.hs 2015-07-09 20:35:55.000000000 +0200 @@ -118,15 +118,15 @@ sendResponse res -- | Production request logger middleware. --- Implemented on top of "logCallback", but prints to 'stdout' +{-# NOINLINE logStdout #-} logStdout :: Middleware logStdout = unsafePerformIO $ mkRequestLogger def { outputFormat = Apache FromSocket } -- | Development request logger middleware. --- Implemented on top of "logCallbackDev", but prints to 'stdout' -- -- Flushes 'stdout' on each request, which would be inefficient in production use. -- Use "logStdout" in production. +{-# NOINLINE logStdoutDev #-} logStdoutDev :: Middleware logStdoutDev = unsafePerformIO $ mkRequestLogger def diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.7.1/Network/Wai/Middleware/StripHeaders.hs new/wai-extra-3.0.8.2/Network/Wai/Middleware/StripHeaders.hs --- old/wai-extra-3.0.7.1/Network/Wai/Middleware/StripHeaders.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/wai-extra-3.0.8.2/Network/Wai/Middleware/StripHeaders.hs 2015-07-09 20:35:55.000000000 +0200 @@ -0,0 +1,45 @@ +-- This was written for one specific use case and then generalized. + +-- The specific use case was a JSON API with a consumer that would choke on the +-- "Set-Cookie" response header. The solution was to test for the API's +-- `pathInfo` in the Request and if it matched, filter the response headers. + +-- When using this, care should be taken not to strip out headers that are +-- required for correct operation of the client (eg Content-Type). + +module Network.Wai.Middleware.StripHeaders + ( stripHeader + , stripHeaders + , stripHeaderIf + , stripHeadersIf + ) where + +import Network.Wai (Middleware, Request, modifyResponse, mapResponseHeaders, ifRequest) +import Network.Wai.Internal (Response) +import Data.ByteString (ByteString) + +import qualified Data.CaseInsensitive as CI + +stripHeader :: ByteString -> (Response -> Response) +stripHeader h = mapResponseHeaders (filter (\ hdr -> fst hdr /= CI.mk h)) + +stripHeaders :: [ByteString] -> (Response -> Response) +stripHeaders hs = + let hnames = map CI.mk hs + in mapResponseHeaders (filter (\ hdr -> fst hdr `notElem` hnames)) + +-- | If the request satisifes the provided predicate, strip headers matching +-- the provided header name. +-- +-- Since 3.0.8 +stripHeaderIf :: ByteString -> (Request -> Bool) -> Middleware +stripHeaderIf h rpred = + ifRequest rpred (modifyResponse $ stripHeader h) + +-- | If the request satisifes the provided predicate, strip all headers whose +-- header name is in the list of provided header names. +-- +-- Since 3.0.8 +stripHeadersIf :: [ByteString] -> (Request -> Bool) -> Middleware +stripHeadersIf hs rpred + = ifRequest rpred (modifyResponse $ stripHeaders hs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.7.1/test/Network/Wai/Middleware/StripHeadersSpec.hs new/wai-extra-3.0.8.2/test/Network/Wai/Middleware/StripHeadersSpec.hs --- old/wai-extra-3.0.7.1/test/Network/Wai/Middleware/StripHeadersSpec.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/wai-extra-3.0.8.2/test/Network/Wai/Middleware/StripHeadersSpec.hs 2015-07-09 20:35:55.000000000 +0200 @@ -0,0 +1,58 @@ +{-# LANGUAGE OverloadedStrings #-} +module Network.Wai.Middleware.StripHeadersSpec + ( main + , spec + ) where + +import Test.Hspec + +import Network.Wai.Middleware.AddHeaders +import Network.Wai.Middleware.StripHeaders + +import Control.Arrow (first) +import Data.ByteString (ByteString) +import Data.Monoid ((<>)) +import Network.HTTP.Types (status200) +import Network.Wai +import Network.Wai.Test + +import qualified Data.CaseInsensitive as CI + + +main :: IO () +main = hspec spec + + +spec :: Spec +spec = describe "stripHeader" $ do + let host = "example.com" + let ciTestHeaders = map (first CI.mk) testHeaders + + it "strips a specific header" $ do + resp1 <- runApp host (addHeaders testHeaders) defaultRequest + resp2 <- runApp host (stripHeaderIf "Foo" (const False) . addHeaders testHeaders) defaultRequest + resp3 <- runApp host (stripHeaderIf "Foo" (const True) . addHeaders testHeaders) defaultRequest + + simpleHeaders resp1 `shouldBe` ciTestHeaders + simpleHeaders resp2 `shouldBe` ciTestHeaders + simpleHeaders resp3 `shouldBe` tail ciTestHeaders + + it "strips specific set of headers" $ do + resp1 <- runApp host (addHeaders testHeaders) defaultRequest + resp2 <- runApp host (stripHeadersIf ["Bar", "Foo"] (const False) . addHeaders testHeaders) defaultRequest + resp3 <- runApp host (stripHeadersIf ["Bar", "Foo"] (const True) . addHeaders testHeaders) defaultRequest + + simpleHeaders resp1 `shouldBe` ciTestHeaders + simpleHeaders resp2 `shouldBe` ciTestHeaders + simpleHeaders resp3 `shouldBe` [last ciTestHeaders] + + +testHeaders :: [(ByteString, ByteString)] +testHeaders = [("Foo", "fooey"), ("Bar", "barbican"), ("Baz", "bazooka")] + + +runApp :: ByteString -> Middleware -> Request -> IO SResponse +runApp host mw req = runSession + (request req { requestHeaderHost = Just $ host <> ":80" }) $ mw app + where + app _ respond = respond $ responseLBS status200 [] "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-extra-3.0.7.1/wai-extra.cabal new/wai-extra-3.0.8.2/wai-extra.cabal --- old/wai-extra-3.0.7.1/wai-extra.cabal 2015-04-22 07:02:35.000000000 +0200 +++ new/wai-extra-3.0.8.2/wai-extra.cabal 2015-07-09 20:35:55.000000000 +0200 @@ -1,5 +1,5 @@ Name: wai-extra -Version: 3.0.7.1 +Version: 3.0.8.2 Synopsis: Provides some basic WAI handlers and middleware. description: Provides basic WAI handler and middleware functionality: @@ -84,7 +84,7 @@ Library Build-Depends: base >= 4 && < 5 , bytestring >= 0.9.1.4 - , wai >= 3.0 && < 3.1 + , wai >= 3.0.3.0 && < 3.1 , old-locale >= 1.0.0.2 && < 1.1 , time >= 1.1.4 , network >= 2.2.1.5 @@ -95,7 +95,7 @@ , text >= 0.7 , case-insensitive >= 0.2 , data-default-class - , fast-logger >= 2.1 && < 2.4 + , fast-logger >= 2.1 && < 2.5 , wai-logger >= 2.0 && < 2.3 , ansi-terminal , resourcet >= 0.4.6 && < 1.2 @@ -130,6 +130,7 @@ Network.Wai.Middleware.MethodOverride Network.Wai.Middleware.MethodOverridePost Network.Wai.Middleware.Rewrite + Network.Wai.Middleware.StripHeaders Network.Wai.Middleware.Vhost Network.Wai.Middleware.HttpAuth Network.Wai.Middleware.StreamFile @@ -152,6 +153,7 @@ Network.Wai.RequestSpec Network.Wai.Middleware.ApprootSpec Network.Wai.Middleware.ForceSSLSpec + Network.Wai.Middleware.StripHeadersSpec WaiExtraSpec build-depends: base >= 4 && < 5 , wai-extra @@ -168,7 +170,8 @@ , blaze-builder , cookie , time - ghc-options: -Wall -Werror + , case-insensitive + ghc-options: -Wall source-repository head type: git
