Source code for wxc_sdk.scopes

"""
utility function to parse scopes from various input forms
"""
import urllib.parse
from typing import Optional


[docs]def parse_scopes(scopes: Optional[str]) -> Optional[str]: """ parse various ways scopes might be defined. Examples: * 'https://webexapis.com/v1/authorize?client_id=Ce429631..d4835&response_type=code&redirect_uri=http%3A%2F %2Flocalhost%3A6001%2Fredirect&scope=spark%3Acalls_write%20spark%3Akms%20spark%3Apeople_read%20spark %3Acalls_read%20spark-admin%3Atelephony_config_read&state=set_state_here' * 'scope=spark%3Acalls_write%20spark%3Akms%20spark%3Apeople_read%20spark%3Acalls_read%20spark-admin %3Atelephony_config_read&state=set_state_here' * 'spark%3Acalls_write%20spark%3Akms%20spark%3Apeople_read%20spark%3Acalls_read%20spark-admin %3Atelephony_config_read&state=set_state_here' * 'spark%3Acalls_write%20spark%3Akms%20spark%3Apeople_read%20spark%3Acalls_read%20spark-admin %3Atelephony_config_read' * 'spark:calls_write spark:kms spark:people_read spark:calls_read spark-admin:telephony_config_read' :param scopes: scopes in one of the forms above :type scopes: str :return: space separated list of scopes :rtype: str """ if scopes is None: return None parsed = urllib.parse.urlparse(scopes) if parsed.query: # looks like we got full url query = parsed.query else: # else we assume that the string we got is a query or part of that query = scopes # try to parse the query and see whether the scope= part was in it parsed_query = urllib.parse.parse_qs(query) if 'scope' in parsed_query: return parsed_query['scope'][0] # .. else just unquote the string and return the part before the 1st "&" ... or the full string unquoted = urllib.parse.unquote(scopes) return unquoted.split('&')[0]