示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#5
0
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())
示例#6
0
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