@@ -41,6 +41,7 @@ import Network.HTTP.Media (MediaType, mainType, parameters, parseAc
42import Network.Socket (HostName, PortNumber)
42import Network.Socket (HostName, PortNumber)
43import Text.Read (readMaybe)
43import Text.Read (readMaybe)
44+import Test.QuickCheck.Arbitrary.Generic
45import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
46import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
46import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
47import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
@@ -774,6 +775,20 @@ data Header = Header
774 , _headerSchema :: Maybe (Referenced Schema)
775 , _headerSchema :: Maybe (Referenced Schema)
775 } deriving (Eq, Show, Generic, Data, Typeable)
776 } deriving (Eq, Show, Generic, Data, Typeable)
778+-- | According to RFC7235
790+ deriving (Eq, Show, Generic, Data, Typeable)
777-- | The location of the API key.
792-- | The location of the API key.
778data ApiKeyLocation
793data ApiKeyLocation
779 = ApiKeyQuery
794 = ApiKeyQuery
@@ -839,7 +854,7 @@ data OAuth2Flows = OAuth2Flows
839 } deriving (Eq, Show, Generic, Data, Typeable)
854 } deriving (Eq, Show, Generic, Data, Typeable)
841data SecuritySchemeType
856data SecuritySchemeType
842− = SecuritySchemeHttp
857+ = SecuritySchemeHttp HttpScheme
843 | SecuritySchemeApiKey ApiKeyParams
858 | SecuritySchemeApiKey ApiKeyParams
844 | SecuritySchemeOAuth2 OAuth2Flows
859 | SecuritySchemeOAuth2 OAuth2Flows
845 | SecuritySchemeOpenIdConnect URL
860 | SecuritySchemeOpenIdConnect URL
@@ -1127,6 +1142,13 @@ instance ToJSON License where
1127instance ToJSON ServerVariable where
1142instance ToJSON ServerVariable where
1128 toJSON = genericToJSON (jsonPrefix "ServerVariable")
1143 toJSON = genericToJSON (jsonPrefix "ServerVariable")
1145+instance ToJSON HttpScheme where
1146+ toJSON scheme = case scheme of
1147+ SCRAM_SHA_1 -> "SCRAM-SHA-1"
1148+ SCRAM_SHA_256 -> "SCRAM-SHA-256"
1150+ other -> genericToJSON defaultOptions other
1130instance ToJSON ApiKeyLocation where
1152instance ToJSON ApiKeyLocation where
1131 toJSON = genericToJSON (jsonPrefix "ApiKey")
1153 toJSON = genericToJSON (jsonPrefix "ApiKey")
@@ -1182,6 +1204,13 @@ instance FromJSON License where
1182instance FromJSON ServerVariable where
1204instance FromJSON ServerVariable where
1183 parseJSON = genericParseJSON (jsonPrefix "ServerVariable")
1205 parseJSON = genericParseJSON (jsonPrefix "ServerVariable")
1207+instance FromJSON HttpScheme where
1208+ parseJSON = withText "HttpScheme" $ \txt -> case txt of
1209+ "SCRAM-SHA-1" -> pure SCRAM_SHA_1
1210+ "SCRAM-SHA-256" -> pure SCRAM_SHA_256
1211+ "vapid" -> pure Vapid
1212+ _ -> genericParseJSON defaultOptions $ String txt
1185instance FromJSON ApiKeyLocation where
1214instance FromJSON ApiKeyLocation where
1186 parseJSON = genericParseJSON (jsonPrefix "ApiKey")
1215 parseJSON = genericParseJSON (jsonPrefix "ApiKey")
@@ -1229,8 +1258,8 @@ instance ToJSON OAuth2Flows where
1229 toEncoding = sopSwaggerGenericToEncoding
1258 toEncoding = sopSwaggerGenericToEncoding
1231instance ToJSON SecuritySchemeType where
1260instance ToJSON SecuritySchemeType where
1232− toJSON SecuritySchemeHttp
1261+ toJSON (SecuritySchemeHttp scheme)
1233− = object [ "type" .= ("http" :: Text) ]
1262+ = object [ "type" .= ("http" :: Text), "scheme" .= toJSON scheme ]
1234 toJSON (SecuritySchemeApiKey params)
1263 toJSON (SecuritySchemeApiKey params)
1235 = toJSON params
1264 = toJSON params
1236 <+> object [ "type" .= ("apiKey" :: Text) ]
1265 <+> object [ "type" .= ("apiKey" :: Text) ]
@@ -1379,7 +1408,7 @@ instance FromJSON SecuritySchemeType where
1379 parseJSON js@(Object o) = do
1408 parseJSON js@(Object o) = do
1380 (t :: Text) <- o .: "type"
1409 (t :: Text) <- o .: "type"
1381 case t of
1410 case t of
1382− "http" -> pure SecuritySchemeHttp
1411+ "http" -> SecuritySchemeHttp <$> o .: "scheme"
1383 "apiKey" -> SecuritySchemeApiKey <$> parseJSON js
1412 "apiKey" -> SecuritySchemeApiKey <$> parseJSON js
1384 "oauth2" -> SecuritySchemeOAuth2 <$> (o .: "flows")
1413 "oauth2" -> SecuritySchemeOAuth2 <$> (o .: "flows")
1385 "openIdConnect" -> SecuritySchemeOpenIdConnect <$> (o .: "openIdConnectUrl")
1414 "openIdConnect" -> SecuritySchemeOpenIdConnect <$> (o .: "openIdConnectUrl")
@@ -1550,3 +1579,6 @@ instance AesonDefaultValue MimeList where defaultValue = Just mempty
1550instance AesonDefaultValue Info
1579instance AesonDefaultValue Info
1551instance AesonDefaultValue ParamLocation
1580instance AesonDefaultValue ParamLocation
1552instance AesonDefaultValue Link
1581instance AesonDefaultValue Link
1583+instance Arbitrary HttpScheme where
1584+ arbitrary = genericArbitrary