Пример #1
0
def validate_str_arg(arg, arg_name):
    """
    Check if the argument is a non-empty string.
    """

    if arg is None:
        raise BusinessError(f"Brakujące dane: {arg_name}")

    if not isinstance(arg, str):
        raise ValueError(f"{arg_name} must be a string value!")

    if not arg:
        raise BusinessError(f"Brakujące dane: {arg_name}")
Пример #2
0
def _get_and_validate_exp_time():
    exp_time = properties.get_token_expiration_time()

    if not exp_time:
        raise BusinessError(
            f"Property {PROPERTY_TOKEN_EXPIRATION_TIME} missing!")

    return int(exp_time)
Пример #3
0
def _is_test_bearer_enabled():
    test_bearer_enabled = properties.get_test_bearer_enabled()

    if test_bearer_enabled is None:
        raise BusinessError(
            f"Property {PROPERTY_TEST_BEARER_ENABLED} missing!")

    return bool(test_bearer_enabled)
Пример #4
0
def validate_int_arg(arg, arg_name):
    """
    Check if the argument is an integer.
    """

    if arg is None:
        raise BusinessError(f"Brakujące dane: {arg_name}")

    if not isinstance(arg, int):
        raise ValueError(f"{arg_name} must be an int value!")
Пример #5
0
def validate_list_arg(arg, arg_name):
    """
    Check if the argument is a list.
    """

    if arg is None:
        raise BusinessError(f"Brakujące dane: {arg_name}")

    if not isinstance(arg, list):
        raise ValueError(f"{arg_name} must be a list!")
Пример #6
0
def log_in(user_name, password):
    """
    Authenticate the user and return the current user data with authentication token.
    """

    user = user_service.get_user_by_user_name(user_name)

    if user is None:
        raise BusinessError(f"User {user_name} does not exist!")

    if not werkzeug.security.check_password_hash(user["password_hash"],
                                                 password):
        raise BusinessError(f"Incorrect password!")

    payload = _create_jwt_payload(user_name)
    token = jwt.encode(payload,
                       properties.get_app_secret_key(),
                       algorithm="HS256")
    user_roles = user_roles_service.get_user_roles(user_name)

    return _create_log_in_response(user_name, user_roles, token)
Пример #7
0
def get_user_roles(user_name):
    """
    Get all roles that the given user has.
    """

    validate_str_arg(user_name, "User name")

    user = user_repository.read_by_user_name(user_name)

    if not user:
        raise BusinessError(f"User {user_name} does not exist!")

    return [role.role_name for role in user.user_roles]
Пример #8
0
def get_campaigns_by_gm_id(gm_id):
    """
    Get the campaigns belonging to the game master of the given ID.
    """

    validate_int_arg(gm_id, "ID mistrza gry")

    if user_service.get_user_by_id(gm_id) is None:
        raise BusinessError(f"Użytkownik o ID {gm_id} nie istnieje!")

    campaigns = campaign_repository.read_by_gm_id(gm_id)

    result = list()

    for campaign in campaigns:
        result.append(_map_campaign_to_dict(campaign))

    return result
Пример #9
0
def check_if_user_related_to_campaign(user_id, campaign_id):
    """
    Check if the user of the given ID is somehow related to the campaign
    of the given ID, i.e. if he/she is its game master or participates
    as a player.

    TODO For now only game masters are checked.
    """

    validate_int_arg(user_id, "ID użytkownika")
    validate_int_arg(campaign_id, "ID kampanii")

    campaign = campaign_repository.read_by_id(campaign_id)

    if campaign is None:
        raise BusinessError(f"Kampania o ID {campaign_id} nie istnieje!")

    return campaign.game_master.id == user_id
Пример #10
0
def create_user(editor_name, user_name, password, roles=None):
    """
    Create a new user with the given name and password, granting him/her the given roles.
    """

    validate_str_arg(editor_name, "Nazwa użytkownika wprowadzającego zmianę")
    validate_str_arg(user_name, "Nazwa użytkownika")
    validate_str_arg(password, "Hasło")
    validate_list_arg_nullable(roles, "Role")

    if user_repository.read_by_user_name(user_name) is not None:
        raise BusinessError("Użytkownik {} już istnieje!".format(user_name))

    timestamp = datetime.utcnow()
    user = _create_user_entity(user_name, password, timestamp)
    _grant_roles(user, roles, timestamp)
    _create_and_assing_history_entry_creation(user, editor_name, timestamp)

    user_repository.persist(user)
Пример #11
0
def get_campaign_details(campaign_id):
    """
    Get the details of a campaign.
    """

    validate_int_arg(campaign_id, "ID kampanii")

    campaign = campaign_repository.read_by_id(campaign_id)
    if campaign is None:
        raise BusinessError(f"Kampania o ID {campaign_id} nie istnieje!")

    current_date = campaign.begin_date + timedelta(days=campaign.passed_days)

    return {
        "id": campaign.id,
        "title": campaign.campaign_name,
        "creationDate": campaign.created_on.isoformat(),
        "startDate": campaign.begin_date.isoformat(),
        "passedDays": campaign.passed_days,
        "currentDate": current_date.isoformat(),
        "gameMasterId": campaign.game_master.id,
        "gameMasterName": campaign.game_master.user_name
    }
Пример #12
0
def grant_roles(editor_name, user_name, roles):
    """
    Grant the roles to the given user.
    """

    validate_str_arg(editor_name, "Editor name")
    validate_str_arg(user_name, "User name")
    validate_list_arg(roles, "Roles")

    user = user_repository.read_by_user_name(user_name)

    if not user:
        raise BusinessError(f"User {user_name} does not exist!")

    previous_user_roles = [role.role_name for role in user.user_roles]

    timestamp = datetime.utcnow()

    for role in roles:
        if role not in previous_user_roles:
            new_role = UserRoleEntity()
            new_role.created_on = timestamp
            new_role.modified_on = timestamp
            new_role.opt_lock = 0
            new_role.role_name = role
            new_role.user = user

            user_history_entry = UserHistoryEntity()
            user_history_entry.created_on = timestamp
            user_history_entry.modified_on = timestamp
            user_history_entry.opt_lock = 0
            user_history_entry.editor_name = editor_name
            user_history_entry.message = f"Przyznano rolę '{role}'."
            user_history_entry.user = user

    user_repository.persist(user)