def test_cli_register_user(tmp_cli_runner): # NOQA from dtool_lookup_server.utils import user_exists, get_user_obj assert not user_exists("admin") from dtool_lookup_server.cli import register_user result = tmp_cli_runner.invoke(register_user, ["--is_admin", "admin"]) assert result.exit_code == 0 new_user = get_user_obj("admin") expected_content = { "username": "******", "is_admin": True, "search_permissions_on_base_uris": [], "register_permissions_on_base_uris": [] } assert new_user.as_dict() == expected_content tmp_cli_runner.invoke(register_user, ["dopey"]) new_user = get_user_obj("dopey") expected_content = { "username": "******", "is_admin": False, "search_permissions_on_base_uris": [], "register_permissions_on_base_uris": [] } assert new_user.as_dict() == expected_content result = tmp_cli_runner.invoke(register_user, ["dopey"]) assert result.exit_code != 0 assert "User 'dopey' already registered" in result.output
def register(): """Register a user in the dtool lookup server. The user in the Authorization token needs to be admin. Returns 404 for non-admins. """ username = get_jwt_identity() data = request.get_json() try: user = get_user_obj(username) except AuthenticationError: # Unregistered users should see 404. abort(404) # Non admin users should see 404. if not user.is_admin: abort(404) # # Make it idempotent. # if base_uri_exists(base_uri): # return "", 201 # There should be some validation of the input here... register_users(data) return "", 201
def register(): """Register a base URI. The user needs to be admin. Returns 404 for non-admins. """ username = get_jwt_identity() data = request.get_json() base_uri = data["base_uri"] try: user = get_user_obj(username) except AuthenticationError: # Unregistered users should see 404. abort(404) # Non admin users should see 404. if not user.is_admin: abort(404) # Make it idempotent. if base_uri_exists(base_uri): return "", 201 register_base_uri(base_uri) return "", 201
def get_annotation_key_info_by_user(username, filters): """Return dictionary with annotation keys and numbers of datasets given that key and any filters passed into the function. :param username: username :param filters: dictionary with filters :returns: dictionary where keys are annotation keys and values are the numbers of datasets with that key given the filter provided """ # Validate the user; raises AuthenticationError if invalid. get_user_obj(username) filters = preprocess_query_base_uris(username, filters) mongo_query = filter_dict_to_mongo_query(filters) # If there are no base URI the user has not got permissions to view any # datasets. if len(filters["base_uris"]) == 0: return {} cx = mongo.db[MONGO_COLLECTION].find(mongo_query, { "annotations": True, }) # There is probably a more clever way to do this using the # mongo query language. annotation_key_info = {} for ds in cx: if _exclude_dataset_info_filter(ds, filters): continue # Add the key information. for key in _extract_valid_keys(ds): annotation_key_info[key] = annotation_key_info.get(key, 0) + 1 return annotation_key_info
def base_uri_list(): """Register a base URI. The user needs to be admin. Returns 404 for non-admins. """ username = get_jwt_identity() try: user = get_user_obj(username) except AuthenticationError: # Unregistered users should see 404. abort(404) # Non admin users should see 404. if not user.is_admin: abort(404) return jsonify(list_base_uris())
def list_users(): """List the users in the dtool lookup server. The user in the Authorization token needs to be admin. Returns 404 for non-admins. """ username = get_jwt_identity() try: user = get_user_obj(username) except AuthenticationError: # Unregistered users should see 404. abort(404) # Non admin users should see 404. if not user.is_admin: abort(404) return jsonify(dtool_lookup_server.utils.list_users())
def register(): """Register a dataset. The user needs to have register permissions.""" username = get_jwt_identity() dataset_info = request.get_json() try: user = get_user_obj(username) except AuthenticationError: # User not registered in system. abort(401) if not dataset_info_is_valid(dataset_info): abort(409) try: base_uri = get_base_uri_obj(dataset_info["base_uri"]) except ValidationError: abort(409) if base_uri not in user.register_base_uris: abort(401) dataset_uri = register_dataset(dataset_info) return dataset_uri, 201