READ_REPO = { 'scope': 'repo:read', 'icon': 'fa-hdd-o', 'title': 'View all visible repositories', 'description': ('This application will be able to view and pull all repositories visible to the ' 'granting user or robot account') } WRITE_REPO = { 'scope': 'repo:write', 'icon': 'fa-hdd-o', 'title': 'Read/Write to any accessible repositories', 'description': ('This application will be able to view, push and pull to all repositories to ' 'which the granting user or robot account has write access') } ADMIN_REPO = { 'scope': 'repo:admin', 'icon': 'fa-hdd-o', 'title': 'Administer Repositories', 'description': ('This application will have administrator access to all repositories to which ' 'the granting user or robot account has access') } CREATE_REPO = { 'scope': 'repo:create', 'icon': 'fa-plus', 'title': 'Create Repositories', 'description': ('This application will be able to create repositories in to any namespaces that ' 'the granting user or robot account is allowed to create repositories') } READ_USER = { 'scope': 'user:read', 'icon': 'fa-user', 'title': 'Read User Information', 'description': ('This application will be able to read user information such as username and ' 'email address.'), } ALL_SCOPES = {scope['scope']:scope for scope in (READ_REPO, WRITE_REPO, ADMIN_REPO, CREATE_REPO, READ_USER)} def scopes_from_scope_string(scopes): return {ALL_SCOPES.get(scope, {}).get('scope', None) for scope in scopes.split(',')} def validate_scope_string(scopes): decoded = scopes_from_scope_string(scopes) return None not in decoded and len(decoded) > 0 def is_subset_string(full_string, expected_string): """ Returns true if the scopes found in expected_string are also found in full_string. """ full_scopes = scopes_from_scope_string(full_string) expected_scopes = scopes_from_scope_string(expected_string) return expected_scopes.issubset(full_scopes) def get_scope_information(scopes_string): scopes = scopes_from_scope_string(scopes_string) scope_info = [] for scope in scopes: if scope: scope_info.append({ 'title': ALL_SCOPES[scope]['title'], 'scope': ALL_SCOPES[scope]['scope'], 'description': ALL_SCOPES[scope]['description'], 'icon': ALL_SCOPES[scope]['icon'], }) return scope_info