feat(middleware): allow Cross Origin Resource Sharing (CORS)
This commit is contained in:
parent
5be23c0d52
commit
e1a25cdd31
@ -21,7 +21,6 @@ dependencies:
|
|||||||
- template-haskell
|
- template-haskell
|
||||||
- shakespeare
|
- shakespeare
|
||||||
- monad-control
|
- monad-control
|
||||||
- wai-extra
|
|
||||||
- yaml
|
- yaml
|
||||||
- http-conduit
|
- http-conduit
|
||||||
- directory
|
- directory
|
||||||
@ -31,7 +30,6 @@ dependencies:
|
|||||||
- conduit
|
- conduit
|
||||||
- monad-logger
|
- monad-logger
|
||||||
- fast-logger
|
- fast-logger
|
||||||
- wai-logger
|
|
||||||
- foreign-store
|
- foreign-store
|
||||||
- file-embed
|
- file-embed
|
||||||
- unordered-containers
|
- unordered-containers
|
||||||
@ -40,6 +38,10 @@ dependencies:
|
|||||||
- time
|
- time
|
||||||
- case-insensitive
|
- case-insensitive
|
||||||
- wai
|
- wai
|
||||||
|
- wai-cors
|
||||||
|
- wai-extra
|
||||||
|
- wai-logger
|
||||||
|
- wai-middleware-prometheus
|
||||||
- cryptonite
|
- cryptonite
|
||||||
- cryptonite-conduit
|
- cryptonite-conduit
|
||||||
- saltine
|
- saltine
|
||||||
@ -144,7 +146,6 @@ dependencies:
|
|||||||
- cookie
|
- cookie
|
||||||
- prometheus-client
|
- prometheus-client
|
||||||
- prometheus-metrics-ghc
|
- prometheus-metrics-ghc
|
||||||
- wai-middleware-prometheus
|
|
||||||
- extended-reals
|
- extended-reals
|
||||||
- rfc5051
|
- rfc5051
|
||||||
- unidecode
|
- unidecode
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import qualified Data.HashMap.Strict as HashMap
|
|||||||
import Network.HTTP.Types.Header (hSetCookie)
|
import Network.HTTP.Types.Header (hSetCookie)
|
||||||
import Network.Wai (Middleware)
|
import Network.Wai (Middleware)
|
||||||
import qualified Network.Wai as Wai
|
import qualified Network.Wai as Wai
|
||||||
|
import Network.Wai.Middleware.Cors (CorsResourcePolicy(..), cors)
|
||||||
import Network.Wai.Middleware.RequestLogger ( Destination(Logger)
|
import Network.Wai.Middleware.RequestLogger ( Destination(Logger)
|
||||||
, IPAddrSource(..)
|
, IPAddrSource(..)
|
||||||
, OutputFormat(..)
|
, OutputFormat(..)
|
||||||
@ -27,7 +28,7 @@ import Web.Cookie
|
|||||||
makeMiddleware :: MonadIO m => UniWorX -> m Middleware
|
makeMiddleware :: MonadIO m => UniWorX -> m Middleware
|
||||||
makeMiddleware app = do
|
makeMiddleware app = do
|
||||||
logWare <- makeLogWare app
|
logWare <- makeLogWare app
|
||||||
return $ observeHTTPRequestLatency classifyHandler . logWare . normalizeCookiesWare . defaultMiddlewaresNoLogging
|
return $ observeHTTPRequestLatency classifyHandler . logWare . normalizeCookiesWare . corsWare . defaultMiddlewaresNoLogging
|
||||||
|
|
||||||
|
|
||||||
makeLogWare :: MonadIO m => UniWorX -> m Middleware
|
makeLogWare :: MonadIO m => UniWorX -> m Middleware
|
||||||
@ -84,3 +85,16 @@ normalizeCookiesWare waiApp req res = waiApp req $ \res' -> do
|
|||||||
if | null others -> (hdr :) <$> go hdrs
|
if | null others -> (hdr :) <$> go hdrs
|
||||||
| otherwise -> go hdrs
|
| otherwise -> go hdrs
|
||||||
| otherwise = (hdr :) <$> go hdrs
|
| otherwise = (hdr :) <$> go hdrs
|
||||||
|
|
||||||
|
|
||||||
|
corsWare :: Middleware
|
||||||
|
corsWare = cors . const $ Just CorsResourcePolicy
|
||||||
|
{ corsOrigins = Nothing
|
||||||
|
, corsMethods = [ "GET", "HEAD", "POST" ]
|
||||||
|
, corsRequestHeaders = []
|
||||||
|
, corsExposedHeaders = Nothing
|
||||||
|
, corsMaxAge = Just 600
|
||||||
|
, corsVaryOrigin = True
|
||||||
|
, corsRequireOrigin = False
|
||||||
|
, corsIgnoreFailures = False
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user