on master help sign in
Merge pull request #585 from phadej/basic-auth-req

Add basicAuth'

commitaaf3114e886861a7a7483645eae626bb24174140 authorMichael Snoyman <michael@snoyman.com> dateWed 19 Oct 2016, 19:05 (10 years ago) parenta5cbcef416ab61
3 files changed+23−11
wai-extra/ChangeLog.md+4 wai-extra/Network/Wai/Middleware/HttpAuth.hs+18−10 wai-extra/wai-extra.cabal+1−1
wai-extra/ChangeLog.md+4
@@ -1,3 +1,7 @@
1+## 3.0.19
2+
3+* Add a new function basicAuth', which passes request to the CheckCreds argument.
4+
15## 3.0.18
26
37* ForceSSL: preserve port number when redirecting to https. [#582](https://github.com/yesodweb/wai/pull/582)
wai-extra/Network/Wai/Middleware/HttpAuth.hs+18−10
@@ -5,6 +5,7 @@
55module Network.Wai.Middleware.HttpAuth
66 ( -- * Middleware
77 basicAuth
8+ , basicAuth'
89 , CheckCreds
910 , AuthSettings
1011 , authRealm
@@ -36,11 +37,19 @@ type CheckCreds = ByteString
3637--
3738-- > basicAuth (\u p -> return $ u == "michael" && p == "mypass") "My Realm"
3839--
39−-- Since 1.3.4
40+-- @since 1.3.4
4041basicAuth :: CheckCreds
4142 -> AuthSettings
4243 -> Middleware
43−basicAuth checkCreds AuthSettings {..} app req sendResponse = do
44+basicAuth checkCreds = basicAuth' (\_ -> checkCreds)
45+
46+-- | Like 'basicAuth', but also passes a request to the authentication function.
47+--
48+-- @since 3.0.19
49+basicAuth' :: (Request -> CheckCreds)
50+ -> AuthSettings
51+ -> Middleware
52+basicAuth' checkCreds AuthSettings {..} app req sendResponse = do
4453 isProtected <- authIsProtected req
4554 allowed <- if isProtected then check else return True
4655 if allowed
@@ -51,8 +60,7 @@ basicAuth checkCreds AuthSettings {..} app req sendResponse = do
5160 case (lookup hAuthorization $ requestHeaders req)
5261 >>= extractBasicAuth of
5362 Nothing -> return False
54− Just (username, password) -> checkCreds username password
55−
63+ Just (username, password) -> checkCreds req username password
5664
5765-- | Basic authentication settings. This value is an instance of
5866-- @IsString@, so the recommended approach to create a value is to
@@ -61,23 +69,23 @@ basicAuth checkCreds AuthSettings {..} app req sendResponse = do
6169--
6270-- > "My Realm" { authIsProtected = someFunc } :: AuthSettings
6371--
64−-- Since 1.3.4
72+-- @since 1.3.4
6573data AuthSettings = AuthSettings
6674 { authRealm :: !ByteString
6775 -- ^
6876 --
69− -- Since 1.3.4
77+ -- @since 1.3.4
7078 , authOnNoAuth :: !(ByteString -> Application)
7179 -- ^ Takes the realm and returns an appropriate 401 response when
7280 -- authentication is not provided.
7381 --
74− -- Since 1.3.4
82+ -- @since 1.3.4
7583 , authIsProtected :: !(Request -> IO Bool)
7684 -- ^ Determine if access to the requested resource is restricted.
7785 --
7886 -- Default: always returns @True@.
7987 --
80− -- Since 1.3.4
88+ -- @since 1.3.4
8189 }
8290
8391instance IsString AuthSettings where
@@ -99,7 +107,7 @@ instance IsString AuthSettings where
99107-- | Extract basic authentication data from usually __Authorization__
100108-- header value. Returns username and password
101109--
102−-- Since 3.0.5
110+-- @since 3.0.5
103111extractBasicAuth :: ByteString -> Maybe (ByteString, ByteString)
104112extractBasicAuth bs =
105113 let (x, y) = S.break isSpace bs
@@ -115,7 +123,7 @@ extractBasicAuth bs =
115123-- | Extract bearer authentication data from __Authorization__ header
116124-- value. Returns bearer token
117125--
118−-- Since 3.0.5
126+-- @since 3.0.5
119127extractBearerAuth :: ByteString -> Maybe ByteString
120128extractBearerAuth bs =
121129 let (x, y) = S.break isSpace bs
wai-extra/wai-extra.cabal+1−1
@@ -1,5 +1,5 @@
11Name: wai-extra
2−Version: 3.0.18
2+Version: 3.0.19
33Synopsis: Provides some basic WAI handlers and middleware.
44description:
55 Provides basic WAI handler and middleware functionality: