packages feed

wai-extra 3.1.7 → 3.1.8

raw patch · 3 files changed

+79/−13 lines, 3 filesdep ~wai-loggerPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: wai-logger

API changes (from Hackage documentation)

+ Network.Wai.Middleware.RequestLogger: ApacheWithSettings :: ApacheSettings -> OutputFormat
+ Network.Wai.Middleware.RequestLogger: data ApacheSettings
+ Network.Wai.Middleware.RequestLogger: defaultApacheSettings :: ApacheSettings
+ Network.Wai.Middleware.RequestLogger: defaultRequestLoggerSettings :: RequestLoggerSettings
+ Network.Wai.Middleware.RequestLogger: setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings
+ Network.Wai.Middleware.RequestLogger: setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings
+ Network.Wai.Middleware.RequestLogger: setApacheUserGetter :: (Request -> Maybe ByteString) -> ApacheSettings -> ApacheSettings

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for wai-extra +## 3.1.8++* Added an `ApacheWithSettings` output format for `RequestLogger` that allows request filtering similar to `DetailedWithSettings` and logging of the current user via wai-logger's `initLoggerUser` [#866](https://github.com/yesodweb/wai/pull/866)+ ## 3.1.7  * Added new `mPrelogRequests` option to `DetailedSettings` [#857](https://github.com/yesodweb/wai/pull/857)
Network/Wai/Middleware/RequestLogger.hs view
@@ -9,11 +9,17 @@       -- * Create more versions     , mkRequestLogger     , RequestLoggerSettings+    , defaultRequestLoggerSettings     , outputFormat     , autoFlush     , destination     , OutputFormat (..)-    , DetailedSettings(..)+    , ApacheSettings+    , defaultApacheSettings+    , setApacheIPAddrSource+    , setApacheRequestFilter+    , setApacheUserGetter+    , DetailedSettings (..)     , OutputFormatter     , OutputFormatterWithDetails     , OutputFormatterWithDetailsAndHeaders@@ -51,16 +57,65 @@ import Network.Wai.Middleware.RequestLogger.Internal import Network.Wai.Header (contentLength) import Data.Text.Encoding (decodeUtf8')+import Network.Wai (Request)  -- | The logging format. data OutputFormat   = Apache IPAddrSource+  | ApacheWithSettings ApacheSettings -- ^ @since 3.1.8   | Detailed Bool -- ^ use colors?   | DetailedWithSettings DetailedSettings -- ^ @since 3.1.3   | CustomOutputFormat OutputFormatter   | CustomOutputFormatWithDetails OutputFormatterWithDetails   | CustomOutputFormatWithDetailsAndHeaders OutputFormatterWithDetailsAndHeaders +-- | Settings for the `ApacheWithSettings` `OutputFormat`. This is purposely kept as an abstract data+-- type so that new settings can be added without breaking backwards+-- compatibility. In order to create an 'ApacheSettings' value, use 'defaultApacheSettings'+-- and the various \'setApache\' functions to modify individual fields. For example:+--+-- > setApacheIPAddrSource FromHeader defaultApacheSettings+--+-- @since 3.1.8+data ApacheSettings = ApacheSettings+    { apacheIPAddrSource :: IPAddrSource+    , apacheUserGetter :: Request -> Maybe BS.ByteString+    , apacheRequestFilter :: Request -> Response -> Bool+    }++defaultApacheSettings :: ApacheSettings+defaultApacheSettings = ApacheSettings+    { apacheIPAddrSource = FromSocket+    , apacheRequestFilter = \_ _ -> True+    , apacheUserGetter = \_ -> Nothing+    }++-- | Where to take IP addresses for clients from. See 'IPAddrSource' for more information.+--+-- Default value: FromSocket+--+-- @since 3.1.8+setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings+setApacheIPAddrSource x y = y { apacheIPAddrSource = x }++-- | Function that allows you to filter which requests are logged, based on+-- the request and response+--+-- Default: log all requests+--+-- @since 3.1.8+setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings+setApacheRequestFilter x y = y { apacheRequestFilter = x }++-- | Function that allows you to get the current user from the request, which+-- will then be added in the log.+--+-- Default: return no user+--+-- @since 3.1.8+setApacheUserGetter :: (Request -> Maybe BS.ByteString) -> ApacheSettings -> ApacheSettings+setApacheUserGetter x y = y { apacheUserGetter = x }+ -- | Settings for the `Detailed` `OutputFormat`. -- -- `mModifyParams` allows you to pass a function to hide confidential@@ -141,12 +196,15 @@     , destination :: Destination     } +defaultRequestLoggerSettings :: RequestLoggerSettings+defaultRequestLoggerSettings = RequestLoggerSettings+    { outputFormat = Detailed True+    , autoFlush = True+    , destination = Handle stdout+    }+ instance Default RequestLoggerSettings where-    def = RequestLoggerSettings-        { outputFormat = Detailed True-        , autoFlush = True-        , destination = Handle stdout-        }+    def = defaultRequestLoggerSettings  mkRequestLogger :: RequestLoggerSettings -> IO Middleware mkRequestLogger RequestLoggerSettings{..} = do@@ -160,7 +218,11 @@         Apache ipsrc -> do             getdate <- getDateGetter flusher             apache <- initLogger ipsrc (LogCallback callback flusher) getdate-            return $ apacheMiddleware apache+            return $ apacheMiddleware (\_ _ -> True) apache+        ApacheWithSettings ApacheSettings{..} -> do+            getdate <- getDateGetter flusher+            apache <- initLoggerUser (Just apacheUserGetter) apacheIPAddrSource (LogCallback callback flusher) getdate+            return $ apacheMiddleware apacheRequestFilter apache         Detailed useColors ->             let settings = def { useColors = useColors}             in detailedMiddleware callbackAndFlush settings@@ -176,10 +238,10 @@             getdate <- getDateGetter flusher             return $ customMiddlewareWithDetailsAndHeaders callbackAndFlush getdate formatter -apacheMiddleware :: ApacheLoggerActions -> Middleware-apacheMiddleware ala app req sendResponse = app req $ \res -> do-    let msize = contentLength (responseHeaders res)-    apacheLogger ala req (responseStatus res) msize+apacheMiddleware :: (Request -> Response -> Bool) -> ApacheLoggerActions -> Middleware+apacheMiddleware applyRequestFilter ala app req sendResponse = app req $ \res -> do+    when (applyRequestFilter req res) $+        apacheLogger ala req (responseStatus res) $ contentLength (responseHeaders res)     sendResponse res  customMiddleware :: Callback -> IO ZonedDate -> OutputFormatter -> Middleware
wai-extra.cabal view
@@ -1,5 +1,5 @@ Name:                wai-extra-Version:             3.1.7+Version:             3.1.8 Synopsis:            Provides some basic WAI handlers and middleware. description:   Provides basic WAI handler and middleware functionality:@@ -99,7 +99,7 @@                    , case-insensitive          >= 0.2                    , data-default-class                    , fast-logger               >= 2.4.5-                   , wai-logger                >= 2.3.2+                   , wai-logger                >= 2.3.7                    , ansi-terminal                    , resourcet                 >= 0.4.6    && < 1.3                    , containers