routes.py
241 lines
| 10.7 KiB
| text/x-python
|
PythonLexer
r5608 | # Copyright (C) 2012-2024 RhodeCode GmbH | |||
r411 | # | |||
# 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/ | ||||
import logging | ||||
r1928 | from rhodecode.apps._base import ADMIN_PREFIX, add_route_requirements | |||
r1990 | from rhodecode.lib.utils2 import safe_int | |||
r667 | from rhodecode.model.db import Repository, Integration, RepoGroup | |||
r411 | from rhodecode.integrations import integration_type_registry | |||
r4610 | from rhodecode.integrations.views import GlobalIntegrationsView | |||
from rhodecode.integrations.views import RepoGroupIntegrationsView | ||||
from rhodecode.integrations.views import RepoIntegrationsView | ||||
r411 | ||||
log = logging.getLogger(__name__) | ||||
r3099 | class ValidIntegrationPredicate(object): | |||
def __init__(self, val, config): | ||||
self.val = val | ||||
def text(self): | ||||
r5064 | return f'valid_integration_route = {self.val}' | |||
r3099 | ||||
phash = text | ||||
def __call__(self, info, request): | ||||
integration_type = info['match']['integration'] | ||||
integration_id = info['match'].get('integration_id') | ||||
if integration_type not in integration_type_registry: | ||||
return False | ||||
if integration_id: | ||||
if not safe_int(integration_id): | ||||
return False | ||||
integration = Integration.get(integration_id) | ||||
if not integration: | ||||
return False | ||||
if integration.integration_type != integration_type: | ||||
return False | ||||
# match types to repo or repo group | ||||
repo_name = info['match'].get('repo_name') | ||||
repo_group_name = info['match'].get('repo_group_name') | ||||
repo, repo_group = None, None | ||||
if repo_name: | ||||
repo = Repository.get_by_repo_name(repo_name) | ||||
if not repo: | ||||
return False | ||||
if repo_group_name: | ||||
repo_group = RepoGroup.get_by_group_name(repo_group_name) | ||||
if not repo_group: | ||||
return False | ||||
if repo and repo.repo_id != integration.repo_id: | ||||
return False | ||||
if repo_group and repo_group.group_id != integration.repo_group_id: | ||||
return False | ||||
return True | ||||
r411 | def includeme(config): | |||
r3099 | config.add_route_predicate( | |||
'valid_integration', ValidIntegrationPredicate) | ||||
r667 | ||||
# global integrations | ||||
r731 | config.add_route('global_integrations_new', | |||
ADMIN_PREFIX + '/integrations/new') | ||||
r4610 | config.add_view(GlobalIntegrationsView, | |||
r731 | attr='new_integration', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/new.mako', | |||
r731 | request_method='GET', | |||
route_name='global_integrations_new') | ||||
r411 | config.add_route('global_integrations_home', | |||
ADMIN_PREFIX + '/integrations') | ||||
config.add_route('global_integrations_list', | ||||
ADMIN_PREFIX + '/integrations/{integration}') | ||||
for route_name in ['global_integrations_home', 'global_integrations_list']: | ||||
r4610 | config.add_view(GlobalIntegrationsView, | |||
r1990 | attr='integration_list', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/list.mako', | |||
r411 | request_method='GET', | |||
route_name=route_name) | ||||
config.add_route('global_integrations_create', | ||||
ADMIN_PREFIX + '/integrations/{integration}/new', | ||||
r3099 | valid_integration=True) | |||
r411 | config.add_route('global_integrations_edit', | |||
ADMIN_PREFIX + '/integrations/{integration}/{integration_id}', | ||||
r3099 | valid_integration=True) | |||
r731 | ||||
r411 | for route_name in ['global_integrations_create', 'global_integrations_edit']: | |||
r4610 | config.add_view(GlobalIntegrationsView, | |||
r411 | attr='settings_get', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/form.mako', | |||
r411 | request_method='GET', | |||
route_name=route_name) | ||||
r4610 | config.add_view(GlobalIntegrationsView, | |||
r411 | attr='settings_post', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/form.mako', | |||
r731 | request_method='POST', | |||
route_name=route_name) | ||||
# repo group integrations | ||||
config.add_route('repo_group_integrations_home', | ||||
r2175 | add_route_requirements('/{repo_group_name}/_settings/integrations'), | |||
r1990 | repo_group_route=True) | |||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='integration_list', | |||
renderer='rhodecode:templates/admin/integrations/list.mako', | ||||
request_method='GET', | ||||
route_name='repo_group_integrations_home') | ||||
r731 | ||||
config.add_route('repo_group_integrations_new', | ||||
r2175 | add_route_requirements('/{repo_group_name}/_settings/integrations/new'), | |||
r1990 | repo_group_route=True) | |||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r731 | attr='new_integration', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/new.mako', | |||
r731 | request_method='GET', | |||
route_name='repo_group_integrations_new') | ||||
r1990 | config.add_route('repo_group_integrations_list', | |||
r2175 | add_route_requirements('/{repo_group_name}/_settings/integrations/{integration}'), | |||
r1990 | repo_group_route=True, | |||
r3099 | valid_integration=True) | |||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='integration_list', | |||
renderer='rhodecode:templates/admin/integrations/list.mako', | ||||
request_method='GET', | ||||
route_name='repo_group_integrations_list') | ||||
r731 | config.add_route('repo_group_integrations_create', | |||
r2175 | add_route_requirements('/{repo_group_name}/_settings/integrations/{integration}/new'), | |||
r1990 | repo_group_route=True, | |||
r3099 | valid_integration=True) | |||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='settings_get', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='GET', | ||||
route_name='repo_group_integrations_create') | ||||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='settings_post', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='POST', | ||||
route_name='repo_group_integrations_create') | ||||
r731 | config.add_route('repo_group_integrations_edit', | |||
r2175 | add_route_requirements('/{repo_group_name}/_settings/integrations/{integration}/{integration_id}'), | |||
r1990 | repo_group_route=True, | |||
r3099 | valid_integration=True) | |||
r411 | ||||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='settings_get', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='GET', | ||||
route_name='repo_group_integrations_edit') | ||||
r4610 | config.add_view(RepoGroupIntegrationsView, | |||
r1990 | attr='settings_post', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='POST', | ||||
route_name='repo_group_integrations_edit') | ||||
r667 | ||||
# repo integrations | ||||
r411 | config.add_route('repo_integrations_home', | |||
r1990 | add_route_requirements('/{repo_name}/settings/integrations'), | |||
repo_route=True) | ||||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='integration_list', | |||
request_method='GET', | ||||
renderer='rhodecode:templates/admin/integrations/list.mako', | ||||
route_name='repo_integrations_home') | ||||
r411 | ||||
r731 | config.add_route('repo_integrations_new', | |||
r1990 | add_route_requirements('/{repo_name}/settings/integrations/new'), | |||
repo_route=True) | ||||
r4610 | config.add_view(RepoIntegrationsView, | |||
r731 | attr='new_integration', | |||
r1282 | renderer='rhodecode:templates/admin/integrations/new.mako', | |||
r731 | request_method='GET', | |||
route_name='repo_integrations_new') | ||||
r1990 | config.add_route('repo_integrations_list', | |||
add_route_requirements('/{repo_name}/settings/integrations/{integration}'), | ||||
repo_route=True, | ||||
r3099 | valid_integration=True) | |||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='integration_list', | |||
request_method='GET', | ||||
renderer='rhodecode:templates/admin/integrations/list.mako', | ||||
route_name='repo_integrations_list') | ||||
r411 | config.add_route('repo_integrations_create', | |||
r1990 | add_route_requirements('/{repo_name}/settings/integrations/{integration}/new'), | |||
repo_route=True, | ||||
r3099 | valid_integration=True) | |||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='settings_get', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='GET', | ||||
route_name='repo_integrations_create') | ||||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='settings_post', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='POST', | ||||
route_name='repo_integrations_create') | ||||
r411 | config.add_route('repo_integrations_edit', | |||
r1990 | add_route_requirements('/{repo_name}/settings/integrations/{integration}/{integration_id}'), | |||
repo_route=True, | ||||
r3099 | valid_integration=True) | |||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='settings_get', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='GET', | ||||
route_name='repo_integrations_edit') | ||||
r4610 | config.add_view(RepoIntegrationsView, | |||
r1990 | attr='settings_post', | |||
renderer='rhodecode:templates/admin/integrations/form.mako', | ||||
request_method='POST', | ||||
route_name='repo_integrations_edit') | ||||