Safe Haskell | None |
---|---|
Language | Haskell98 |
Add CORS (cross-origin resource sharing) headers to a Snap application. CORS headers can be added either conditionally or unconditionally to the entire site, or you can apply CORS headers to a single route.
- wrapCORS :: Initializer b v ()
- wrapCORSWithOptions :: CORSOptions (Handler b v) -> Initializer b v ()
- applyCORS :: MonadSnap m => CORSOptions m -> m () -> m ()
- data CORSOptions m = CORSOptions {
- corsAllowOrigin :: m OriginList
- corsAllowCredentials :: m Bool
- corsExposeHeaders :: m (HashSet (CI ByteString))
- corsAllowedMethods :: m (HashSet HashableMethod)
- corsAllowedHeaders :: HashSet String -> m (HashSet String)
- defaultOptions :: Monad m => CORSOptions m
- data OriginList
- data OriginSet
- mkOriginSet :: [URI] -> OriginSet
- origins :: OriginSet -> HashSet HashableURI
- newtype HashableURI = HashableURI URI
- newtype HashableMethod = HashableMethod Method
Wrappers
wrapCORS :: Initializer b v () Source
Apply CORS for every request, unconditionally.
wrapCors
≡ wrapCORSWithOptions
defaultOptions
wrapCORSWithOptions :: CORSOptions (Handler b v) -> Initializer b v () Source
Initialize CORS for all requests with specific options.
Applying CORS to a specific response
applyCORS :: MonadSnap m => CORSOptions m -> m () -> m () Source
Apply CORS headers to a specific request. This is useful if you only have a single action that needs CORS headers, and you don't want to pay for conditional checks on every request.
You should note that applyCORS
needs to be used before you add any
method
combinators. For example, the following won't do what you want:
method POST $ applyCORS defaultOptions $ myHandler
This fails to work as CORS requires an OPTIONS
request in the preflighting
stage, but this would get filtered out. Instead, use
applyCORS defaultOptions $ method POST $ myHandler
Option Specification
data CORSOptions m Source
Specify the options to use when building CORS headers for a response. Most
of these options are Handler
actions to allow you to conditionally
determine the setting of each header.
CORSOptions | |
|
defaultOptions :: Monad m => CORSOptions m Source
Liberal default options. Specifies that:
- All origins may make cross-origin requests
allow-credentials
is true.- No extra headers beyond simple headers are exposed.
GET
,POST
,PUT
,DELETE
andHEAD
are all allowed.- All request headers are allowed.
All options are determined unconditionally.
Origin lists
data OriginList Source
Used to specify the contents of the Access-Control-Allow-Origin
header.
Everywhere | Allow any origin to access this resource. Corresponds to
|
Nowhere | Do not allow cross-origin requests |
Origins OriginSet | Allow cross-origin requests from these origins. |
mkOriginSet :: [URI] -> OriginSet Source
origins :: OriginSet -> HashSet HashableURI Source
Internals
newtype HashableURI Source