From d3d1fbe7e5c391c7c0d5f9b94c7064ff8ed3b583 Mon Sep 17 00:00:00 2001 From: Jacky Hu Date: Thu, 16 Jun 2016 16:40:16 +0800 Subject: [PATCH] Return HTTP 415 on non root path for openapi req --- src/PostgREST/Middleware.hs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/PostgREST/Middleware.hs b/src/PostgREST/Middleware.hs index 969b20c09..6682fdb35 100644 --- a/src/PostgREST/Middleware.hs +++ b/src/PostgREST/Middleware.hs @@ -6,6 +6,7 @@ module PostgREST.Middleware where import Data.Aeson (Value (..)) import qualified Data.HashMap.Strict as M import Data.String.Conversions (cs) +import Data.Maybe (fromMaybe, listToMaybe) import Data.Text import qualified Hasql.Transaction as H @@ -17,7 +18,7 @@ import Network.Wai.Middleware.Cors (cors) import Network.Wai.Middleware.Gzip (def, gzip) import Network.Wai.Middleware.Static (only, staticPolicy) -import PostgREST.ApiRequest (ApiRequest(..), pickContentType) +import PostgREST.ApiRequest (ApiRequest(..), ContentType(..), pickContentType) import PostgREST.Auth (claimsToSQL) import PostgREST.Config (AppConfig (..), corsPolicy) import PostgREST.Error (errResponse) @@ -40,10 +41,14 @@ runWithClaims conf eClaims app req = unsupportedAccept :: Application -> Application unsupportedAccept app req respond = - case accept of - Left _ -> respond $ errResponse status415 "Unsupported Accept header, try: application/json" - Right _ -> app req respond + case (isTargetRoot, accept) of + (_, Left _) -> unsupportedAcceptRespond + (False, Right OpenAPI) -> unsupportedAcceptRespond + (_, Right _) -> app req respond where accept = pickContentType $ lookup hAccept $ requestHeaders req + path = pathInfo req + isTargetRoot = fromMaybe True $ (== "") <$> listToMaybe path + unsupportedAcceptRespond = respond $ errResponse status415 "Unsupported Accept header, try: application/json" defaultMiddle :: Application -> Application defaultMiddle =