# HG changeset patch # User Serhii Ilin # Date 2024-02-28 09:52:11 # Node ID cede61e3bb955da2601085222347cfeeaf5a9852 # Parent 359b5cacb371f930bdc1b4a99424e4cef15d0f16 refactor(ssh-wrapper): changed SSHVcsServer to SshVcsServer, updated call_service_api method. diff --git a/rhodecode/apps/ssh_support/lib/backends/__init__.py b/rhodecode/apps/ssh_support/lib/backends/__init__.py --- a/rhodecode/apps/ssh_support/lib/backends/__init__.py +++ b/rhodecode/apps/ssh_support/lib/backends/__init__.py @@ -24,7 +24,6 @@ from sqlalchemy import Table from rhodecode.lib.api_utils import call_service_api from rhodecode.lib.utils2 import AttributeDict -from rhodecode.lib.vcs.exceptions import ImproperlyConfiguredError from .hg import MercurialServer from .git import GitServer @@ -265,35 +264,6 @@ class SshWrapperStandalone(SshWrapper): New version of SshWrapper designed to be depended only on service API """ repos_path = None - service_api_host: str - service_api_token: str - api_url: str - - def __init__(self, command, connection_info, mode, - user, user_id, key_id: int, shell, ini_path: str, settings, env): - - # validate our settings for making a standalone calls - try: - self.service_api_host = settings['app.service_api.host'] - self.service_api_token = settings['app.service_api.token'] - except KeyError: - raise ImproperlyConfiguredError( - "app.service_api.host or app.service_api.token are missing. " - "Please ensure that app.service_api.host and app.service_api.token are " - "defined inside of .ini configuration file." - ) - - try: - self.api_url = settings['rhodecode.api.url'] - except KeyError: - raise ImproperlyConfiguredError( - "rhodecode.api.url is missing. " - "Please ensure that rhodecode.api.url is " - "defined inside of .ini configuration file." - ) - - super(SshWrapperStandalone, self).__init__( - command, connection_info, mode, user, user_id, key_id, shell, ini_path, settings, env) @staticmethod def parse_user_related_data(user_data): @@ -326,7 +296,7 @@ class SshWrapperStandalone(SshWrapper): exit_code = 1 elif scm_detected: - data = call_service_api(self.service_api_host, self.service_api_token, self.api_url, { + data = call_service_api(self.settings, { "method": "service_get_data_for_ssh_wrapper", "args": {"user_id": user_id, "repo_name": scm_repo, "key_id": self.key_id} }) @@ -364,7 +334,7 @@ class SshWrapperStandalone(SshWrapper): if repo_name.startswith('_'): org_repo_name = repo_name log.debug('translating UID repo %s', org_repo_name) - by_id_match = call_service_api(self.service_api_host, self.service_api_token, self.api_url, { + by_id_match = call_service_api(self.settings, { 'method': 'service_get_repo_name_by_id', "args": {"repo_id": repo_name} }) diff --git a/rhodecode/apps/ssh_support/lib/backends/base.py b/rhodecode/apps/ssh_support/lib/backends/base.py --- a/rhodecode/apps/ssh_support/lib/backends/base.py +++ b/rhodecode/apps/ssh_support/lib/backends/base.py @@ -28,7 +28,7 @@ from rhodecode.lib.api_utils import call log = logging.getLogger(__name__) -class SSHVcsServer(object): +class SshVcsServer(object): repo_user_agent = None # set in child classes _path = None # set executable path for hg/git/svn binary backend = None # set in child classes @@ -62,11 +62,7 @@ class SSHVcsServer(object): from rhodecode.model.scm import ScmModel ScmModel().mark_for_invalidation(repo_name) case 'celery': - service_api_host = self.settings['app.service_api.host'] - service_api_token = self.settings['app.service_api.token'] - api_url = self.settings['rhodecode.api.url'] - - call_service_api(service_api_host, service_api_token, api_url, { + call_service_api(self.settings, { "method": "service_mark_for_invalidation", "args": {"repo_name": repo_name} }) diff --git a/rhodecode/apps/ssh_support/lib/backends/git.py b/rhodecode/apps/ssh_support/lib/backends/git.py --- a/rhodecode/apps/ssh_support/lib/backends/git.py +++ b/rhodecode/apps/ssh_support/lib/backends/git.py @@ -21,7 +21,7 @@ import logging import subprocess from vcsserver import hooks -from .base import SSHVcsServer +from .base import SshVcsServer log = logging.getLogger(__name__) @@ -70,7 +70,7 @@ class GitTunnelWrapper(object): return result -class GitServer(SSHVcsServer): +class GitServer(SshVcsServer): backend = 'git' repo_user_agent = 'git' diff --git a/rhodecode/apps/ssh_support/lib/backends/hg.py b/rhodecode/apps/ssh_support/lib/backends/hg.py --- a/rhodecode/apps/ssh_support/lib/backends/hg.py +++ b/rhodecode/apps/ssh_support/lib/backends/hg.py @@ -23,7 +23,7 @@ import tempfile import textwrap import collections -from .base import SSHVcsServer +from .base import SshVcsServer from rhodecode.lib.api_utils import call_service_api @@ -94,7 +94,7 @@ class MercurialTunnelWrapper(object): self.remove_configs() -class MercurialServer(SSHVcsServer): +class MercurialServer(SshVcsServer): backend = 'hg' repo_user_agent = 'mercurial' cli_flags = ['phases', 'largefiles', 'extensions', 'experimental', 'hooks'] @@ -111,10 +111,7 @@ class MercurialServer(SSHVcsServer): def config_to_hgrc(self, repo_name): # Todo: once transition is done only call to service api should exist if self.hooks_protocol == 'celery': - service_api_host = self.settings['app.service_api.host'] - service_api_token = self.settings['app.service_api.token'] - api_url = self.settings['rhodecode.api.url'] - data = call_service_api(service_api_host, service_api_token, api_url, { + data = call_service_api(self.settings, { "method": "service_config_to_hgrc", "args": {"cli_flags": self.cli_flags, "repo_name": repo_name} }) diff --git a/rhodecode/apps/ssh_support/lib/backends/svn.py b/rhodecode/apps/ssh_support/lib/backends/svn.py --- a/rhodecode/apps/ssh_support/lib/backends/svn.py +++ b/rhodecode/apps/ssh_support/lib/backends/svn.py @@ -25,7 +25,7 @@ import tempfile from subprocess import Popen, PIPE import urllib.parse -from .base import SSHVcsServer +from .base import SshVcsServer log = logging.getLogger(__name__) @@ -218,7 +218,7 @@ class SubversionTunnelWrapper(object): return self.return_code -class SubversionServer(SSHVcsServer): +class SubversionServer(SshVcsServer): backend = 'svn' repo_user_agent = 'svn' diff --git a/rhodecode/lib/api_utils.py b/rhodecode/lib/api_utils.py --- a/rhodecode/lib/api_utils.py +++ b/rhodecode/lib/api_utils.py @@ -20,16 +20,25 @@ import urllib.parse from rhodecode.lib.vcs import CurlSession from rhodecode.lib.ext_json import json +from rhodecode.lib.vcs.exceptions import ImproperlyConfiguredError -def call_service_api(service_api_host, service_api_token, api_url, payload): - +def call_service_api(settings, payload): + try: + api_host = settings['app.service_api.host'] + api_token = settings['app.service_api.token'] + api_url = settings['rhodecode.api.url'] + except KeyError as exc: + raise ImproperlyConfiguredError( + f"{str(exc)} is missing. " + "Please ensure that app.service_api.host, app.service_api.token and rhodecode.api.url are " + "defined inside of .ini configuration file." + ) payload.update({ 'id': 'service', - 'auth_token': service_api_token + 'auth_token': api_token }) - - service_api_url = urllib.parse.urljoin(service_api_host, api_url) + service_api_url = urllib.parse.urljoin(api_host, api_url) response = CurlSession().post(service_api_url, json.dumps(payload)) if response.status_code != 200: