wai-cors 0.2.1 → 0.2.2
raw patch · 4 files changed
+79/−67 lines, 4 filesdep +mtldep +transformers-compatdep −errorsdep ~transformersdep ~wainew-uploader
Dependencies added: mtl, transformers-compat
Dependencies removed: errors
Dependency ranges changed: transformers, wai
Files
- CHANGELOG.md +7/−0
- constraints +20/−46
- src/Network/Wai/Middleware/Cors.hs +21/−14
- wai-cors.cabal +31/−7
CHANGELOG.md view
@@ -1,3 +1,10 @@+0.2.2+=====++* Support GHC-7.10/base-4.8 without compiler warnings.++* Drop dependency on errors package.+ 0.2.1 =====
constraints view
@@ -1,55 +1,29 @@-constraints: MonadRandom ==0.3,- array ==0.5.0.0,- attoparsec ==0.12.1.2,- base ==4.7.0.1,+constraints: array ==0.5.1.0,+ attoparsec ==0.12.1.5,+ base ==4.8.0.0, base-unicode-symbols ==0.2.2.4,- bifunctors ==4.1.1.1,- blaze-builder ==0.3.3.4,- bytestring ==0.10.4.0,- case-insensitive ==1.2.0.3,+ blaze-builder ==0.4.0.1,+ bytestring ==0.10.6.0,+ case-insensitive ==1.2.0.4, charset ==0.3.7,- comonad ==4.2.2,- containers ==0.5.5.1,- contravariant ==1.2.0.1,- deepseq ==1.3.0.2,- distributive ==0.4.4,- either ==4.3.2.1,- errors ==1.4.7,- exceptions ==0.6.1,- free ==4.10.0.1,- ghc-prim ==0.3.1.0,- hashable ==1.2.3.1,- http-types ==0.8.5,- integer-gmp ==0.5.1.0,- lifted-base ==0.2.3.3,- mmorph ==1.0.4,- monad-control ==1.0.0.1,+ containers ==0.5.6.2,+ deepseq ==1.4.1.1,+ ghc-prim ==0.4.0.0,+ hashable ==1.2.3.2,+ http-types ==0.8.6,+ integer-gmp ==1.0.0.0, mtl ==2.2.1, nats ==1, network ==2.6.0.2,- old-locale ==1.0.0.6,- parsec ==3.1.7,+ parsec ==3.1.9, parsers ==0.12.1.1,- prelude-extras ==0.4,- pretty ==1.1.1.1,- profunctors ==4.3.2,- random ==1.0.1.1,- resourcet ==1.1.3.3, rts ==1.0,- safe ==0.3.6,- scientific ==0.3.3.5,- semigroupoids ==4.2,- semigroups ==0.16.0.1,- stm ==2.4.3,- tagged ==0.7.2,- template-haskell ==2.9.0.0,- text ==1.2.0.3,- time ==1.4.2,- transformers ==0.4.1.0,- transformers-base ==0.4.3,- transformers-compat ==0.3.3.4,- unix ==2.7.0.1,+ scientific ==0.3.3.8,+ semigroups ==0.16.2.2,+ text ==1.2.0.4,+ time ==1.5.0.1,+ transformers ==0.4.2.0,+ unix ==2.7.1.0, unordered-containers ==0.2.5.1, vault ==0.3.0.4,- void ==0.7,- wai ==3.0.2.1+ wai ==3.0.2.3
src/Network/Wai/Middleware/Cors.hs view
@@ -54,19 +54,26 @@ , simpleMethods ) where +#ifndef MIN_VESION_base+#define MIN_VESION_base(x,y,z) 1+#endif++#if ! MIN_VERSION_base(4,8,0) import Control.Applicative-import Control.Error-import Control.Monad-import Control.Monad.IO.Class-import Control.Monad.Trans.Class+#endif+import Control.Monad.Error.Class+import Control.Monad.Trans.Except+#if ! MIN_VERSION_wai(2,0,0) import Control.Monad.Trans.Resource+#endif -import qualified Data.Attoparsec as AttoParsec+import qualified Data.Attoparsec.ByteString as AttoParsec import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy.Char8 as LB8 import qualified Data.CaseInsensitive as CI import qualified Data.CharSet as CS import Data.List (intersect, (\\), union)+import Data.Maybe (catMaybes) import Data.Monoid.Unicode import Data.String @@ -317,7 +324,7 @@ case WAI.requestMethod r of -- Preflight CORS request- "OPTIONS" → runEitherT (preflightHeaders policy) >>= \case+ "OPTIONS" → runExceptT (preflightHeaders policy) >>= \case Left e → err e Right headers → res $ WAI.responseLBS HTTP.ok200 (ch ⊕ headers) "" @@ -330,24 +337,24 @@ -- Compute HTTP response headers for a preflight request --- preflightHeaders ∷ Monad μ ⇒ CorsResourcePolicy → EitherT String μ HTTP.ResponseHeaders+ preflightHeaders ∷ (Functor μ, Monad μ) ⇒ CorsResourcePolicy → ExceptT String μ HTTP.ResponseHeaders preflightHeaders policy = concat <$> sequence [ hdrReqMethod policy , hdrRequestHeader policy , hdrMaxAge policy ] - hdrMaxAge ∷ Monad μ ⇒ CorsResourcePolicy → EitherT String μ HTTP.ResponseHeaders+ hdrMaxAge ∷ Monad μ ⇒ CorsResourcePolicy → ExceptT String μ HTTP.ResponseHeaders hdrMaxAge policy = case corsMaxAge policy of Nothing → return [] Just secs → return [("Access-Control-Max-Age", sshow secs)] - hdrReqMethod ∷ Monad μ ⇒ CorsResourcePolicy → EitherT String μ HTTP.ResponseHeaders+ hdrReqMethod ∷ Monad μ ⇒ CorsResourcePolicy → ExceptT String μ HTTP.ResponseHeaders hdrReqMethod policy = case lookup "Access-Control-Request-Method" (WAI.requestHeaders r) of- Nothing → left "Access-Control-Request-Method header is missing in CORS preflight request"+ Nothing → throwError "Access-Control-Request-Method header is missing in CORS preflight request" Just x → if x `elem` supportedMethods then return [("Access-Control-Allow-Methods", hdrL supportedMethods)]- else left+ else throwError $ "Method requested in Access-Control-Request-Method of CORS request is not supported; requested: " ⊕ B8.unpack x ⊕ "; supported are "@@ -356,14 +363,14 @@ where supportedMethods = corsMethods policy `union` simpleMethods - hdrRequestHeader ∷ Monad μ ⇒ CorsResourcePolicy → EitherT String μ HTTP.ResponseHeaders+ hdrRequestHeader ∷ Monad μ ⇒ CorsResourcePolicy → ExceptT String μ HTTP.ResponseHeaders hdrRequestHeader policy = case lookup "Access-Control-Request-Headers" (WAI.requestHeaders r) of Nothing → return [] Just hdrsBytes → do- hdrs ← hoistEither $ AttoParsec.parseOnly httpHeaderNameListParser hdrsBytes+ hdrs ← either throwError return $ AttoParsec.parseOnly httpHeaderNameListParser hdrsBytes if hdrs `isSubsetOf` supportedHeaders then return [("Access-Control-Allow-Headers", hdrLI supportedHeaders)]- else left+ else throwError $ "HTTP header requested in Access-Control-Request-Headers of CORS request is not supported; requested: " ⊕ B8.unpack (hdrLI hdrs) ⊕ "; supported are "
wai-cors.cabal view
@@ -3,7 +3,7 @@ -- ------------------------------------------------------ -- Name: wai-cors-Version: 0.2.1+Version: 0.2.2 Synopsis: CORS for WAI Description:@@ -37,8 +37,18 @@ source-repository this type: git location: https://github.com/alephcloud/wai-cors- tag: 0.2.1+ tag: 0.2.2 +flag transformers-3+ description: use transformers<0.3 (this is set automatically)+ default: False+ manual: False++flag wai-1+ description: use version wai<2 (this is set automatically)+ default: False+ manual: False+ Library default-language: Haskell2010 hs-source-dirs: src@@ -53,10 +63,24 @@ bytestring >= 0.10.0.2, case-insensitive >= 1.0.0.1, charset >= 0.3.7,- errors >= 1.4.1, http-types >= 0.8.0,- parsers >= 0.11,- resourcet >= 0.4,- transformers >= 0.3,- wai >= 1.4.0+ parsers >= 0.11++ if flag (wai-1)+ build-depends:+ wai < 2.0,+ resourcet >= 0.4+ else+ build-depends:+ wai >= 2.0++ if flag(transformers-3)+ build-depends:+ mtl >= 2.1,+ transformers >= 0.3 && < 0.4,+ transformers-compat >= 0.3+ else+ build-depends:+ mtl >= 2.2,+ transformers >= 0.4