on master help sign in
Adding a local-only middleware.

Taken from blank-canvas

commitf6937dc84f2e9644f605b0b310bed8909e44eeb4 authorAndy Gill <andygill@ku.edu> dateMon 23 Jun 2014, 17:41 (12 years ago) parent7174df4
2 files changed+27
wai-extra/Network/Wai/Middleware/Local.hs+26 wai-extra/wai-extra.cabal+1
wai-extra/Network/Wai/Middleware/Local.hsnew file+26
@@ -0,0 +1,26 @@
1+{-# LANGUAGE OverloadedStrings, CPP #-}
2+-- | Only allow local connections.
3+--
4+module Network.Wai.Middleware.Local
5+ ( local
6+ ) where
7+
8+import Network.Wai (Middleware,remoteHost, Response)
9+import Network.Socket (SockAddr(..))
10+
11+-- | This middleware rejects non-local connections with a specific response.
12+-- It is useful when supporting web-based local applications, which would
13+-- typically want to reject external connections.
14+
15+local :: Response -> Middleware
16+local resp f r k = case remoteHost r of
17+ SockAddrInet _ h | h == fromIntegral home
18+ -> f r k
19+#if !defined(mingw32_HOST_OS) && !defined(_WIN32)
20+ SockAddrUnix _ -> f r k
21+#endif
22+ _ -> k $ resp
23+ where
24+ home :: Integer
25+ home = 127 + (256 * 256 * 256) * 1
26+
wai-extra/wai-extra.cabal+1
@@ -56,6 +56,7 @@ Library
5656 Network.Wai.Middleware.AcceptOverride
5757 Network.Wai.Middleware.Autohead
5858 Network.Wai.Middleware.CleanPath
59+ Network.Wai.Middleware.Local
5960 Network.Wai.Middleware.RequestLogger
6061 Network.Wai.Middleware.Gzip
6162 Network.Wai.Middleware.Jsonp