コード例 #1
0
def change_user(user: UserAuthenticationObject, username: str = None, first_name: str = None, last_name: str = None, password: str = None, email: str = None):
    userobj = get_user(user)
    utils.check_user_parameters(
        username, first_name, last_name, password, email)
    id = str(userobj.get("id"))
    if len(exec_sql(f"SELECT * FROM users WHERE id={id}")) != 1:
        raise UserDoesNotExist(f"User with id {id} not found")
    if username != None:
        try:
            exec_sql(
                f"UPDATE users SET username='******' WHERE id={id};")
            # transferring tasks mapped to old username to new one
            tasks = get_all_tasks(user)
            for task in tasks:
                change_task(user, task.get("id"), new_user=username)
        except IntegrityError:
            raise UserAlreadyExists(f"'{username}' already exists")
    if first_name != None:
        exec_sql(
            f"UPDATE users SET firstName='{first_name}' WHERE id={id};")
    if last_name != None:
        exec_sql(f"UPDATE users SET lastName='{last_name}' WHERE id={id};")
    if password != None:
        new_hash = sha3_512(
            bytes(password + utils.get_salt(), "utf-8")).hexdigest()
        exec_sql(
            f"UPDATE users SET hash='{new_hash}' WHERE id={id};")
    if email != None:
        exec_sql(f"UPDATE users SET email='{email}' WHERE id={id};")
        mailservice.register(username if username !=
                             None else userobj.get("username"), email, first_name if first_name != None else userobj.get("firstName"), last_name if last_name != None else userobj.get("lastName"), userobj.get("djoined"), verification=True)
        exec_sql(f"UPDATE users SET verified=0 WHERE email='{email}';")
    logger.debug(f"changed user with (previous) username {user.username}")
コード例 #2
0
def create_user(username: str, first_name: str, last_name: str, password: str, email: str, verbose=False):
    """Create user in database

    Note: This handles hashing the password
    """
    try:
        utils.check_user_parameters(
            username, first_name, last_name, password, email)
        salt = utils.get_salt()
        hash = sha3_512(bytes(password + salt, "utf-8")).hexdigest()
        dn = datetime.datetime.now().isoformat(timespec='seconds')
        uao = None
        if verbose:
            logger.debug("\nCreating user:"******"username": username, "first name": first_name,
                       "last name": last_name, "email": email, "joined": dn, "verified": False}, logger=logger)
        else:
            logger.debug(f"Creating user: {username}")
        try:
            result = exec_sql(
                f"INSERT INTO users (username, firstName, lastName, hash, salt, email, joined, verified) VALUES ('{username}', '{first_name}', '{last_name}', '{hash}', '{salt}', '{email}', '{dn}', '0')", verbose=True)
            not_verify = mailservice.register(username, email, first_name,
                                              last_name, dn, logger)
            # Registration skipped (config.json: skip-email-verification)
            if not not_verify:
                exec_sql(
                    f"UPDATE users SET verified=1 WHERE username='******'", True)
        except IntegrityError as e:
            print(e)
            s = str(e)
            if "username" in s:
                raise UserAlreadyExists(f"{username} already exists")
            elif "email" in s:
                raise EmailAlreadyLinked(
                    f"Email '{email}' is already linked to another account")
    except Exception as e:
        logger.handle_exception(e)
        raise e
コード例 #3
0
def test_check_user_parameters_invalid_email_2():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(email="@gmail.com")
コード例 #4
0
def test_check_user_parameters_invalid_email_3():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(email="notmymail.tech")
コード例 #5
0
def test_check_user_parameters_password_too_short():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(password="******")
コード例 #6
0
def test_check_user_parameters_invalid_email():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(email="[email protected]")
コード例 #7
0
def test_check_user_parameters_invalid_last_name():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(last_name="Interstell*r")
コード例 #8
0
def test_check_user_parameters_invalid_password():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(password="******")
コード例 #9
0
def test_check_user_parameters_invalid_first_name():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(first_name="Wolfr'ms")
コード例 #10
0
def test_check_user_parameters_username_too_short():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(username="******")
コード例 #11
0
def test_check_user_parameters_invalid_username():
    with pytest.raises(InvalidParameterError):
        check_user_parameters(username="******")
コード例 #12
0
def test_check_user_parameters_2():
    assert check_user_parameters(password="******"§$%&/(){}=?ß´`°^\\\/")
コード例 #13
0
def test_check_user_parameters():
    assert check_user_parameters("mithem", "Wolfram", "Einstein", "Hello123",
                                 "*****@*****.**")