@@ -7,18 +7,25 @@ module Cardano.Wallet.Server.Middlewares
7
7
( withMiddlewares
8
8
, throttleMiddleware
9
9
, withDefaultHeader
10
+ , unsupportedMimeTypeMiddleware
10
11
) where
11
12
12
- import Universum
13
+ import Universum hiding ( toStrict )
13
14
14
15
import Data.Aeson (encode )
16
+ import Data.Binary.Builder (fromByteString )
17
+ import Data.ByteString.Lazy (toStrict )
15
18
import qualified Data.List as List
16
19
import Network.HTTP.Types.Header (Header )
17
20
import Network.HTTP.Types.Method (methodPatch , methodPost , methodPut )
18
- import Network.Wai (Application , Middleware , ifRequest ,
19
- requestHeaders , requestMethod , responseLBS )
21
+ import Network.HTTP.Types.Status (status415 )
22
+ import Network.Wai (Application , Middleware , Response , ifRequest ,
23
+ modifyResponse , requestHeaders , requestMethod ,
24
+ responseBuilder , responseLBS , responseStatus )
20
25
import qualified Network.Wai.Middleware.Throttle as Throttle
21
26
27
+
28
+ import Cardano.Wallet.API.Response (UnsupportedMimeTypeError (.. ))
22
29
import Cardano.Wallet.API.V1.Headers (applicationJson )
23
30
import qualified Cardano.Wallet.API.V1.Types as V1
24
31
@@ -29,6 +36,23 @@ import Pos.Launcher.Configuration (ThrottleSettings (..))
29
36
withMiddlewares :: [Middleware ] -> Application -> Application
30
37
withMiddlewares = flip $ foldr ($)
31
38
39
+ unsupportedMimeTypeMiddleware :: Middleware
40
+ unsupportedMimeTypeMiddleware =
41
+ modifyResponse responseModifier
42
+ where
43
+ responseModifier :: Response -> Response
44
+ responseModifier r
45
+ | responseStatus r == status415 =
46
+ responseBuilder status415
47
+ [ (" Content-Type" , " application/json" ) ]
48
+ ( fromByteString .
49
+ toStrict .
50
+ encode $
51
+ UnsupportedMimeTypePresent " The API expects the Content-Type's main MIME-type to be 'application/json'"
52
+ )
53
+ | otherwise = r
54
+
55
+
32
56
-- | Only apply a @Middleware@ to request with bodies (we don't consider
33
57
-- "DELETE" as one of them).
34
58
ifRequestWithBody :: Middleware -> Middleware
0 commit comments