# HG changeset patch # User Mads Kiilerich # Date 2018-05-07 11:38:13 # Node ID 02e0d2d469bf2f5b7c8c99e85ec6f96e13b00409 # Parent d64cf8f33f6f84e185b5f0f459b826827977af35 utils: move clone URI validator function to more generic utils.is_valid_repo_uri No changes to the functionality, even though the API and implementation could use some clean-up ... diff --git a/kallithea/lib/utils.py b/kallithea/lib/utils.py --- a/kallithea/lib/utils.py +++ b/kallithea/lib/utils.py @@ -265,6 +265,36 @@ def get_filesystem_repos(path): dirs[:] = recurse_dirs +def is_valid_repo_uri(repo_type, url, ui): + """Check if the url seems like a valid remote repo location - raise an Exception if any problems""" + if repo_type == 'hg': + from kallithea.lib.vcs.backends.hg.repository import MercurialRepository + if url.startswith('http') or url.startswith('ssh'): + # initially check if it's at least the proper URL + # or does it pass basic auth + MercurialRepository._check_url(url, ui) + elif url.startswith('svn+http'): + from hgsubversion.svnrepo import svnremoterepo + svnremoterepo(ui, url).svn.uuid + elif url.startswith('git+http'): + raise NotImplementedError() + else: + raise Exception('URI %s not allowed' % (url,)) + + elif repo_type == 'git': + from kallithea.lib.vcs.backends.git.repository import GitRepository + if url.startswith('http') or url.startswith('git'): + # initially check if it's at least the proper URL + # or does it pass basic auth + GitRepository._check_url(url) + elif url.startswith('svn+http'): + raise NotImplementedError() + elif url.startswith('hg+http'): + raise NotImplementedError() + else: + raise Exception('URI %s not allowed' % (url)) + + def is_valid_repo(repo_name, base_path, scm=None): """ Returns True if given path is a valid repository False otherwise. diff --git a/kallithea/model/validators.py b/kallithea/model/validators.py --- a/kallithea/model/validators.py +++ b/kallithea/model/validators.py @@ -30,7 +30,7 @@ from formencode.validators import ( ) from kallithea.lib.compat import OrderedSet from kallithea.lib import ipaddr -from kallithea.lib.utils import repo_name_slug +from kallithea.lib.utils import repo_name_slug, is_valid_repo_uri from kallithea.lib.utils2 import str2bool, aslist from kallithea.model.db import RepoGroup, Repository, UserGroup, User from kallithea.lib.exceptions import LdapImportError @@ -432,34 +432,6 @@ def SlugifyName(): def ValidCloneUri(): from kallithea.lib.utils import make_ui - def url_handler(repo_type, url, ui): - if repo_type == 'hg': - from kallithea.lib.vcs.backends.hg.repository import MercurialRepository - if url.startswith('http') or url.startswith('ssh'): - # initially check if it's at least the proper URL - # or does it pass basic auth - MercurialRepository._check_url(url, ui) - elif url.startswith('svn+http'): - from hgsubversion.svnrepo import svnremoterepo - svnremoterepo(ui, url).svn.uuid - elif url.startswith('git+http'): - raise NotImplementedError() - else: - raise Exception('clone from URI %s not allowed' % (url,)) - - elif repo_type == 'git': - from kallithea.lib.vcs.backends.git.repository import GitRepository - if url.startswith('http') or url.startswith('git'): - # initially check if it's at least the proper URL - # or does it pass basic auth - GitRepository._check_url(url) - elif url.startswith('svn+http'): - raise NotImplementedError() - elif url.startswith('hg+http'): - raise NotImplementedError() - else: - raise Exception('clone from URI %s not allowed' % (url)) - class _validator(formencode.validators.FancyValidator): messages = { 'clone_uri': _('Invalid repository URL'), @@ -473,7 +445,7 @@ def ValidCloneUri(): if url and url != value.get('clone_uri_hidden'): try: - url_handler(repo_type, url, make_ui('db', clear_session=False)) + is_valid_repo_uri(repo_type, url, make_ui('db', clear_session=False)) except Exception: log.exception('URL validation failed') msg = M(self, 'clone_uri')