# HG changeset patch # User Mads Kiilerich # Date 2020-11-14 17:55:36 # Node ID 2fac3c55f9bccfaeee9b12f2a9bc9ddb381311fd # Parent 7b7afdbe57af3502f3b953a491f5d5f4a2abbe1d vcs: slight clean up of _check_url Make static void function static and without return value. diff --git a/kallithea/lib/vcs/backends/git/repository.py b/kallithea/lib/vcs/backends/git/repository.py --- a/kallithea/lib/vcs/backends/git/repository.py +++ b/kallithea/lib/vcs/backends/git/repository.py @@ -147,20 +147,17 @@ class GitRepository(BaseRepository): stdout, _stderr = self._run_git_command(cmd, cwd=cwd) return safe_str(stdout) - @classmethod - def _check_url(cls, url): + @staticmethod + def _check_url(url): """ - Function will check given url and try to verify if it's a valid - link. Sometimes it may happened that git will issue basic - auth request that can cause whole API to hang when used from python - or other external calls. + Raise URLError if url doesn't seem like a valid safe Git URL. We + only allow http, https, git, and ssh URLs. - On failures it'll raise urllib2.HTTPError, exception is also thrown - when the return code is non 200 + For http and https URLs, make a connection and probe to see if it is valid. """ # check first if it's not an local url if os.path.isabs(url) and os.path.isdir(url): - return True + return if url.startswith('git://'): try: @@ -175,7 +172,7 @@ class GitRepository(BaseRepository): raise urllib.error.URLError("Invalid escape character in path: '%s'" % c) if c.isspace() and c != ' ': raise urllib.error.URLError("Invalid whitespace character in path: %r" % c) - return True + return if not url.startswith('http://') and not url.startswith('https://'): raise urllib.error.URLError("Unsupported protocol in URL %s" % url) @@ -211,8 +208,6 @@ class GitRepository(BaseRepository): raise urllib.error.URLError( "url [%s] does not look like an git" % cleaned_uri) - return True - def _get_repo(self, create, src_url=None, update_after_clone=False, bare=False): if create and os.path.exists(self.path): diff --git a/kallithea/lib/vcs/backends/hg/repository.py b/kallithea/lib/vcs/backends/hg/repository.py --- a/kallithea/lib/vcs/backends/hg/repository.py +++ b/kallithea/lib/vcs/backends/hg/repository.py @@ -281,13 +281,13 @@ class MercurialRepository(BaseRepository ignorews=ignore_whitespace, context=context))) - @classmethod - def _check_url(cls, url, repoui=None): - """ - Function will check given url and try to verify if it's a valid - link. Sometimes it may happened that mercurial will issue basic - auth request that can cause whole API to hang when used from python - or other external calls. + @staticmethod + def _check_url(url, repoui=None): + r""" + Raise URLError if url doesn't seem like a valid safe Hg URL. We + only allow http, https, ssh, and hg-git URLs. + + For http, https and git URLs, make a connection and probe to see if it is valid. On failures it'll raise urllib2.HTTPError, exception is also thrown when the return code is non 200 @@ -295,13 +295,13 @@ class MercurialRepository(BaseRepository # check first if it's not an local url url = safe_bytes(url) if os.path.isdir(url) or url.startswith(b'file:'): - return True + return if url.startswith(b'ssh:'): # in case of invalid uri or authentication issues, sshpeer will # throw an exception. mercurial.sshpeer.instance(repoui or mercurial.ui.ui(), url, False).lookup(b'tip') - return True + return url_prefix = None if b'+' in url[:url.find(b'://')]: @@ -343,8 +343,6 @@ class MercurialRepository(BaseRepository "url [%s] does not look like an hg repo org_exc: %s" % (cleaned_uri, e)) - return True - def _get_repo(self, create, src_url=None, update_after_clone=False): """ Function will check for mercurial repository in given path and return