def mutate_and_get_payload(cls, root, info, owner, labbook_name, username, permissions, client_mutation_id=None): #TODO(billvb/dmk) - Here "username" refers to the intended recipient username. # it should probably be renamed here and in the frontend to "collaboratorUsername" logged_in_username = get_logged_in_username() lb = InventoryManager().load_labbook(logged_in_username, owner, labbook_name, author=get_logged_in_author()) # TODO: Future work will look up remote in LabBook data, allowing user to select remote. default_remote = lb.client_config.config['git']['default_remote'] admin_service = None for remote in lb.client_config.config['git']['remotes']: if default_remote == remote: admin_service = lb.client_config.config['git']['remotes'][ remote]['admin_service'] break # Extract valid Bearer token if "HTTP_AUTHORIZATION" in info.context.headers.environ: token = parse_token( info.context.headers.environ["HTTP_AUTHORIZATION"]) else: raise ValueError( "Authorization header not provided. " "Must have a valid session to query for collaborators") if permissions == 'readonly': perm = ProjectPermissions.READ_ONLY elif permissions == 'readwrite': perm = ProjectPermissions.READ_WRITE elif permissions == 'owner': perm = ProjectPermissions.OWNER else: raise ValueError(f"Unknown permission set: {permissions}") mgr = GitLabManager(default_remote, admin_service, token) existing_collabs = mgr.get_collaborators(owner, labbook_name) if username not in [n[1] for n in existing_collabs]: logger.info(f"Adding user {username} to {owner}/{labbook_name}" f"with permission {perm}") mgr.add_collaborator(owner, labbook_name, username, perm) else: logger.warning(f"Changing permission of {username} on" f"{owner}/{labbook_name} to {perm}") mgr.delete_collaborator(owner, labbook_name, username) mgr.add_collaborator(owner, labbook_name, username, perm) create_data = {"owner": owner, "name": labbook_name} return AddLabbookCollaborator(updated_labbook=Labbook(**create_data))
def mutate_and_get_payload(cls, root, info, owner, dataset_name, username, client_mutation_id=None): logged_in_username = get_logged_in_username() ds = InventoryManager().load_dataset(logged_in_username, owner, dataset_name, author=get_logged_in_author()) # TODO: Future work will look up remote in LabBook data, allowing user to select remote. default_remote = ds.client_config.config['git']['default_remote'] admin_service = None for remote in ds.client_config.config['git']['remotes']: if default_remote == remote: admin_service = ds.client_config.config['git']['remotes'][ remote]['admin_service'] break # Extract valid Bearer token if "HTTP_AUTHORIZATION" in info.context.headers.environ: token = parse_token( info.context.headers.environ["HTTP_AUTHORIZATION"]) else: raise ValueError( "Authorization header not provided. Must have a valid session to query for collaborators" ) # Add collaborator to remote service mgr = GitLabManager(default_remote, admin_service, token) mgr.delete_collaborator(owner, dataset_name, username) create_data = {"owner": owner, "name": dataset_name} return DeleteDatasetCollaborator(updated_dataset=DatasetObject( **create_data))