Example #1
0
 def test_unit__create_minimal_user_and_set_email__ok__nominal_case(self):
     u = User()
     u.email = "bob@bob"
     u.password = "******"
     u.auth_type = AuthType.INTERNAL
     u.display_name = "bob"
     api = UserApi(current_user=u, session=self.session, config=self.app_config)
     assert u.email == "bob@bob"
     api.set_email(u, "pass", "newbobemail@bob")
     assert u is not None
     assert u.email == "newbobemail@bob"
Example #2
0
    def _remote_user_authenticate(
        self,
        user: User,
        email: str,
    ) -> User:
        """
        Authenticate with remote_auth, return authenticated user
        or raise Exception like WrongAuthTypeForUser,
        UserDoesNotExist or UserAuthenticatedIsNotActive
        :param user: user to check, can be none if user not found, will try
         to create new user if none
        :param email: email of the user
        """
        auth_type = AuthType.REMOTE

        # INFO - G.M - 2018-12-12 - Do not authenticate user with auth_type
        # different from REMOTE
        if user and user.auth_type not in [auth_type, AuthType.UNKNOWN]:
                raise WrongAuthTypeForUser(
                    'User "{}" auth_type is {} not {}'.format(
                        email,
                        user.auth_type.value,
                        auth_type.value
                    )
                )

        # INFO - G.M - 2018-12-12 - Create new user
        if not user:
            groups = None
            self.create_user(
                email=email,
                groups=groups,
                auth_type=AuthType.REMOTE,
                do_save=True,
                do_notify=False
            )
            transaction.commit()
            # INFO - G.M - 2018-12-02 - get new created user
            user = self.get_one_by_email(email)

        if user.is_deleted:
            raise UserDoesNotExist('This user has been deleted')  # nopep8

        if not user.is_active:
            raise UserAuthenticatedIsNotActive('This user is not activated')  # nopep8

        if user.auth_type == AuthType.UNKNOWN :
            user.auth_type = auth_type
        return user
Example #3
0
 def test_unit__create_minimal_user_and_set_password__ok__nominal_case(self):
     u = User()
     u.email = 'bob@bob'
     u.password = '******'
     u.auth_type = AuthType.INTERNAL
     u.display_name = 'bob'
     api = UserApi(
         current_user=u,
         session=self.session,
         config=self.app_config,
     )
     assert u.email == 'bob@bob'
     api.set_email(u,'pass','newbobemail@bob')
     assert u is not None
     assert u.email == 'newbobemail@bob'
Example #4
0
 def test_unit__create_minimal_user_and_set_password__ok__nominal_case(
         self):
     u = User()
     u.email = 'bob@bob'
     u.password = '******'
     u.auth_type = AuthType.INTERNAL
     u.display_name = 'bob'
     api = UserApi(
         current_user=u,
         session=self.session,
         config=self.app_config,
     )
     assert u.email == 'bob@bob'
     api.set_email(u, 'pass', 'newbobemail@bob')
     assert u is not None
     assert u.email == 'newbobemail@bob'
Example #5
0
 def test_unit__create_minimal_user_and_set_password__ok__nominal_case(
     self, session, app_config
 ):
     u = User()
     u.email = "bob@bob"
     u.password = "******"
     u.auth_type = AuthType.INTERNAL
     u.display_name = "bob"
     api = UserApi(current_user=u, session=session, config=app_config)
     assert u.validate_password("pass")
     api.set_password(u, "pass", "newpass", "newpass")
     assert u is not None
     assert u.email == "bob@bob"
     assert u.display_name == "bob"
     assert u.validate_password("newpass")
     assert not u.validate_password("pass")
Example #6
0
    def _remote_user_authenticate(
        self,
        user: User,
        email: str,
    ) -> User:
        """
        Authenticate with remote_auth, return authenticated user
        or raise Exception like WrongAuthTypeForUser,
        UserDoesNotExist or UserAuthenticatedIsNotActive
        :param user: user to check, can be none if user not found, will try
         to create new user if none
        :param email: email of the user
        """
        auth_type = AuthType.REMOTE

        # INFO - G.M - 2018-12-12 - Do not authenticate user with auth_type
        # different from REMOTE
        if user and user.auth_type not in [auth_type, AuthType.UNKNOWN]:
            raise WrongAuthTypeForUser(
                'User "{}" auth_type is {} not {}'.format(
                    email, user.auth_type.value, auth_type.value))

        # INFO - G.M - 2018-12-12 - Create new user
        if not user:
            groups = None
            self.create_user(email=email,
                             groups=groups,
                             auth_type=AuthType.REMOTE,
                             do_save=True,
                             do_notify=False)
            transaction.commit()
            # INFO - G.M - 2018-12-02 - get new created user
            user = self.get_one_by_email(email)

        if user.is_deleted:
            raise UserDoesNotExist('This user has been deleted')  # nopep8

        if not user.is_active:
            raise UserAuthenticatedIsNotActive(
                'This user is not activated')  # nopep8

        if user.auth_type == AuthType.UNKNOWN:
            user.auth_type = auth_type
        return user
Example #7
0
    def update(
        self,
        user: User,
        name: str = None,
        email: str = None,
        password: str = None,
        timezone: str = None,
        lang: str = None,
        auth_type: AuthType = None,
        groups: typing.Optional[typing.List[Group]] = None,
        do_save=True,
    ) -> User:
        validator = TracimValidator()
        validator.add_validator('name', name, user_public_name_validator)
        validator.add_validator('password', password, user_password_validator)
        validator.add_validator('email', email, user_email_validator)
        validator.add_validator('timezone', timezone, user_timezone_validator)
        validator.add_validator('lang', lang, user_lang_validator)
        validator.validate_all()

        if name is not None:
            user.display_name = name

        if auth_type is not None:
            if auth_type not in [
                    AuthType.UNKNOWN, AuthType.REMOTE
            ] and not auth_type in self._config.AUTH_TYPES:
                raise UserAuthTypeDisabled(
                    'Can\'t update user "{}" auth_type with unavailable value "{}".'
                    .format(user.email, auth_type))
            user.auth_type = auth_type

        if email is not None and email != user.email:
            self._check_email_modification_allowed(user)
            self._check_email(email)
            user.email = email

        if password is not None:
            self._check_password_modification_allowed(user)
            user.password = password

        if timezone is not None:
            user.timezone = timezone

        if lang is not None:
            user.lang = lang

        if groups is not None:
            if self._user and self._user == user:
                raise UserCantChangeIsOwnProfile(
                    "User {} can't change is own profile".format(user.user_id))
            # INFO - G.M - 2018-07-18 - Delete old groups
            for group in user.groups:
                if group not in groups:
                    user.groups.remove(group)
            # INFO - G.M - 2018-07-18 - add new groups
            for group in groups:
                if group not in user.groups:
                    user.groups.append(group)

        if do_save:
            self.save(user)

        return user
Example #8
0
    def update(
        self,
        user: User,
        name: str = None,
        email: str = None,
        password: str = None,
        timezone: str = None,
        lang: str = None,
        auth_type: AuthType = None,
        profile: typing.Optional[Profile] = None,
        allowed_space: typing.Optional[int] = None,
        username: str = None,
        do_save=True,
    ) -> User:
        """Update given user instance with given parameters"""
        validator = TracimValidator()
        validator.add_validator("name", name, user_public_name_validator)
        validator.add_validator("password", password, user_password_validator)
        validator.add_validator("email", email, user_email_validator)
        validator.add_validator("username", name, user_username_validator)
        validator.add_validator("timezone", timezone, user_timezone_validator)
        validator.add_validator("lang", lang, user_lang_validator)
        validator.validate_all()

        if name is not None:
            user.display_name = name

        if auth_type is not None:
            if (auth_type not in [AuthType.UNKNOWN, AuthType.REMOTE]
                    and auth_type not in self._config.AUTH_TYPES):
                raise UserAuthTypeDisabled(
                    'Can\'t update user "{}" auth_type with unavailable value "{}".'
                    .format(user.login, auth_type))
            user.auth_type = auth_type

        if email is not None:
            lowercase_email = email.lower()
            if lowercase_email != user.email:
                self._check_email_modification_allowed(user)
                self._check_email(lowercase_email)
                user.email = lowercase_email

        if username is not None:
            if username != user.username:
                self.check_username(username)
                user.username = username

        if password is not None:
            self._check_password_modification_allowed(user)
            user.password = password

        if timezone is not None:
            user.timezone = timezone

        if lang is not None:
            user.lang = lang

        if profile is not None:
            if self._user and self._user == user:
                raise UserCantChangeIsOwnProfile(
                    "User {} can't change is own profile".format(user.user_id))
            user.profile = profile

        if allowed_space is not None:
            user.allowed_space = allowed_space

        if do_save:
            self.save(user)

        return user
Example #9
0
    def update(
            self,
            user: User,
            name: str=None,
            email: str=None,
            password: str=None,
            timezone: str=None,
            lang: str=None,
            auth_type: AuthType = None,
            groups: typing.Optional[typing.List[Group]]=None,
            do_save=True,
    ) -> User:
        validator = TracimValidator()
        validator.add_validator('name', name, user_public_name_validator)
        validator.add_validator('password', password, user_password_validator)
        validator.add_validator('email', email, user_email_validator)
        validator.add_validator('timezone', timezone, user_timezone_validator)
        validator.add_validator('lang', lang, user_lang_validator)
        validator.validate_all()

        if name is not None:
            user.display_name = name

        if auth_type is not None:
            if auth_type not in [AuthType.UNKNOWN, AuthType.REMOTE] and not auth_type in self._config.AUTH_TYPES:
                raise UserAuthTypeDisabled(
                    'Can\'t update user "{}" auth_type with unavailable value "{}".'.format(
                        user.email,
                        auth_type
                    )
                )
            user.auth_type = auth_type

        if email is not None and email != user.email:
            self._check_email_modification_allowed(user)
            self._check_email(email)
            user.email = email

        if password is not None:
            self._check_password_modification_allowed(user)
            user.password = password

        if timezone is not None:
            user.timezone = timezone

        if lang is not None:
            user.lang = lang

        if groups is not None:
            if self._user and self._user == user:
                raise UserCantChangeIsOwnProfile(
                    "User {} can't change is own profile".format(user.user_id)
                )
            # INFO - G.M - 2018-07-18 - Delete old groups
            for group in user.groups:
                if group not in groups:
                    user.groups.remove(group)
            # INFO - G.M - 2018-07-18 - add new groups
            for group in groups:
                if group not in user.groups:
                    user.groups.append(group)

        if do_save:
            self.save(user)

        return user