feat(middleware): allow Cross Origin Resource Sharing (CORS)

This commit is contained in:
Sarah Vaupel 2024-04-17 02:52:11 +02:00
parent 5be23c0d52
commit e1a25cdd31
2 changed files with 19 additions and 4 deletions

View File

@ -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

View File

@ -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
}