# -*- coding: utf-8 -*- # Copyright (C) 2010-2016 RhodeCode GmbH # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License, version 3 # (only), as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # This program is dual-licensed. If you wish to learn more about the # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ """ default settings controller for RhodeCode Enterprise """ import logging import formencode from formencode import htmlfill from pylons import request, tmpl_context as c, url from pylons.controllers.util import redirect from pylons.i18n.translation import _ from rhodecode.lib import auth from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator from rhodecode.lib.base import BaseController, render from rhodecode.model.forms import DefaultsForm from rhodecode.model.meta import Session from rhodecode import BACKENDS from rhodecode.model.settings import SettingsModel log = logging.getLogger(__name__) class DefaultsController(BaseController): @LoginRequired() def __before__(self): super(DefaultsController, self).__before__() @HasPermissionAllDecorator('hg.admin') def index(self): """GET /defaults: All items in the collection""" # url('admin_defaults_repositories') c.backends = BACKENDS.keys() c.active = 'repositories' defaults = SettingsModel().get_default_repo_settings() return htmlfill.render( render('admin/defaults/defaults.html'), defaults=defaults, encoding="UTF-8", force_defaults=False ) @HasPermissionAllDecorator('hg.admin') @auth.CSRFRequired() def update_repository_defaults(self): """PUT /defaults/repositories: Update an existing item""" # Forms posted to this method should contain a hidden field: # Or using helpers: # h.form(url('admin_defaults_repositories'), # method='post') # url('admin_defaults_repositories') c.active = 'repositories' _form = DefaultsForm()() try: form_result = _form.to_python(dict(request.POST)) for k, v in form_result.iteritems(): setting = SettingsModel().create_or_update_setting(k, v) Session().add(setting) Session().commit() h.flash(_('Default settings updated successfully'), category='success') except formencode.Invalid as errors: defaults = errors.value return htmlfill.render( render('admin/defaults/defaults.html'), defaults=defaults, errors=errors.error_dict or {}, prefix_error=False, encoding="UTF-8", force_defaults=False) except Exception: log.exception('Exception in update action') h.flash(_('Error occurred during update of default values'), category='error') return redirect(url('admin_defaults_repositories'))