Ejemplo n.º 1
0
    def test_unit__disable_user___ok__nominal_case(self):
        api = UserApi(current_user=None, session=self.session, config=self.app_config)
        gapi = GroupApi(current_user=None, session=self.session, config=self.app_config)
        groups = [gapi.get_one_with_name("users")]
        user = api.create_user(
            email="*****@*****.**",
            password="******",
            name="bob",
            groups=groups,
            timezone="Europe/Paris",
            do_save=True,
            do_notify=False,
        )
        user2 = api.create_user(
            email="*****@*****.**",
            password="******",
            name="bob2",
            groups=groups,
            timezone="Europe/Paris",
            do_save=True,
            do_notify=False,
        )

        api2 = UserApi(current_user=user, session=self.session, config=self.app_config)

        api2.disable(user2)
        updated_user2 = api.get_one(user2.user_id)
        assert updated_user2.is_active is False
        assert updated_user2.user_id == user2.user_id
        assert updated_user2.email == user2.email
Ejemplo n.º 2
0
 def _get_user(self, user_id_fetcher: typing.Callable[[], int]) -> User:
     user_id = user_id_fetcher()
     uapi = UserApi(None,
                    show_deleted=True,
                    session=self.dbsession,
                    config=self.app_config)
     return uapi.get_one(user_id)
Ejemplo n.º 3
0
 def _get_candidate_user(
         self,
         request: 'TracimRequest',
 ) -> User:
     """
     Get candidate user
     :param request: pyramid request
     :return: user found from header/body
     """
     app_config = request.registry.settings['CFG']
     uapi = UserApi(None, show_deleted=True, session=request.dbsession, config=app_config)
     login = ''
     try:
         login = None
         if 'user_id' in request.matchdict:
             user_id_str = request.matchdict['user_id']
             if not isinstance(user_id_str, str) or not user_id_str.isdecimal():
                 raise InvalidUserId('user_id is not a correct integer')  # nopep8
             login = int(request.matchdict['user_id'])
         if not login:
             raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one')  # nopep8
         user = uapi.get_one(login)
     except UserNotFoundInTracimRequest as exc:
         raise UserDoesNotExist('User {} not found'.format(login)) from exc
     return user
Ejemplo n.º 4
0
    def test_unit__disable_user___ok__nominal_case(self, session, app_config):
        api = UserApi(current_user=None, session=session, config=app_config)

        profile = Profile.USER
        user = api.create_user(
            email="*****@*****.**",
            password="******",
            name="bob",
            profile=profile,
            timezone="Europe/Paris",
            do_save=True,
            do_notify=False,
        )
        user2 = api.create_user(
            email="*****@*****.**",
            password="******",
            name="bob2",
            profile=profile,
            timezone="Europe/Paris",
            do_save=True,
            do_notify=False,
        )

        api2 = UserApi(current_user=user, session=session, config=app_config)

        api2.disable(user2)
        updated_user2 = api.get_one(user2.user_id)
        assert updated_user2.is_active is False
        assert updated_user2.user_id == user2.user_id
        assert updated_user2.email == user2.email
Ejemplo n.º 5
0
 def _get_user(self, user_id_fetcher: typing.Callable):
     user_id = user_id_fetcher()
     uapi = UserApi(
         None,
         show_deleted=True,
         session=self.dbsession,
         config=self.app_config
     )
     return uapi.get_one(user_id)
Ejemplo n.º 6
0
 def test_unit__get_one__ok__nominal_case(self):
     api = UserApi(
         current_user=None,
         session=self.session,
         config=self.app_config,
     )
     u = api.create_minimal_user('titi@titi')
     api.update(u, 'titi', 'titi@titi', 'password', do_save=True)
     one = api.get_one(u.user_id)
     eq_(u.user_id, one.user_id)
Ejemplo n.º 7
0
 def test_unit__get_one__ok__nominal_case(self):
     api = UserApi(
         current_user=None,
         session=self.session,
         config=self.app_config,
     )
     u = api.create_minimal_user('titi@titi')
     api.update(u, 'titi', 'titi@titi', 'password', do_save=True)
     one = api.get_one(u.user_id)
     eq_(u.user_id, one.user_id)
Ejemplo n.º 8
0
    def _create_role_event(self, operation: OperationType,
                           role: UserRoleInWorkspace,
                           context: TracimContext) -> None:
        current_user = context.safe_current_user()
        workspace_api = WorkspaceApi(
            session=context.dbsession,
            config=self._config,
            show_deleted=True,
            # INFO - G.M - 2020-17-09 - we do explicitly don't set user here to not
            # have filter on workspace, in some case we do want user create event on workspace
            # he doesn't have access: when he remove itself from workspace for example
            current_user=None,
        )
        workspace_in_context = workspace_api.get_workspace_with_context(
            workspace_api.get_one(role.workspace_id))
        user_api = UserApi(current_user,
                           context.dbsession,
                           self._config,
                           show_deleted=True)
        role_api = RoleApi(current_user=current_user,
                           session=context.dbsession,
                           config=self._config)
        try:
            user_field = EventApi.user_schema.dump(
                user_api.get_user_with_context(user_api.get_one(
                    role.user_id))).data
        except UserDoesNotExist:
            # It is possible to have an already deleted user when deleting his roles.
            user_field = None

        role_in_context = role_api.get_user_role_workspace_with_context(role)
        fields = {
            Event.USER_FIELD:
            user_field,
            Event.WORKSPACE_FIELD:
            EventApi.workspace_schema.dump(workspace_in_context).data,
            Event.MEMBER_FIELD:
            EventApi.workspace_user_role_schema.dump(role_in_context).data,
        }
        event_api = EventApi(current_user, context.dbsession, self._config)
        event_api.create_event(
            entity_type=EntityType.WORKSPACE_MEMBER,
            operation=operation,
            additional_fields=fields,
            context=context,
        )
Ejemplo n.º 9
0
 def test_unit__submit_job__OK_nominal_case(self, app_config, session,
                                            rq_database_worker) -> None:
     redis = get_redis_connection(app_config)
     queue = get_rq_queue(redis, queue_name="event")
     job = queue.enqueue(
         # need to enqueue by name as enqueuing with get_public_name fails in pytest
         "tracim_backend.tests.library.test_rq.get_public_name",
         1,
         timeout=self.JOB_EXECUTION_TIMEOUT,
     )
     while not job.result:
         if job.exc_info:
             raise job.exc_info
         time.sleep(0.1)
     user_api = UserApi(current_user=None,
                        session=session,
                        config=app_config)
     user = user_api.get_one(1)
     job_public_name = job.result
     assert user.public_name == job_public_name
Ejemplo n.º 10
0
    def test_unit__disable_user___ok__nominal_case(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        gapi = GroupApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        groups = [gapi.get_one_with_name('users')]
        user = api.create_user(
            email='*****@*****.**',
            password='******',
            name='bob',
            groups=groups,
            timezone='Europe/Paris',
            do_save=True,
            do_notify=False,
        )
        user2 = api.create_user(
            email='*****@*****.**',
            password='******',
            name='bob2',
            groups=groups,
            timezone='Europe/Paris',
            do_save=True,
            do_notify=False,
        )

        api2 = UserApi(current_user=user,
                       session=self.session,
                       config=self.app_config)
        from tracim_backend.exceptions import UserCantDisableHimself
        api2.disable(user2)
        updated_user2 = api.get_one(user2.user_id)
        assert updated_user2.is_active == False
        assert updated_user2.user_id == user2.user_id
        assert updated_user2.email == user2.email
Ejemplo n.º 11
0
 def _get_auth_safe_user(
         self,
         request: 'TracimRequest',
 ) -> User:
     """
     Get current pyramid authenticated user from request
     :param request: pyramid request
     :return: current authenticated user
     """
     app_config = request.registry.settings['CFG']
     uapi = UserApi(None, session=request.dbsession, config=app_config)
     login = ''
     try:
         login = request.authenticated_userid
         if not login:
             raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one')  # nopep8
         user = uapi.get_one(login)
         if not user.is_active:
             raise UserAuthenticatedIsNotActive('User {} is not active'.format(login))
     except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
         raise NotAuthenticated('User {} not found'.format(login)) from exc
     return user
Ejemplo n.º 12
0
    def test_unit__disable_user___ok__nominal_case(self):
        api = UserApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        gapi = GroupApi(
            current_user=None,
            session=self.session,
            config=self.app_config,
        )
        groups = [gapi.get_one_with_name('users')]
        user = api.create_user(
            email='*****@*****.**',
            password='******',
            name='bob',
            groups=groups,
            timezone='Europe/Paris',
            do_save=True,
            do_notify=False,
        )
        user2 = api.create_user(
            email='*****@*****.**',
            password='******',
            name='bob2',
            groups=groups,
            timezone='Europe/Paris',
            do_save=True,
            do_notify=False,
        )

        api2 = UserApi(current_user=user,session=self.session, config=self.app_config)
        from tracim_backend.exceptions import UserCantDisableHimself
        api2.disable(user2)
        updated_user2 = api.get_one(user2.user_id)
        assert updated_user2.is_active == False
        assert updated_user2.user_id == user2.user_id
        assert updated_user2.email == user2.email
Ejemplo n.º 13
0
def get_public_name(user_id: int) -> str:
    with worker_context() as context:
        user_api = UserApi(current_user=None,
                           session=context.dbsession,
                           config=context.app_config)
        return user_api.get_one(user_id).public_name
Ejemplo n.º 14
0
    def create_workspaces_members_role(
            self,
            context,
            request: TracimRequest,
            hapic_data=None) -> UserRoleWorkspaceInContext:
        """
        Add a member to this workspace.
        This feature is for workspace managers and administrators.
        """
        newly_created = False
        email_sent = False
        app_config = request.registry.settings["CFG"]  # type: CFG
        rapi = RoleApi(current_user=request.current_user,
                       session=request.dbsession,
                       config=app_config)
        uapi = UserApi(
            current_user=request.current_user,
            session=request.dbsession,
            config=app_config,
            show_deactivated=True,
            show_deleted=True,
        )
        try:
            if hapic_data.body.user_id:
                user = uapi.get_one(hapic_data.body.user_id)
            elif hapic_data.body.user_email:
                user = uapi.get_one_by_email(hapic_data.body.user_email)
            else:
                user = uapi.get_one_by_username(hapic_data.body.user_username)
            if user.is_deleted:
                raise UserIsDeleted(
                    "This user has been deleted. Unable to invite him.")
            if not user.is_active:
                raise UserIsNotActive(
                    "This user is not activated. Unable to invite him")
        except UserDoesNotExist as exc:
            if not uapi.allowed_to_invite_new_user(hapic_data.body.user_email):
                raise exc

            if app_config.NEW_USER__INVITATION__DO_NOTIFY:
                user = uapi.create_user(
                    auth_type=AuthType.UNKNOWN,
                    email=hapic_data.body.user_email,
                    password=password_generator(),
                    do_notify=True,
                )
                if (app_config.EMAIL__NOTIFICATION__ACTIVATED
                        and app_config.NEW_USER__INVITATION__DO_NOTIFY
                        and app_config.JOBS__PROCESSING_MODE
                        == app_config.CST.SYNC):
                    email_sent = True
            else:
                user = uapi.create_user(
                    auth_type=AuthType.UNKNOWN,
                    email=hapic_data.body.user_email,
                    password=None,
                    do_notify=False,
                )
            uapi.execute_created_user_actions(user)
            newly_created = True

        role = rapi.create_one(
            user=user,
            workspace=request.current_workspace,
            role_level=WorkspaceRoles.get_role_from_slug(
                hapic_data.body.role).level,
            with_notif=app_config.EMAIL__NOTIFICATION__ENABLED_ON_INVITATION,
            flush=True,
        )
        return rapi.get_user_role_workspace_with_context(
            role, newly_created=newly_created, email_sent=email_sent)
Ejemplo n.º 15
0
 def test_unit__get_one__ok__nominal_case(self, session, app_config):
     api = UserApi(current_user=None, session=session, config=app_config)
     u = api.create_minimal_user("titi@titi")
     api.update(u, "titi", "titi@titi", "password", do_save=True)
     one = api.get_one(u.user_id)
     assert u.user_id == one.user_id