Beispiel #1
0
 def take_app_action(self, parsed_args: argparse.Namespace,
                     app_context: AppEnvironment) -> None:
     # TODO - G.M - 05-04-2018 -Refactor this in order
     # to not setup object var outside of __init__ .
     self._session = app_context["request"].dbsession
     self._app_config = app_context["registry"].settings["CFG"]
     self._user_api = UserApi(current_user=None,
                              session=self._session,
                              config=self._app_config)
     user = self._user_api.get_one_by_login(parsed_args.login)
     profile = None
     if parsed_args.profile:
         profile = Profile.get_profile_from_slug(parsed_args.profile)
     try:
         user = self._user_api.update(
             user=user,
             email=parsed_args.email,
             name=parsed_args.public_name,
             password=parsed_args.password,
             timezone=parsed_args.timezone,
             username=parsed_args.username,
             allowed_space=parsed_args.allowed_space,
             profile=profile,
             do_save=True,
         )
         self._user_api.execute_created_user_actions(user)
     except TracimException as exc:
         self._session.rollback()
         print("Error: " + str(exc))
         print("User not updated.")
         raise exc
     print("User updated")
Beispiel #2
0
    def create_user(self, context, request: TracimRequest, hapic_data=None):
        """
        Create new user
        """
        app_config = request.registry.settings["CFG"]  # type: CFG
        uapi = UserApi(
            current_user=request.current_user,
            session=request.dbsession,
            config=app_config  # User
        )
        if hapic_data.body.profile:
            profile = Profile.get_profile_from_slug(hapic_data.body.profile)
        else:
            profile = None
        password = hapic_data.body.password
        if not password and hapic_data.body.email_notification:
            password = password_generator()

        user = uapi.create_user(
            auth_type=AuthType.UNKNOWN,
            email=hapic_data.body.email,
            password=password,
            timezone=hapic_data.body.timezone,
            lang=hapic_data.body.lang,
            name=hapic_data.body.public_name,
            do_notify=hapic_data.body.email_notification,
            allowed_space=hapic_data.body.allowed_space,
            profile=profile,
            do_save=True,
        )
        uapi.execute_created_user_actions(user)
        return uapi.get_user_with_context(user)
Beispiel #3
0
    def create_minimal_user(self,
                            email,
                            profile: typing.Optional[Profile] = None,
                            save_now=False) -> User:
        """Previous create_user method"""
        lowercase_email = email.lower() if email is not None else None
        validator = TracimValidator()
        validator.add_validator("email", lowercase_email, user_email_validator)
        validator.validate_all()
        self._check_email(lowercase_email)
        user = User()
        user.email = lowercase_email
        # TODO - G.M - 2018-11-29 - Check if this default_value can be
        # incorrect according to user_public_name_validator
        user.display_name = email.split("@")[0]
        user.created = datetime.datetime.utcnow()
        if not profile:
            profile = Profile.get_profile_from_slug(
                self._config.USER__DEFAULT_PROFILE)
        user.profile = profile

        self._session.add(user)

        if save_now:
            self._session.flush()

        return user
Beispiel #4
0
    def test_profile__ok__get_profile__from_slug__ok__nominal_case(self):
        profile = Profile.get_profile_from_slug("administrators")

        assert profile
        assert profile.slug
        assert isinstance(profile.slug, str)
        assert profile.id > 0
        assert isinstance(profile.id, int)
Beispiel #5
0
    def take_app_action(self, parsed_args: argparse.Namespace, app_context: AppEnvironment) -> None:
        # TODO - G.M - 05-04-2018 -Refactor this in order
        # to not setup object var outside of __init__ .
        self._session = app_context["request"].dbsession
        self._app_config = app_context["registry"].settings["CFG"]
        self._user_api = UserApi(current_user=None, session=self._session, config=self._app_config)
        user = self._proceed_user(parsed_args)
        if parsed_args.profile:
            user.profile = Profile.get_profile_from_slug(parsed_args.profile)

        print("User created/updated")
Beispiel #6
0
    def allowed_to_invite_new_user(self, email: str) -> bool:
        # INFO - G.M - 2018-10-25 - disallow account creation if no
        # email provided or email_notification disabled.
        if not email:
            return False
        if (not self._config.EMAIL__NOTIFICATION__ACTIVATED
                and self._config.NEW_USER__INVITATION__DO_NOTIFY):
            return False
        # INFO - G.M - 2018-10-25 - do not allow all profile to invite new user
        invite_minimal_profile = Profile.get_profile_from_slug(
            self._config.NEW_USER__INVITATION__MINIMAL_PROFILE)

        if not self._user.profile.id >= invite_minimal_profile.id:
            return False

        return True
Beispiel #7
0
 def set_profile(self, context, request: TracimRequest, hapic_data=None):
     """
     set user profile
     """
     app_config = request.registry.settings["CFG"]  # type: CFG
     uapi = UserApi(
         current_user=request.current_user, session=request.dbsession, config=app_config  # User
     )
     profile = Profile.get_profile_from_slug(hapic_data.body.profile)
     uapi.update(
         user=request.candidate_user,
         auth_type=request.candidate_user.auth_type,
         profile=profile,
         do_save=True,
     )
     return
Beispiel #8
0
    def create_minimal_user(
        self,
        email: typing.Optional[str] = None,
        username: typing.Optional[str] = None,
        profile: typing.Optional[Profile] = None,
        save_now=False,
    ) -> User:
        """Previous create_user method"""
        if not email:
            if self._config.EMAIL__REQUIRED:
                raise EmailRequired("Email is required to create an user")
            if not username:
                raise EmailOrUsernameRequired(
                    "Email or username is required to create an user")
        lowercase_email = email.lower() if email is not None else None
        validator = TracimValidator()
        validator.add_validator("email", lowercase_email, user_email_validator)
        validator.validate_all()
        if lowercase_email is not None:
            self._check_email(lowercase_email)
        if username is not None:
            self.check_username(username)
        user = User()
        user.email = lowercase_email
        user.username = username
        # TODO - G.M - 2018-11-29 - Check if this default_value can be
        # incorrect according to user_public_name_validator
        user.display_name = email.split("@")[0] if email else username
        user.created = datetime.datetime.utcnow()
        if not profile:
            profile = Profile.get_profile_from_slug(
                self._config.USER__DEFAULT_PROFILE)
        user.profile = profile

        if save_now:
            self.save(user)

        return user
Beispiel #9
0
 def take_app_action(self, parsed_args: argparse.Namespace,
                     app_context: AppEnvironment) -> None:
     # TODO - G.M - 05-04-2018 -Refactor this in order
     # to not setup object var outside of __init__ .
     if parsed_args.send_email and not parsed_args.email:
         print("Warning: No email provided, can not send email to user.")
     self._session = app_context["request"].dbsession
     self._app_config = app_context["registry"].settings["CFG"]
     self._user_api = UserApi(current_user=None,
                              session=self._session,
                              config=self._app_config)
     profile = None
     if parsed_args.profile:
         profile = Profile.get_profile_from_slug(parsed_args.profile)
     if not parsed_args.password and parsed_args.send_email:
         parsed_args.password = password_generator()
     try:
         user = self._user_api.create_user(
             email=parsed_args.email,
             name=parsed_args.public_name,
             password=parsed_args.password,
             username=parsed_args.username,
             timezone=parsed_args.timezone,
             lang=parsed_args.lang,
             allowed_space=parsed_args.allowed_space,
             profile=profile,
             do_save=True,
             do_notify=parsed_args.send_email,
         )
         self._user_api.execute_created_user_actions(user)
     except TracimException as exc:
         self._session.rollback()
         print("Error: " + str(exc))
         print("User not created.")
         raise exc
     print("User created")
Beispiel #10
0
 def test_profile__ok__get_role__from_slug__err__profile_does_not_exist(
         self):
     with pytest.raises(ProfileDoesNotExist):
         Profile.get_profile_from_slug("this slug does not exist")