Example #1
0
    def _process(self):
        source = User.get_one(request.args['source'])
        target = User.get_one(request.args['target'])

        problems = []

        if source == target:
            problems.append((_("Users are the same!"), 'error'))

        if (source.first_name.strip().lower() != target.first_name.strip().lower() or
                source.last_name.strip().lower() != target.last_name.strip().lower()):
            problems.append((_("Users' names seem to be different!"), 'warning'))

        if source.is_pending:
            problems.append((_("Source user has never logged in to Indico!"), 'warning'))

        if target.is_pending:
            problems.append((_("Target user has never logged in to Indico!"), 'warning'))

        if source.is_deleted:
            problems.append((_("Source user has been deleted!"), 'error'))

        if target.is_deleted:
            problems.append((_("Target user has been deleted!"), 'error'))

        return jsonify({
            'problems': problems
        })
Example #2
0
    def _process(self):
        source = User.get_one(request.args['source'])
        target = User.get_one(request.args['target'])

        problems = []

        if source == target:
            problems.append((_("Users are the same!"), 'error'))

        if (source.first_name.strip().lower() !=
                target.first_name.strip().lower()
                or source.last_name.strip().lower() !=
                target.last_name.strip().lower()):
            problems.append(
                (_("Users' names seem to be different!"), 'warning'))

        if source.is_pending:
            problems.append(
                (_("Source user has never logged in to Indico!"), 'warning'))

        if target.is_pending:
            problems.append(
                (_("Target user has never logged in to Indico!"), 'warning'))

        if source.is_deleted:
            problems.append((_("Source user has been deleted!"), 'error'))

        if target.is_deleted:
            problems.append((_("Target user has been deleted!"), 'error'))

        return jsonify({'problems': problems})
Example #3
0
File: tasks.py Project: fph/indico
def category_cleanup():
    from indico.modules.events import Event
    cfg = Config.getInstance()
    janitor_user = User.get_one(cfg.getJanitorUserId())

    logger.debug("Checking whether any categories should be cleaned up")
    for categ_id, days in cfg.getCategoryCleanup().iteritems():
        try:
            category = Category.get(int(categ_id), is_deleted=False)
        except KeyError:
            logger.warning("Category %s does not exist!", categ_id)
            continue

        now = now_utc()
        to_delete = Event.query.with_parent(category).filter(Event.created_dt < (now - timedelta(days=days))).all()
        if not to_delete:
            continue

        logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id,
                    len(to_delete), days)
        for i, event in enumerate(to_delete, 1):
            logger.info("Deleting %s", event)
            event.as_legacy.delete(user=janitor_user)
            if i % 100 == 0:
                db.session.commit()
                DBMgr.getInstance().commit()
        db.session.commit()
        DBMgr.getInstance().commit()
Example #4
0
def category_cleanup():
    cfg = Config.getInstance()
    janitor_user = User.get_one(cfg.getJanitorUserId())

    logger.debug("Checking whether any categories should be cleaned up")
    for categ_id, days in cfg.getCategoryCleanup().iteritems():
        try:
            category = CategoryManager().getById(categ_id)
        except KeyError:
            logger.warning("Category %s does not exist!", categ_id)
            continue

        now = now_utc()
        to_delete = [ev for ev in category.conferences if (now - ev._creationDS) > timedelta(days=days)]
        if not to_delete:
            continue

        logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id,
                    len(to_delete), days)
        for i, event in enumerate(to_delete, 1):
            logger.info("Deleting %s", event)
            event.delete(user=janitor_user)
            if i % 100 == 0:
                db.session.commit()
                DBMgr.getInstance().commit()
        db.session.commit()
        DBMgr.getInstance().commit()
Example #5
0
def category_cleanup():
    cfg = Config.getInstance()
    janitor_user = User.get_one(cfg.getJanitorUserId())

    logger.debug("Checking whether any categories should be cleaned up")
    for categ_id, days in cfg.getCategoryCleanup().iteritems():
        try:
            category = CategoryManager().getById(categ_id)
        except KeyError:
            logger.warning("Category {} does not exist!".format(categ_id))
            continue

        now = now_utc()
        to_delete = [ev for ev in category.conferences if (now - ev._creationDS) > timedelta(days=days)]
        if not to_delete:
            continue

        logger.info("Category {}: {} events were created more than {} days ago and will be deleted".format(
            categ_id, len(to_delete), days
        ))
        for i, event in enumerate(to_delete, 1):
            logger.info("Deleting {}".format(event))
            event.delete(user=janitor_user)
            if i % 100 == 0:
                db.session.commit()
                DBMgr.getInstance().commit()
        db.session.commit()
        DBMgr.getInstance().commit()
Example #6
0
 def _process_args(self):
     RHAdminBase._process_args(self)
     if request.form.get('undo') == '1':
         self.user = None
     else:
         self.user = User.get_one(int(request.form['user_id']),
                                  is_deleted=False)
Example #7
0
def category_cleanup():
    from indico.modules.events import Event
    cfg = Config.getInstance()
    janitor_user = User.get_one(cfg.getJanitorUserId())

    logger.debug("Checking whether any categories should be cleaned up")
    for categ_id, days in cfg.getCategoryCleanup().iteritems():
        try:
            category = Category.get(int(categ_id), is_deleted=False)
        except KeyError:
            logger.warning("Category %s does not exist!", categ_id)
            continue

        now = now_utc()
        to_delete = Event.query.with_parent(category).filter(Event.created_dt < (now - timedelta(days=days))).all()
        if not to_delete:
            continue

        logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id,
                    len(to_delete), days)
        for i, event in enumerate(to_delete, 1):
            logger.info("Deleting %s", event)
            event.delete('Cleaning up category', janitor_user)
            if i % 100 == 0:
                db.session.commit()
        db.session.commit()
Example #8
0
 def migrate(self):
     # disable onupdate for attachment lastmod timestamp
     # see https://bitbucket.org/zzzeek/sqlalchemy/issue/3471/ why it's needed
     Attachment.__table__.columns.modified_dt.onupdate = None
     janitor_user = User.get_one(self.janitor_user_id)
     self.print_msg('Using janitor user {}'.format(janitor_user),
                    always=True)
     self.janitor_user_id = janitor_user.id
     self.todo = OrderedDict([(AttachmentFolder, []),
                              (AttachmentFolderPrincipal, []),
                              (Attachment, []), (AttachmentPrincipal, []),
                              (AttachmentFile, []),
                              (LegacyAttachmentFolderMapping, []),
                              (LegacyAttachmentMapping, [])])
     self.ids = {
         AttachmentFolder: _get_pg_id(AttachmentFolder.id),
         Attachment: _get_pg_id(Attachment.id),
         AttachmentFile: _get_pg_id(AttachmentFile.id),
     }
     with patch_default_group_provider(self.default_group_provider):
         self.migrate_category_attachments()
         self.migrate_event_attachments()
     self.print_step('fixing id sequences')
     self.fix_sequences('attachments')
     self.update_merged_ids()
Example #9
0
 def load_data(self):
     self.print_step("Loading some data")
     self.janitor_user = User.get_one(self.janitor_user_id)
     all_users_query = User.query.options(joinedload('_all_emails')).filter_by(is_deleted=False)
     for user in all_users_query:
         for email in user.all_emails:
             self.all_users_by_email[email] = user
Example #10
0
 def _checkParams(self, params):
     RHAdminBase._checkParams(self, params)
     if request.form.get('undo') == '1':
         self.user = None
     else:
         self.user = User.get_one(int(request.form['user_id']),
                                  is_deleted=False)
Example #11
0
    def migrate_event_notes(self):
        self.print_step('migrating event notes')

        janitor_user = User.get_one(self.janitor_user_id)
        self.print_msg('Using janitor user {}'.format(janitor_user), always=True)
        for event, obj, minutes, special_prot in committing_iterator(self._iter_minutes()):
            if special_prot:
                self.print_warning(
                    cformat('%{yellow!}{} minutes have special permissions; skipping them').format(obj),
                    event_id=event.id
                )
                continue
            path = get_archived_file(minutes, self.archive_dirs)[1]
            if path is None:
                self.print_error(cformat('%{red!}{} minutes not found on disk; skipping them').format(obj),
                                 event_id=event.id)
                continue
            with open(path, 'r') as f:
                data = convert_to_unicode(f.read()).strip()
            if not data:
                self.print_warning(cformat('%{yellow}{} minutes are empty; skipping them').format(obj),
                                   always=False, event_id=event.id)
                continue
            note = EventNote(linked_object=obj)
            note.create_revision(RenderMode.html, data, janitor_user)
            db.session.add(note)
            if not self.quiet:
                self.print_success(cformat('%{cyan}{}').format(obj), event_id=event.id)
Example #12
0
    def migrate(self):
        # disable onupdate for attachment lastmod timestamp
        # see https://bitbucket.org/zzzeek/sqlalchemy/issue/3471/ why it's needed
        Attachment.__table__.columns.modified_dt.onupdate = None
        janitor_user = User.get_one(self.janitor_user_id)
        self.print_msg('Using janitor user {}'.format(janitor_user), always=True)
        self.janitor_user_id = janitor_user.id
        self.todo = OrderedDict([
            (AttachmentFolder, []),
            (AttachmentFolderPrincipal, []),
            (Attachment, []),
            (AttachmentPrincipal, []),
            (AttachmentFile, []),
            (LegacyAttachmentFolderMapping, []),
            (LegacyAttachmentMapping, [])
        ])
        self.ids = {
            AttachmentFolder: _get_pg_id(AttachmentFolder.id),
            Attachment: _get_pg_id(Attachment.id),
            AttachmentFile: _get_pg_id(AttachmentFile.id),
        }
        with patch_default_group_provider(self.default_group_provider):
            self.migrate_category_attachments()
            self.migrate_event_attachments()

        self.fix_attachment_file_ids()
        self.print_step('fixing id sequences')
        self.fix_sequences('attachments')
        self.update_merged_ids()
Example #13
0
    def migrate_event_notes(self):
        self.print_step('migrating event notes')

        janitor_user = User.get_one(self.janitor_user_id)
        self.print_msg('Using janitor user {}'.format(janitor_user), always=True)
        for event, obj, minutes, special_prot in committing_iterator(self._iter_minutes()):
            if special_prot:
                self.print_warning(
                    cformat('%{yellow!}{} minutes have special permissions; skipping them').format(obj),
                    event_id=event.id
                )
                continue
            path = get_archived_file(minutes, self.archive_dirs)[1]
            if path is None:
                self.print_error(cformat('%{red!}{} minutes not found on disk; skipping them').format(obj),
                                 event_id=event.id)
                continue
            with open(path, 'r') as f:
                data = convert_to_unicode(f.read()).strip()
            if not data:
                self.print_warning(cformat('%{yellow}{} minutes are empty; skipping them').format(obj),
                                   always=False, event_id=event.id)
                continue
            note = EventNote(linked_object=obj)
            note.create_revision(RenderMode.html, data, janitor_user)
            db.session.add(note)
            if not self.quiet:
                self.print_success(cformat('%{cyan}{}').format(obj), event_id=event.id)
Example #14
0
 def load_data(self):
     self.print_step("Loading some data")
     self.janitor_user = User.get_one(self.janitor_user_id)
     all_users_query = User.query.options(
         joinedload('_all_emails')).filter_by(is_deleted=False)
     for user in all_users_query:
         for email in user.all_emails:
             self.all_users_by_email[email] = user
Example #15
0
File: util.py Project: zenny/indico
def undo_impersonate_user():
    """Undo an admin impersonation login and revert to the old user"""
    from indico.modules.auth import logger
    from indico.modules.users import User

    try:
        entry = session.pop('login_as_orig_user')
    except KeyError:
        # The user probably already switched back from another tab
        return
    user = User.get_one(entry['user_id'])
    logger.info('Admin %r stopped impersonating user %r', user, session.user)
    session.user = user
    session.update(entry['session_data'])
Example #16
0
    def migrate(self):
        self.janitor = User.get_one(self.janitor_user_id)
        # keep all users in memory to avoid extra queries.
        # the assignment is on purpose to stop the gc from throwing the dict away
        # immediately after retrieving it
        _all_users = User.query.options(joinedload('_all_emails')).all()
        self.all_users_by_email = {}
        for user in _all_users:
            if user.is_deleted:
                continue
            for email in user.all_emails:
                self.all_users_by_email[email] = user

        with patch_default_group_provider(self.default_group_provider):
            with db.session.no_autoflush:
                self.migrate_event_managers()
Example #17
0
    def migrate(self):
        self.janitor = User.get_one(self.janitor_user_id)
        # keep all users in memory to avoid extra queries.
        # the assignment is on purpose to stop the gc from throwing the dict away
        # immediately after retrieving it
        _all_users = User.query.options(joinedload('_all_emails')).all()
        self.all_users_by_email = {}
        for user in _all_users:
            if user.is_deleted:
                continue
            for email in user.all_emails:
                self.all_users_by_email[email] = user

        with patch_default_group_provider(self.default_group_provider):
            with db.session.no_autoflush:
                self.migrate_event_managers()
Example #18
0
 def migrate(self):
     update_session_options(db, {'expire_on_commit': False})
     self.janitor_user = User.get_one(self.janitor_user_id)
     self.migrate_global_templates()
     self.migrate_event_templates()
Example #19
0
File: api.py Project: indico/indico
 def _process_args(self):
     self.user = User.get_one(request.view_args['user_id']) if 'user_id' in request.view_args else None
Example #20
0
 def _process_args(self):
     self.user = User.get_one(request.view_args['user_id']
                              ) if 'user_id' in request.view_args else None
Example #21
0
 def _process_args(self, undo, user_id):
     RHAdminBase._process_args(self)
     self.user = None if undo else User.get_one(user_id, is_deleted=False)
Example #22
0
 def _process_args(self, undo, user_id):
     RHAdminBase._process_args(self)
     self.user = None if undo else User.get_one(user_id, is_deleted=False)
Example #23
0
 def _process_args(self):
     RHAdminBase._process_args(self)
     if request.form.get('undo') == '1':
         self.user = None
     else:
         self.user = User.get_one(int(request.form['user_id']), is_deleted=False)
Example #24
0
 def _process_args(self):
     RHManageCategoryRole._process_args(self)
     self.user = User.get_one(request.view_args['user_id'])
Example #25
0
 def _process(self):
     source = User.get_one(request.args['source'])
     target = User.get_one(request.args['target'])
     errors, warnings = _get_merge_problems(source, target)
     return jsonify(errors=errors, warnings=warnings)
Example #26
0
 def migrate(self):
     self.janitor_user = User.get_one(self.janitor_user_id)
     self.migrate_event_pr()
Example #27
0
 def _process(self):
     source = User.get_one(request.args['source'])
     target = User.get_one(request.args['target'])
     errors, warnings = _get_merge_problems(source, target)
     return jsonify(errors=errors, warnings=warnings)
Example #28
0
 def _process_args(self):
     RHManageEventRole._process_args(self)
     self.user = User.get_one(request.view_args['user_id'])