Beispiel #1
0
    async def _find_parent_node_by_name(self,
                                        schema: GroupSchema) -> GroupPDModel:
        entry = await self.get_obj(name=schema.parent)
        if entry is None:
            raise DoesNotExist(f"Parent node `{schema.parent}` does't exist")

        return await self.get_schema.from_tortoise_orm(entry)
Beispiel #2
0
async def get_user_by_id(id: UUID4) -> ChatUser:
    """
    Get a specific chat user.
    """
    try:
        return await ChatUser.get(id=id)
    except DoesNotExist as e:
        raise DoesNotExist("Chat user was not found.") from e
Beispiel #3
0
    async def on_post(self, req: Request, resp: Response):
        # pylint: disable=C0111
        try:
            data = await req.media()
            login = data["login"]
            password = data["password"]
            logger.debug("User %s tries to login with password: %s", login, password)
            try:
                user = await User.get_or_none(login=login, is_verified=True, is_active=True)
                if user is None:
                    logger.debug(
                        "No user with login found %s. Or not verified or not active",
                        login,
                    )
                    resp.status_code = 401
                    resp.text = f"User with login {login} not found or wrong password."
                    return
            except Exception as error:
                logger.exception("Could not retrieve user object.")
                raise DoesNotExist(f"Could not get user {login}") from error

            # user = await User.get(login=login)
            logger.debug("Got user. Checking password")

            if not user.verify_password(password):
                logger.debug("Wrong password")
                raise BadPassword()

            # Remember the date, when the user logged in last
            user.last_login_at = datetime.utcnow()
            await user.save()

            # Create the authentication token.
            data = create_bearer_token(user.id, req.state.api.secret_key)
            data.send_json(resp)

        except BadPassword:
            logger.debug("Wrong password")
            resp.status_code = 401
            resp.text = f"User with login {login} provided wrong password."

        except DoesNotExist:
            logger.debug("No user found")
            resp.status_code = 401
            resp.text = f"User with login {login} not found or wrong password."

        except KeyError:
            resp.status_code = 400
            resp.text = "Bad formatted body content. Check the documentation"

        except Exception as error:  # pylint: disable=broad-except
            logger.error("Unexpected error %s", error)
            resp.status_code = 500
            logger.exception("Unexpected error")
            resp.text = str(error)
Beispiel #4
0
    async def _execute(self) -> MODEL:
        instance_list = await self.queryset

        if not instance_list:
            raise DoesNotExist("Object does not exist")

        if len(instance_list) == 1:
            return instance_list[0]

        raise MultipleObjectsReturned(
            "Multiple objects returned, expected exactly one")
async def test_connection_error(mocker):
    github_client_mock = mocker.patch.object(GithubClient,
                                             'get_user',
                                             new_callable=AsyncMock)
    github_client_mock.return_value = {}
    user_mock = mocker.patch.object(User, 'get', new_callable=AsyncMock)
    user_mock.side_effect = DoesNotExist()
    data_source = GithubDataSource(username='******')
    controller = CreateUserFromDataSource(data_source=data_source)

    assert await controller.create() is None
Beispiel #6
0
async def modify_user_password(user_id: int, new_password: str):
    """
    change a user's password

        :param user_id: the user's id
        :param new_password: the new password
    """
    user = await User.filter(id=user_id).first()
    if not user:
        raise DoesNotExist("user id does not exist")
    user.set_password(new_password)
    await user.save()
Beispiel #7
0
async def auth(request):
    if 'email' not in request.json:
        return json({'error': 'Must supply email.'}, status=403)
    if 'password' not in request.json:
        return json({'error': 'Must supply password.'}, status=403)
    if len(request.json['password']) < 8:
        return json({'error': 'Password too short.'}, status=403)

    unsanitized_email = request.json['email']
    unsanitized_password = request.json['password']

    async with in_transaction() as connection:
        user = await User.get_or_none(email=unsanitized_email).using_db(connection)
        if user is None:
            user = await User.create(name=unsanitized_email, email=unsanitized_email, password_hash=pwd_context.hash(unsanitized_password), using_db=connection)
        else:
            if not pwd_context.verify(unsanitized_password, user.password_hash):
                return json({'error': 'Your email/password combination is incorrect.'}, status=403)

    session_id = secrets.token_hex(32)
    try:
        if 'host_peer_id' not in request.json:
            raise DoesNotExist()

        unsanitized_peer_id = request.json['host_peer_id']
        if await user.hosts.all().get(id=unsanitized_peer_id).update(session_id=session_id) != 1:
            raise DoesNotExist()

        peer_id = unsanitized_peer_id
    except DoesNotExist:
        peer_id = rand_string(28)
        host = await Host.create(id=peer_id, session_id=session_id, user=user)

    data = {
        'instance_id': '',
        'user_id': user.id,
        'session_id': session_id,
        'host_peer_id': peer_id,
    }
    return json(data, status=201)
 async def _execute(self) -> List[MODEL]:
     instance_list = await self._db.executor_class(
         model=self.model,
         db=self._db,
         prefetch_map=self._prefetch_map,
         prefetch_queries=self._prefetch_queries,
     ).execute_select(self.query, custom_fields=list(self._annotations.keys()))
     if self._single:
         if len(instance_list) == 1:
             return instance_list[0]
         if not instance_list:
             if self._raise_does_not_exist:
                 raise DoesNotExist("Object does not exist")
             return None  # type: ignore
         raise MultipleObjectsReturned("Multiple objects returned, expected exactly one")
     return instance_list
Beispiel #9
0
 async def _execute(self):
     self.query = self._make_query()
     instance_list = await self._db.executor_class(
         model=self.model,
         db=self._db,
         prefetch_map=self._prefetch_map,
         prefetch_queries=self._prefetch_queries,
     ).execute_select(self.query,
                      custom_fields=list(self._annotations.keys()))
     if not instance_list:
         if self._get:
             raise DoesNotExist('Object does not exist')
         if self._single:
             return None
         return []
     elif self._get:
         if len(instance_list) > 1:
             raise MultipleObjectsReturned(
                 'Multiple objects returned, expected exactly one')
         return instance_list[0]
     elif self._single:
         return instance_list[0]
     return instance_list