From 6cc72a11ea27ba1ebfd47c85e8c9b8bef7f2db7f Mon Sep 17 00:00:00 2001 From: Nicodemus E Allen-Tonar Date: Tue, 28 Mar 2017 15:09:01 -0700 Subject: [PATCH 1/2] Add auth0.v2.management.resource_servers --- auth0/__init__.py | 2 +- auth0/v2/management/auth0.py | 2 + auth0/v2/management/resource_servers.py | 126 ++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 auth0/v2/management/resource_servers.py diff --git a/auth0/__init__.py b/auth0/__init__.py index 3f390799..668c3446 100644 --- a/auth0/__init__.py +++ b/auth0/__init__.py @@ -1 +1 @@ -__version__ = '2.0.1' +__version__ = '2.0.2' diff --git a/auth0/v2/management/auth0.py b/auth0/v2/management/auth0.py index c27a03f2..2886e07c 100644 --- a/auth0/v2/management/auth0.py +++ b/auth0/v2/management/auth0.py @@ -9,6 +9,7 @@ from .tickets import Tickets from .users import Users from .tenants import Tenants +from .resource_servers import ResourceServers class Auth0(object): @@ -34,3 +35,4 @@ def __init__(self, domain, token): self.tickets = Tickets(domain, token) self.users = Users(domain, token) self.tenants = Tenants(domain, token) + self.resource_servers = ResourceServers(domain, token) diff --git a/auth0/v2/management/resource_servers.py b/auth0/v2/management/resource_servers.py new file mode 100644 index 00000000..cb74772f --- /dev/null +++ b/auth0/v2/management/resource_servers.py @@ -0,0 +1,126 @@ +from .rest import RestClient + + +class ResourceServers(object): + + """Auth0 resource servers (APIs in dashboard) + + Args: + domain (str): Your Auth0 domain, e.g: 'username.auth0.com' + + token (str): An API token created with your account's global + keys. You can create one by using the token generator in the + API Explorer: https://auth0.com/docs/api/v2 + + telemetry (bool, optional): Enable or disable Telemetry + (defaults to True) + """ + + def __init__(self, domain, token, telemetry=True): + self.domain = domain + self.client = RestClient(jwt=token, telemetry=telemetry) + + def _url(self, id=None): + if id is not None: + return ('https://%s/api/v2/resource-servers/%s' % (self.domain, id)) + else: + return ('https://%s/api/v2/resource-servers' % (self.domain)) + + def all(self, fields=[], include_fields=True): + """Retrieves a list of all resource servers. + + Requires the read:resource_servers Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/get_resource_servers + """ + return self.client.get(self._url()) + + def create(self, body): + """Create a new resource server. + + Requires the create:resource_servers Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/post_resource_servers + + Args: + body: { + # (required, sets "audience") The audience identifier of the resource server. Definitely different than 'id', which is provided by this call. + "identifier": "", + + # (optional) The name of the resource server. Must contain at least one character. Does not allow '<' or '>' + "name": "", + + # (optional) The algorithm used to sign tokens ['HS256' or 'RS256'] + "signing_alg": "", + + # (optional) The secret used to sign tokens when using symmetric algorithms + "signing_secret": "", + + # (optional) The amount of time (in seconds) that the token will be valid after being issued + "token_lifetime": 0, + + # (optional) An exhaustive list of all scopes grantable on this resource server. + "scopes": [ + "scope" + ], + } + """ + return self.client.post(self._url(), data=body) + + def get(self, id): + """Retrieves a resource server by its id. + + Requires the read:resource_servers Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/get_resource_servers_by_id + + Args: + id (str): Id of the resource server to get. + """ + return self.client.get(self._url(id)) + + def delete(self, id): + """Deletes a resource server. + + Requires the delete:resource_servers Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/delete_resource_servers_by_id + + Args: + id (str): Identifier of client to delete. + """ + return self.client.delete(self._url(id)) + + def update(self, id, body): + """Modifies a client. + + Requires the update:resource_servers Auth0 Management API scope. + + Note: The body MUST NOT contain "id" or "identifier", so if you are calling this on the results from a get or create, first use + `del result["id"] + del result["identifier"]` + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/patch_resource_servers_by_id + + Args: + id (str): Resource server idenitifier. + body: { + # (optional) The name of the resource server. Must contain at least one character. Does not allow '<' or '>' + "name": "", + + # (optional) The algorithm used to sign tokens ['HS256' or 'RS256'] + "signing_alg": "", + + # (optional) The secret used to sign tokens when using symmetric algorithms + "signing_secret": "", + + #(optional) The amount of time (in seconds) that the token will be valid after being issued + "token_lifetime": 0, + + # (optional) An exhaustive list of all scopes grantable on this resource server. + "scopes": [ + {"value":"read:testscope", "description":"My test scope!"}, + ], + } + """ + return self.client.patch(self._url(id), data=body) From ef6d00fa3f54c4683a972ff3b6d749e574bb2fcf Mon Sep 17 00:00:00 2001 From: Nicodemus E Allen-Tonar Date: Tue, 28 Mar 2017 18:07:36 -0700 Subject: [PATCH 2/2] Add client_grants --- auth0/v2/management/auth0.py | 2 + auth0/v2/management/client_grants.py | 108 ++++++++++++++++++++++++ auth0/v2/management/resource_servers.py | 6 +- 3 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 auth0/v2/management/client_grants.py diff --git a/auth0/v2/management/auth0.py b/auth0/v2/management/auth0.py index 2886e07c..e76dc64b 100644 --- a/auth0/v2/management/auth0.py +++ b/auth0/v2/management/auth0.py @@ -10,6 +10,7 @@ from .users import Users from .tenants import Tenants from .resource_servers import ResourceServers +from .client_grants import ClientGrants class Auth0(object): @@ -36,3 +37,4 @@ def __init__(self, domain, token): self.users = Users(domain, token) self.tenants = Tenants(domain, token) self.resource_servers = ResourceServers(domain, token) + self.client_grants = ClientGrants(domain, token) diff --git a/auth0/v2/management/client_grants.py b/auth0/v2/management/client_grants.py new file mode 100644 index 00000000..9cceac7f --- /dev/null +++ b/auth0/v2/management/client_grants.py @@ -0,0 +1,108 @@ +from .rest import RestClient + + +class ClientGrants(object): + + """Auth0 client grants + + Args: + domain (str): Your Auth0 domain, e.g: 'username.auth0.com' + + token (str): An API token created with your account's global + keys. You can create one by using the token generator in the + API Explorer: https://auth0.com/docs/api/v2 + + telemetry (bool, optional): Enable or disable Telemetry + (defaults to True) + """ + + def __init__(self, domain, token, telemetry=True): + self.domain = domain + self.client = RestClient(jwt=token, telemetry=telemetry) + + def _url(self, id=None): + if id is not None: + return ('https://%s/api/v2/client-grants/%s' % (self.domain, id)) + else: + return ('https://%s/api/v2/client-grants' % (self.domain)) + + def all(self, audience=None): + """Retrieves a list of all client grants. + + Requires the read:client_grants Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Client_Grants/get_client_grants + Args: + audience: "" # filter by the audience (resource_servers.identifier) to authenticate against. + """ + params = {"audience": audience} + return self.client.get(self._url(), params=params) + + def create(self, body): + """Create a new client grant. + + Requires the create:client_grants Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Client_Grants/post_client_grants + + Args: + body: { + # (required) The client ID to grant to + "client_id": "", + + # (required) The audience (resource_servers.identifier) to authenticate against. + "audience": "", + + # The scope values for audience to grant to this client. + "scope": [ + "read:testscope", + ] + } + """ + return self.client.post(self._url(), data=body) + + def delete(self, id): + """Deletes a client grant. + + Requires the delete:client_grants Auth0 Management API scope. + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/delete_client_grants_by_id + + Args: + id (str): Id of the client grant to delete. + """ + return self.client.delete(self._url(id)) + + def update(self, id, body): + """Modifies a client. + + Requires the update:client_grants Auth0 Management API scope. + + Note: The body MUST NOT contain "id" or "identifier", so if you are calling this on the results from a get or create, first use + `del result["id"] + del result["identifier"]` + + See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/patch_client_grants_by_id + + Args: + id (str): Resource server idenitifier. + body: { + # (optional) The name of the client grant. Must contain at least one character. Does not allow '<' or '>' + "name": "", + + # (optional) The algorithm used to sign tokens ['HS256' or 'RS256'] + "signing_alg": "", + + # (optional) The secret used to sign tokens when using symmetric algorithms + "signing_secret": "", + + #(optional) The amount of time (in seconds) that the token will be valid after being issued + "token_lifetime": 0, + + # (optional) An exhaustive list of all scopes grantable on this client grant. + "scopes": [ + {"value":"read:testscope", "description":"My test scope!"}, + ], + } + """ + return self.client.patch(self._url(id), data=body) diff --git a/auth0/v2/management/resource_servers.py b/auth0/v2/management/resource_servers.py index cb74772f..a10bf280 100644 --- a/auth0/v2/management/resource_servers.py +++ b/auth0/v2/management/resource_servers.py @@ -26,7 +26,7 @@ def _url(self, id=None): else: return ('https://%s/api/v2/resource-servers' % (self.domain)) - def all(self, fields=[], include_fields=True): + def all(self): """Retrieves a list of all resource servers. Requires the read:resource_servers Auth0 Management API scope. @@ -87,7 +87,7 @@ def delete(self, id): See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/delete_resource_servers_by_id Args: - id (str): Identifier of client to delete. + id (str): Id of the client grant to delete. """ return self.client.delete(self._url(id)) @@ -103,7 +103,7 @@ def update(self, id, body): See: https://auth0.com/docs/api/management/v2#!/Resource_Servers/patch_resource_servers_by_id Args: - id (str): Resource server idenitifier. + id (str): Resource server id. body: { # (optional) The name of the resource server. Must contain at least one character. Does not allow '<' or '>' "name": "",