diff --git a/rhodecode/admin/views.py b/rhodecode/admin/views.py deleted file mode 100644 --- a/rhodecode/admin/views.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- 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 pyramid.httpexceptions import HTTPFound - -from rhodecode.translation import _ -from rhodecode.svn_support.utils import generate_mod_dav_svn_config - -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 - - -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 - - @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - @view_config( - route_name='admin_settings_sessions', request_method='GET', - renderer='rhodecode:templates/admin/settings/settings.mako') - def settings_sessions(self): - c.active = 'sessions' - c.navlist = navigation_list(self.request) - - c.cleanup_older_days = 60 - older_than_seconds = 24 * 60 * 60 * 24 * c.cleanup_older_days - - config = system_info.rhodecode_config().get_value()['value']['config'] - c.session_model = user_sessions.get_session_handler( - config.get('beaker.session.type', 'memory'))(config) - - c.session_conf = c.session_model.config - c.session_count = c.session_model.get_count() - c.session_expired_count = c.session_model.get_expired_count( - older_than_seconds) - - return {} - - @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - @view_config( - route_name='admin_settings_sessions_cleanup', request_method='POST') - def settings_sessions_cleanup(self): - - expire_days = safe_int(self.request.params.get('expire_days')) - - if expire_days is None: - expire_days = 60 - - older_than_seconds = 24 * 60 * 60 * 24 * expire_days - - config = system_info.rhodecode_config().get_value()['value']['config'] - session_model = user_sessions.get_session_handler( - config.get('beaker.session.type', 'memory'))(config) - - try: - session_model.clean_sessions( - older_than_seconds=older_than_seconds) - self.request.session.flash( - _('Cleaned up old sessions'), queue='success') - except user_sessions.CleanupCommand as msg: - self.request.session.flash(msg, category='warning') - except Exception as e: - log.exception('Failed session cleanup') - self.request.session.flash( - _('Failed to cleanup up old sessions'), queue='error') - - redirect_to = self.request.resource_path( - self.context, route_name='admin_settings_sessions') - return HTTPFound(redirect_to) diff --git a/rhodecode/admin/views/__init__.py b/rhodecode/admin/views/__init__.py new file mode 100644 --- /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 --- /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 --- /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/sessions.py b/rhodecode/admin/views/sessions.py new file mode 100644 --- /dev/null +++ b/rhodecode/admin/views/sessions.py @@ -0,0 +1,101 @@ +# -*- 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 pyramid.httpexceptions import HTTPFound + +from rhodecode.translation import _ + +from rhodecode.admin.views.base import AdminSettingsView +from rhodecode.lib.auth import ( + LoginRequired, HasPermissionAllDecorator, CSRFRequired) +from rhodecode.lib.utils2 import safe_int +from rhodecode.lib import system_info +from rhodecode.lib import user_sessions + + +from rhodecode.admin.navigation import navigation_list + + +log = logging.getLogger(__name__) + + +class AdminSessionSettingsView(AdminSettingsView): + + @LoginRequired() + @HasPermissionAllDecorator('hg.admin') + @view_config( + route_name='admin_settings_sessions', request_method='GET', + renderer='rhodecode:templates/admin/settings/settings.mako') + def settings_sessions(self): + c.active = 'sessions' + c.navlist = navigation_list(self.request) + + c.cleanup_older_days = 60 + older_than_seconds = 24 * 60 * 60 * 24 * c.cleanup_older_days + + config = system_info.rhodecode_config().get_value()['value']['config'] + c.session_model = user_sessions.get_session_handler( + config.get('beaker.session.type', 'memory'))(config) + + c.session_conf = c.session_model.config + c.session_count = c.session_model.get_count() + c.session_expired_count = c.session_model.get_expired_count( + older_than_seconds) + + return {} + + @LoginRequired() + @CSRFRequired() + @HasPermissionAllDecorator('hg.admin') + @view_config( + route_name='admin_settings_sessions_cleanup', request_method='POST') + def settings_sessions_cleanup(self): + + expire_days = safe_int(self.request.params.get('expire_days')) + + if expire_days is None: + expire_days = 60 + + older_than_seconds = 24 * 60 * 60 * 24 * expire_days + + config = system_info.rhodecode_config().get_value()['value']['config'] + session_model = user_sessions.get_session_handler( + config.get('beaker.session.type', 'memory'))(config) + + try: + session_model.clean_sessions( + older_than_seconds=older_than_seconds) + self.request.session.flash( + _('Cleaned up old sessions'), queue='success') + except user_sessions.CleanupCommand as msg: + self.request.session.flash(msg, category='warning') + except Exception as e: + log.exception('Failed session cleanup') + self.request.session.flash( + _('Failed to cleanup up old sessions'), queue='error') + + redirect_to = self.request.resource_path( + self.context, route_name='admin_settings_sessions') + return HTTPFound(redirect_to) diff --git a/rhodecode/admin/views/svn_config.py b/rhodecode/admin/views/svn_config.py new file mode 100644 --- /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