Пример #1
0
    def login(self, username, password) -> Token:
        """Exchange login credentials for a token"""

        with Session(self._engine, future=True) as session:
            user = session.execute(
                select(User).where(
                    User.username == username)).scalar_one_or_none()
            if not user:
                raise MissingUserError
            if user.deactivated:
                raise DeactivatedUserError
            if not check_password(password, user.password):
                raise AuthenticationError
            if not user.confirmed:
                raise UnconfirmedUserError
            token = get_token(user.id)
            return token
Пример #2
0
    def add_user(self, token: Token, user_details: Dict) -> UserDetails:
        """Adds a user to the database"""

        user_id, token = validate_token(token)
        if not self.check_if_username_is_unique(user_details["username"]):
            raise DuplicateUsernameError
        with Session(self._engine, future=True) as session:
            self._require_admin_user(
                user_id=user_id,
                session=session,
            )

            for field in user_details.keys():
                if field in PROTECTED_FIELDS:
                    raise UnauthorizedUserError

            # don't mutate original dict
            user_details = {
                **user_details,
                "id": str(uuid4()),
                "type": "contrib",
                "confirmed": False,
                "deactivated": False,
            }

            # handle password
            password = user_details["password"]
            user_details["password"] = encrypt(password)
            # create user object
            new_user = User(**user_details)

            session.add(new_user)
            session.commit()

            # TODO: when email service is enabled, add call here to send a token to
            # the provided email address.
            new_user_token = get_token(new_user.id)
            log.info(f"New User Token is: {new_user_token}")

            return token, new_user.to_dict()
Пример #3
0
def unconfirmed_user_token(unconfirmed_user_id):
    return get_token(unconfirmed_user_id)
Пример #4
0
def active_admin_token(admin_user_id):
    token = get_token(admin_user_id)
    return token
Пример #5
0
def active_token(user_id):
    token = get_token(user_id)
    return token
Пример #6
0
def test_get_token_with_force_refresh():
    user_id = "my_user_id_123"
    token = get_token(user_id)
    new_user_id, new_token = validate_token(token, force_refresh=True)
    assert user_id == new_user_id
    assert token is not new_token
Пример #7
0
def test_get_token():
    user_id = "my_user_id_123"
    token = get_token(user_id)
    new_user_id, new_token = validate_token(token)
    assert user_id == new_user_id
    assert token == new_token