summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Huot <jonathan.huot@thomsonreuters.com>2018-11-21 15:17:38 +0100
committerJonathan Huot <jonathan.huot@thomsonreuters.com>2018-11-21 15:17:38 +0100
commite77023ca5db633c5200322cc5ab8f75b22aa7832 (patch)
tree7589258c974adfa9db592594a0eb1c92065d095a
parent7961c4367dda9d604cacb4cba235f9370195d414 (diff)
downloadoauthlib-oauth-metadata.tar.gz
Allow custom provider to override oauthlib valuesoauth-metadata
See https://github.com/oauthlib/oauthlib/pull/605#discussion_r234438151
-rw-r--r--oauthlib/oauth2/rfc6749/endpoints/metadata.py14
-rw-r--r--tests/oauth2/rfc6749/endpoints/test_metadata.py10
2 files changed, 18 insertions, 6 deletions
diff --git a/oauthlib/oauth2/rfc6749/endpoints/metadata.py b/oauthlib/oauth2/rfc6749/endpoints/metadata.py
index 8c7699b..6d77b9f 100644
--- a/oauthlib/oauth2/rfc6749/endpoints/metadata.py
+++ b/oauthlib/oauth2/rfc6749/endpoints/metadata.py
@@ -89,8 +89,8 @@ class MetadataEndpoint(BaseEndpoint):
raise ValueError("array {}: {} must contains only string (not {})".format(key, array[key], elem))
def validate_metadata_token(self, claims, endpoint):
- claims["grant_types_supported"] = list(endpoint._grant_types.keys())
- claims["token_endpoint_auth_methods_supported"] = ["client_secret_post", "client_secret_basic"]
+ claims.setdefault("grant_types_supported", list(endpoint._grant_types.keys()))
+ claims.setdefault("token_endpoint_auth_methods_supported", ["client_secret_post", "client_secret_basic"])
self.validate_metadata(claims, "grant_types_supported", is_list=True)
self.validate_metadata(claims, "token_endpoint_auth_methods_supported", is_list=True)
@@ -98,8 +98,8 @@ class MetadataEndpoint(BaseEndpoint):
self.validate_metadata(claims, "token_endpoint", is_required=True, is_url=True)
def validate_metadata_authorization(self, claims, endpoint):
- claims["response_types_supported"] = list(self._response_types.keys())
- claims["response_modes_supported"] = ["query", "fragment"]
+ claims.setdefault("response_types_supported", list(self._response_types.keys()))
+ claims.setdefault("response_modes_supported", ["query", "fragment"])
self.validate_metadata(claims, "response_types_supported", is_required=True, is_list=True)
self.validate_metadata(claims, "response_modes_supported", is_list=True)
@@ -108,14 +108,16 @@ class MetadataEndpoint(BaseEndpoint):
self.validate_metadata(claims, "authorization_endpoint", is_required=True, is_url=True)
def validate_metadata_revocation(self, claims, endpoint):
- claims["revocation_endpoint_auth_methods_supported"] = ["client_secret_post", "client_secret_basic"]
+ claims.setdefault("revocation_endpoint_auth_methods_supported",
+ ["client_secret_post", "client_secret_basic"])
self.validate_metadata(claims, "revocation_endpoint_auth_methods_supported", is_list=True)
self.validate_metadata(claims, "revocation_endpoint_auth_signing_alg_values_supported", is_list=True)
self.validate_metadata(claims, "revocation_endpoint", is_required=True, is_url=True)
def validate_metadata_introspection(self, claims, endpoint):
- claims["introspection_endpoint_auth_methods_supported"] = ["client_secret_post", "client_secret_basic"]
+ claims.setdefault("introspection_endpoint_auth_methods_supported",
+ ["client_secret_post", "client_secret_basic"])
self.validate_metadata(claims, "introspection_endpoint_auth_methods_supported", is_list=True)
self.validate_metadata(claims, "introspection_endpoint_auth_signing_alg_values_supported", is_list=True)
diff --git a/tests/oauth2/rfc6749/endpoints/test_metadata.py b/tests/oauth2/rfc6749/endpoints/test_metadata.py
index a07ba63..301e846 100644
--- a/tests/oauth2/rfc6749/endpoints/test_metadata.py
+++ b/tests/oauth2/rfc6749/endpoints/test_metadata.py
@@ -22,6 +22,16 @@ class MetadataEndpointTest(TestCase):
self.assertIn("grant_types_supported", metadata.claims)
self.assertEqual(metadata.claims["grant_types_supported"], ["password"])
+ def test_token_endpoint_overridden(self):
+ endpoint = TokenEndpoint(None, None, grant_types={"password": None})
+ metadata = MetadataEndpoint([endpoint], {
+ "issuer": 'https://foo.bar',
+ "token_endpoint": "https://foo.bar/token",
+ "grant_types_supported": ["pass_word_special_provider"]
+ })
+ self.assertIn("grant_types_supported", metadata.claims)
+ self.assertEqual(metadata.claims["grant_types_supported"], ["pass_word_special_provider"])
+
def test_mandatory_fields(self):
metadata = MetadataEndpoint([], self.metadata)
self.assertIn("issuer", metadata.claims)