Пример #1
0
    def render_preference_panel(self, req, panel):
        """ Renders preference panel and handles information change on POST
        """
        if req.authname == 'anonymous':
            raise TracError("User is not authenticated", "No access")

        data = {}
        key_store = CQDESshKeyStore.instance()
        user = get_userstore().getUser(req.authname)

        if req.method == 'POST':
            ssh_key = req.args.get('ssh_key')
            delete_key = req.args.get('deletelist')

            if ssh_key:
                user = self._do_save(req, user)
            elif delete_key:
                user = self._do_deletes(req, user)
            else:
                add_warning(req, _('Please provide data'))

        keys = key_store.get_ssh_keys_by_user_id(user.id)
        data['keys'] = keys if keys else None

        # This is to prevent adding of more than one ssh password.
        # Remove this if we support more in the future.
        if keys:
            data['hide_add_dialog'] = False

        data['domain'] = conf.domain_name
        data['user'] = user

        return 'multiproject_user_prefs_ssh_keys.html', data
Пример #2
0
    def _do_save(self, req, user):
        """
        Save ssh key into database
        """
        if not req.args.get('ssh_key'):
            add_warning(req, _('Failed to add SSH key: Key is required'))
            return user

        ssh_key = req.args.get('ssh_key')
        ssh_key = SshKey.remove_comment_from_key_string(ssh_key)

        if not SshKey.validate_key_string(ssh_key):
            add_warning(req, _('Failed to add SSH key: invalid SSH key, key must be in open ssh format'))
            return user

        description = req.args.get('description')
        if len(description) > 200:
            add_warning(req, _('Failed to add SSH key: Too long description'))
            return user

        key_store = CQDESshKeyStore.instance()
        user_id = user.id

        if key_store.add_ssh_key(user_id, ssh_key, description):
            add_notice(req, _('New SSH key added (please allow 5 minutes for replication)'))
            return user

        add_warning(req, _('Failed to add SSH key: Server error'))
        return user
Пример #3
0
    def _do_save(self, req, user):
        """
        Save ssh key into database
        """
        if not req.args.get('ssh_key'):
            add_warning(req, _('Failed to add SSH key: Key is required'))
            return user

        ssh_key = req.args.get('ssh_key')
        ssh_key = SshKey.remove_comment_from_key_string(ssh_key)

        if not SshKey.validate_key_string(ssh_key):
            add_warning(
                req,
                _('Failed to add SSH key: invalid SSH key, key must be in open ssh format'
                  ))
            return user

        description = req.args.get('description')
        if len(description) > 200:
            add_warning(req, _('Failed to add SSH key: Too long description'))
            return user

        key_store = CQDESshKeyStore.instance()
        user_id = user.id

        if key_store.add_ssh_key(user_id, ssh_key, description):
            add_notice(
                req,
                _('New SSH key added (please allow 5 minutes for replication)')
            )
            return user

        add_warning(req, _('Failed to add SSH key: Server error'))
        return user
Пример #4
0
    def render_preference_panel(self, req, panel):
        """ Renders preference panel and handles information change on POST
        """
        if req.authname == 'anonymous':
            raise TracError("User is not authenticated", "No access")

        data = {}
        key_store = CQDESshKeyStore.instance()
        user = get_userstore().getUser(req.authname)

        if req.method == 'POST':
            ssh_key = req.args.get('ssh_key')
            delete_key = req.args.get('deletelist')

            if ssh_key:
                user = self._do_save(req, user)
            elif delete_key:
                user = self._do_deletes(req, user)
            else:
                add_warning(req, _('Please provide data'))

        keys = key_store.get_ssh_keys_by_user_id(user.id)
        data['keys'] = keys if keys else None

        # This is to prevent adding of more than one ssh password.
        # Remove this if we support more in the future.
        if keys:
            data['hide_add_dialog'] = False

        data['domain'] = conf.domain_name
        data['user'] = user

        return 'multiproject_user_prefs_ssh_keys.html', data
Пример #5
0
    def _do_deletes(self, req, user):
        """ Delete ssh key from database
        """
        key_store = CQDESshKeyStore.instance()
        user_id = user.id

        key_ids = req.args.get('deletelist')
        key_ids = isinstance(key_ids, list) and key_ids or [key_ids]

        for key_id in key_ids:
            if key_id:
                if key_store.remove_ssh_key(user_id, key_id):
                    add_notice(req, _('SSH key deleted'))
                else:
                    add_warning(req, _('Failed to delete SSH key: Server error.'))

        return user
Пример #6
0
    def _do_deletes(self, req, user):
        """ Delete ssh key from database
        """
        key_store = CQDESshKeyStore.instance()
        user_id = user.id

        key_ids = req.args.get('deletelist')
        key_ids = isinstance(key_ids, list) and key_ids or [key_ids]

        for key_id in key_ids:
            if key_id:
                if key_store.remove_ssh_key(user_id, key_id):
                    add_notice(req, _('SSH key deleted'))
                else:
                    add_warning(req,
                                _('Failed to delete SSH key: Server error.'))

        return user
Пример #7
0
 def setUp(self):
     self.store = CQDESshKeyStore.instance()
     conf.use_test_db(True)
     self.tmp_root = tempfile.mkdtemp()
     self.load_fixtures()
     conf.memcached_enabled = False
Пример #8
0
 def setUp(self):
     self.store = CQDESshKeyStore.instance()
     conf.use_test_db(True)
     self.tmp_root = tempfile.mkdtemp()
     self.load_fixtures()
     conf.memcached_enabled = False