diff --git a/rhodecode/apps/admin/__init__.py b/rhodecode/apps/admin/__init__.py
--- a/rhodecode/apps/admin/__init__.py
+++ b/rhodecode/apps/admin/__init__.py
@@ -71,6 +71,14 @@ def admin_routes(config):
name='admin_settings_process_management_signal',
pattern='/settings/process_management/signal')
+ # default settings
+ config.add_route(
+ name='admin_defaults_repositories',
+ pattern='/defaults/repositories')
+ config.add_route(
+ name='admin_defaults_repositories_update',
+ pattern='/defaults/repositories/update')
+
# global permissions
config.add_route(
diff --git a/rhodecode/tests/functional/test_admin_defaults.py b/rhodecode/apps/admin/tests/test_admin_defaults.py
rename from rhodecode/tests/functional/test_admin_defaults.py
rename to rhodecode/apps/admin/tests/test_admin_defaults.py
--- a/rhodecode/tests/functional/test_admin_defaults.py
+++ b/rhodecode/apps/admin/tests/test_admin_defaults.py
@@ -20,15 +20,31 @@
import pytest
-from rhodecode.tests import assert_session_flash, url
+from rhodecode.tests import assert_session_flash
from rhodecode.model.settings import SettingsModel
+def route_path(name, params=None, **kwargs):
+ import urllib
+ from rhodecode.apps._base import ADMIN_PREFIX
+
+ base_url = {
+ 'admin_defaults_repositories':
+ ADMIN_PREFIX + '/defaults/repositories',
+ 'admin_defaults_repositories_update':
+ ADMIN_PREFIX + '/defaults/repositories/update',
+ }[name].format(**kwargs)
+
+ if params:
+ base_url = '{}?{}'.format(base_url, urllib.urlencode(params))
+ return base_url
+
+
@pytest.mark.usefixtures("app")
-class TestDefaultsController:
+class TestDefaultsController(object):
def test_index(self, autologin_user):
- response = self.app.get(url('admin_defaults_repositories'))
+ response = self.app.get(route_path('admin_defaults_repositories'))
response.mustcontain('default_repo_private')
response.mustcontain('default_repo_enable_statistics')
response.mustcontain('default_repo_enable_downloads')
@@ -44,7 +60,7 @@ class TestDefaultsController:
'csrf_token': csrf_token,
}
response = self.app.post(
- url('admin_defaults_repositories'), params=params)
+ route_path('admin_defaults_repositories_update'), params=params)
assert_session_flash(response, 'Default settings updated successfully')
defs = SettingsModel().get_default_repo_settings()
@@ -61,8 +77,9 @@ class TestDefaultsController:
'csrf_token': csrf_token,
}
response = self.app.post(
- url('admin_defaults_repositories'), params=params)
+ route_path('admin_defaults_repositories_update'), params=params)
assert_session_flash(response, 'Default settings updated successfully')
+
defs = SettingsModel().get_default_repo_settings()
del params['csrf_token']
assert params == defs
diff --git a/rhodecode/apps/admin/views/defaults.py b/rhodecode/apps/admin/views/defaults.py
new file mode 100644
--- /dev/null
+++ b/rhodecode/apps/admin/views/defaults.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2016-2017 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 .
+#
+# 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/
+
+import logging
+
+import formencode
+import formencode.htmlfill
+
+from pyramid.view import view_config
+from pyramid.httpexceptions import HTTPFound
+from pyramid.renderers import render
+from pyramid.response import Response
+
+from rhodecode.apps._base import BaseAppView
+from rhodecode.lib.auth import (
+ LoginRequired, HasPermissionAllDecorator, CSRFRequired)
+from rhodecode.lib import helpers as h
+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 AdminDefaultSettingsView(BaseAppView):
+ def load_default_context(self):
+ c = self._get_local_tmpl_context()
+
+ self._register_global_c(c)
+ return c
+
+ @LoginRequired()
+ @HasPermissionAllDecorator('hg.admin')
+ @view_config(
+ route_name='admin_defaults_repositories', request_method='GET',
+ renderer='rhodecode:templates/admin/defaults/defaults.mako')
+ def defaults_repository_show(self):
+ c = self.load_default_context()
+ c.backends = BACKENDS.keys()
+ c.active = 'repositories'
+ defaults = SettingsModel().get_default_repo_settings()
+
+ data = render(
+ 'rhodecode:templates/admin/defaults/defaults.mako',
+ self._get_template_context(c), self.request)
+ html = formencode.htmlfill.render(
+ data,
+ defaults=defaults,
+ encoding="UTF-8",
+ force_defaults=False
+ )
+ return Response(html)
+
+ @LoginRequired()
+ @HasPermissionAllDecorator('hg.admin')
+ @CSRFRequired()
+ @view_config(
+ route_name='admin_defaults_repositories_update', request_method='POST',
+ renderer='rhodecode:templates/admin/defaults/defaults.mako')
+ def defaults_repository_update(self):
+ _ = self.request.translate
+ c = self.load_default_context()
+ c.active = 'repositories'
+ form = DefaultsForm()()
+
+ try:
+ form_result = form.to_python(dict(self.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:
+ data = render(
+ 'rhodecode:templates/admin/defaults/defaults.mako',
+ self._get_template_context(c), self.request)
+ html = formencode.htmlfill.render(
+ data,
+ defaults=errors.value,
+ errors=errors.error_dict or {},
+ prefix_error=False,
+ encoding="UTF-8",
+ force_defaults=False
+ )
+ return Response(html)
+ except Exception:
+ log.exception('Exception in update action')
+ h.flash(_('Error occurred during update of default values'),
+ category='error')
+
+ raise HTTPFound(h.route_path('admin_defaults_repositories'))
diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py
--- a/rhodecode/config/routing.py
+++ b/rhodecode/config/routing.py
@@ -254,14 +254,6 @@ def make_map(config):
m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
action='update_global_perms', conditions={'method': ['PUT']})
- # ADMIN DEFAULTS REST ROUTES
- with rmap.submapper(path_prefix=ADMIN_PREFIX,
- controller='admin/defaults') as m:
- m.connect('admin_defaults_repositories', '/defaults/repositories',
- action='update_repository_defaults', conditions={'method': ['POST']})
- m.connect('admin_defaults_repositories', '/defaults/repositories',
- action='index', conditions={'method': ['GET']})
-
# ADMIN SETTINGS ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/settings') as m:
diff --git a/rhodecode/controllers/admin/defaults.py b/rhodecode/controllers/admin/defaults.py
deleted file mode 100644
--- a/rhodecode/controllers/admin/defaults.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (C) 2010-2017 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 .
-#
-# 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.mako'),
- 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.mako'),
- 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'))
diff --git a/rhodecode/public/js/rhodecode/routes.js b/rhodecode/public/js/rhodecode/routes.js
--- a/rhodecode/public/js/rhodecode/routes.js
+++ b/rhodecode/public/js/rhodecode/routes.js
@@ -47,6 +47,8 @@ function registerRCRoutes() {
pyroutes.register('admin_settings_sessions_cleanup', '/_admin/settings/sessions/cleanup', []);
pyroutes.register('admin_settings_process_management', '/_admin/settings/process_management', []);
pyroutes.register('admin_settings_process_management_signal', '/_admin/settings/process_management/signal', []);
+ pyroutes.register('admin_defaults_repositories', '/_admin/defaults/repositories', []);
+ pyroutes.register('admin_defaults_repositories_update', '/_admin/defaults/repositories/update', []);
pyroutes.register('admin_permissions_application', '/_admin/permissions/application', []);
pyroutes.register('admin_permissions_application_update', '/_admin/permissions/application/update', []);
pyroutes.register('admin_permissions_global', '/_admin/permissions/global', []);
diff --git a/rhodecode/templates/admin/defaults/defaults.mako b/rhodecode/templates/admin/defaults/defaults.mako
--- a/rhodecode/templates/admin/defaults/defaults.mako
+++ b/rhodecode/templates/admin/defaults/defaults.mako
@@ -28,7 +28,7 @@
- ${h.secure_form(h.url('admin_defaults_repositories'), method='post')}
+ ${h.secure_form(h.route_path('admin_defaults_repositories_update'), method='POST', request=request)}