diff --git a/rhodecode/admin/views/__init__.py b/rhodecode/admin/views/__init__.py
new file mode 100644
index 00000000..8211775e
--- /dev/null
+++ b/rhodecode/admin/views/__init__.py
@@ -0,0 +1,19 @@
+# -*- 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/
diff --git a/rhodecode/admin/views/base.py b/rhodecode/admin/views/base.py
new file mode 100644
index 00000000..ef62e144
--- /dev/null
+++ b/rhodecode/admin/views/base.py
@@ -0,0 +1,28 @@
+# -*- 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/
+
+
+class AdminSettingsView(object):
+
+ def __init__(self, context, request):
+ self.request = request
+ self.context = context
+ self.session = request.session
+ self._rhodecode_user = request.user
diff --git a/rhodecode/admin/views/open_source_licenses.py b/rhodecode/admin/views/open_source_licenses.py
new file mode 100644
index 00000000..a2ce2283
--- /dev/null
+++ b/rhodecode/admin/views/open_source_licenses.py
@@ -0,0 +1,48 @@
+# -*- 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 collections
+import logging
+
+from pylons import tmpl_context as c
+from pyramid.view import view_config
+
+from rhodecode.admin.views.base import AdminSettingsView
+from rhodecode.admin.navigation import navigation_list
+from rhodecode.lib.auth import (LoginRequired, HasPermissionAllDecorator)
+from rhodecode.lib.utils import read_opensource_licenses
+
+log = logging.getLogger(__name__)
+
+
+class OpenSourceLicensesAdminSettingsView(AdminSettingsView):
+
+ @LoginRequired()
+ @HasPermissionAllDecorator('hg.admin')
+ @view_config(
+ route_name='admin_settings_open_source', request_method='GET',
+ renderer='rhodecode:templates/admin/settings/settings.mako')
+ def open_source_licenses(self):
+ c.active = 'open_source'
+ c.navlist = navigation_list(self.request)
+ c.opensource_licenses = collections.OrderedDict(
+ sorted(read_opensource_licenses().items(), key=lambda t: t[0]))
+
+ return {}
diff --git a/rhodecode/admin/views.py b/rhodecode/admin/views/sessions.py
similarity index 67%
rename from rhodecode/admin/views.py
rename to rhodecode/admin/views/sessions.py
index e8ef1672..4ddb0bf4 100644
--- a/rhodecode/admin/views.py
+++ b/rhodecode/admin/views/sessions.py
@@ -26,67 +26,22 @@ from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode.translation import _
-from rhodecode.svn_support.utils import generate_mod_dav_svn_config
+from rhodecode.admin.views.base import AdminSettingsView
from rhodecode.lib.auth import (
LoginRequired, HasPermissionAllDecorator, CSRFRequired)
-from rhodecode.lib.utils import read_opensource_licenses
from rhodecode.lib.utils2 import safe_int
from rhodecode.lib import system_info
from rhodecode.lib import user_sessions
-from .navigation import navigation_list
+from rhodecode.admin.navigation import navigation_list
log = logging.getLogger(__name__)
-class AdminSettingsView(object):
-
- def __init__(self, context, request):
- self.request = request
- self.context = context
- self.session = request.session
- self._rhodecode_user = request.user
-
- @LoginRequired()
- @HasPermissionAllDecorator('hg.admin')
- @view_config(
- route_name='admin_settings_open_source', request_method='GET',
- renderer='rhodecode:templates/admin/settings/settings.mako')
- def open_source_licenses(self):
- c.active = 'open_source'
- c.navlist = navigation_list(self.request)
- c.opensource_licenses = collections.OrderedDict(
- sorted(read_opensource_licenses().items(), key=lambda t: t[0]))
-
- return {}
-
- @LoginRequired()
- @CSRFRequired()
- @HasPermissionAllDecorator('hg.admin')
- @view_config(
- route_name='admin_settings_vcs_svn_generate_cfg',
- request_method='POST', renderer='json')
- def vcs_svn_generate_config(self):
- try:
- generate_mod_dav_svn_config(self.request.registry)
- msg = {
- 'message': _('Apache configuration for Subversion generated.'),
- 'level': 'success',
- }
- except Exception:
- log.exception(
- 'Exception while generating the Apache '
- 'configuration for Subversion.')
- msg = {
- 'message': _('Failed to generate the Apache configuration for Subversion.'),
- 'level': 'error',
- }
-
- data = {'message': msg}
- return data
+class AdminSessionSettingsView(AdminSettingsView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@@ -112,6 +67,7 @@ class AdminSettingsView(object):
return {}
@LoginRequired()
+ @CSRFRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_sessions_cleanup', request_method='POST')
diff --git a/rhodecode/admin/views/svn_config.py b/rhodecode/admin/views/svn_config.py
new file mode 100644
index 00000000..46822144
--- /dev/null
+++ b/rhodecode/admin/views/svn_config.py
@@ -0,0 +1,60 @@
+# -*- 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
+
+from pyramid.view import view_config
+
+from rhodecode.translation import _
+from rhodecode.svn_support.utils import generate_mod_dav_svn_config
+
+from rhodecode.admin.views.base import AdminSettingsView
+from rhodecode.lib.auth import (
+ LoginRequired, HasPermissionAllDecorator, CSRFRequired)
+
+log = logging.getLogger(__name__)
+
+
+class SvnConfigAdminSettingsView(AdminSettingsView):
+
+ @LoginRequired()
+ @CSRFRequired()
+ @HasPermissionAllDecorator('hg.admin')
+ @view_config(
+ route_name='admin_settings_vcs_svn_generate_cfg',
+ request_method='POST', renderer='json')
+ def vcs_svn_generate_config(self):
+ try:
+ generate_mod_dav_svn_config(self.request.registry)
+ msg = {
+ 'message': _('Apache configuration for Subversion generated.'),
+ 'level': 'success',
+ }
+ except Exception:
+ log.exception(
+ 'Exception while generating the Apache '
+ 'configuration for Subversion.')
+ msg = {
+ 'message': _('Failed to generate the Apache configuration for Subversion.'),
+ 'level': 'error',
+ }
+
+ data = {'message': msg}
+ return data