예제 #1
0
    def resolve_user(self, info, user_id: str) -> User:

        user_repo = UserRepository()
        user_info = user_repo.get_user_by_id(user_id)

        return User(
            user_id=user_info.user_id,
            name=user_info.name,
            login=user_info.login,
            access_token=user_info.access_token
        )
예제 #2
0
    async def post(self):
        """
        ---
        description: Post User.
        tags:
        - User
        produces:
        - application/json
        responses:
           "200":
               description: User registered successful
           "404":
               description: User not found
           "409":
               description: User already exists
        """
        params = await self.request.json()

        schema = {
            "login": {
                "required": True,
                "type": "string"
            },
            "password": {
                "required": True,
                "type": "string"
            },
        }
        await validate(params, schema)

        user_repository = UserRepository(self.db)
        user = await user_repository.get_by_login(params.get('login'))
        if not user:
            raise web.HTTPNotFound(reason='User not found')

        user = user[0]

        if not user.check_password(params.get('password')):
            raise web.HTTPBadRequest(reason='Wrong password')

        delattr(user, 'password')

        encoded = jwt.encode({'user': {
            'id': str(user.id),
            'login': user.login,
        }}, JWT_SECRET, algorithm='HS256')

        return web.json_response({
            "token": encoded,
        })
예제 #3
0
    async def get(self) -> web.Response:
        """
        ---
        description: User me (information.
        tags:
        - User
        produces:
        - application/json
        responses:
            "200":
               description: User info
            "404":
               description: User not found
        """
        repository = UserRepository(self.db)

        user = await repository.get_by_id(self.user.get('id'))

        if not user:
            raise web.HTTPNotFound(reason='User not found')

        return web.json_response(UserModelSerializer(user[0]).serialize())
class TestUserRepository(unittest.TestCase):
    @patch('src.repository.UserRepository.MongoConfiguration')
    def setUp(self, mongo_configuration_mock):
        self.__mongo_configuration_instance = mongo_configuration_mock.return_value
        self.__database = mongo_configuration_mock.database
        self.__user_repository = UserRepository()

    def test_should_add_new_user(self):
        new_user = UserLogin("user_id", "name", "login", "password")

        self.__user_repository.add_new_user(new_user)

        self.assertTrue(self.__mongo_configuration_instance.database.
                        user_collection.insert_one.called)

    def test_should_get_all_users(self):
        self.__user_repository.get_users()

        self.assertTrue(self.__mongo_configuration_instance.database.
                        user_collection.find.called)

    def test_should_get_user_by_id(self):
        self.__user_repository.get_user_by_id("5c7c0c22fd8a2f36f6cdea65")

        self.assertTrue(self.__mongo_configuration_instance.database.
                        user_collection.find.called)

    def test_should_update_access_token(self):
        user = UserLogin("5c7c0c22fd8a2f36f6cdea65", "name", "login",
                         "password")
        user.access_token = "access_token"

        self.__user_repository.set_access_token(user)

        self.assertTrue(self.__mongo_configuration_instance.database.
                        user_collection.update_one.called)
예제 #5
0
from src.domain.User import User
from werkzeug.security import check_password_hash, generate_password_hash
from src.repository.UserRepository import UserRepository

userRepository = UserRepository()


def authenticate(username, password):
    user = userRepository.findByUserName(username)
    # user = User.query.filter_by(username=username).first()
    if user and check_password_hash(user.password, password):
        return user


def identity(payload):
    user_id = payload['identity']
    return User.query.get(user_id)
예제 #6
0
    def resolve_users(self, info) -> list:

        user_repo = UserRepository()
        return user_repo.get_users()
 def setUp(self, mongo_configuration_mock):
     self.__mongo_configuration_instance = mongo_configuration_mock.return_value
     self.__database = mongo_configuration_mock.database
     self.__user_repository = UserRepository()
예제 #8
0
 def __init__(self):
     self.__user_repository = UserRepository()
     self.__access_token_business = AccessTokenBusiness()
     self.__logger = Logger().get_logger()
예제 #9
0
class UserBusiness:
    def __init__(self):
        self.__user_repository = UserRepository()
        self.__access_token_business = AccessTokenBusiness()
        self.__logger = Logger().get_logger()

    def add_new_user(self, user: UserLogin):
        self.__logger.info(
            f"Validating the insertion of new user: {user.login}")
        existent_user = self.__user_repository.get_user_by_login(user.login)

        if existent_user is not None:
            raise UserAlreadyExistsException()

        new_user = self.__user_repository.add_new_user(user)
        self.__logger.info(f"New user ID: {new_user.user_id}")
        return new_user

    def get_users(self):
        users = self.__user_repository.get_users()
        return users

    def get_user_by_id(self, user_id: str):
        user = self.__user_repository.get_user_by_id(user_id)

        if user is None:
            raise UserNotFoundException()

        return user

    def get_user_by_login(self, login: str):
        user = self.__user_repository.get_user_by_login(login)

        if user is None:
            raise UserNotFoundException()

        return user

    def authenticate(self, user: UserLogin):
        self.__logger.info(
            f"Login process for user - Authentication: {user.login}")

        user_login_information = self.__user_repository.get_user_by_login(
            user.login)

        if user_login_information is None:
            raise AuthenticationException()

        if Validator.is_wrong_credentials(user, user_login_information):
            raise AuthenticationException()

        return user_login_information

    def get_access_token(self, user: UserLogin):
        self.__logger.info(
            f"Login process for user - Access Token: {user.user_id}")
        access_token = self.__access_token_business.create_access_token(user)
        user.access_token = access_token

        created = self.__user_repository.set_access_token(user)

        if not created:
            raise AccessTokenException()

        return user

    def validate_access_token(self, user: UserLogin):
        self.__logger.info(f"Validating access token for user: {user.login}")
        user_login_information = self.__user_repository.get_user_by_login(
            user.login)

        if Validator.is_wrong_access_token(user, user_login_information):
            raise NonValidAccessTokenException()