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
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
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
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
def setUp(self): self.store = CQDESshKeyStore.instance() conf.use_test_db(True) self.tmp_root = tempfile.mkdtemp() self.load_fixtures() conf.memcached_enabled = False