changeset 8286:4aa6a17afc49

validators: don't catch all Exceptions as invalid clone URIs, be specific When adding a new repository with a remote clone URI, the URI will be validated in some way. Several exceptions could occur during that validation. Previously, the code would catch based on 'Exception', which means that _any_ exception would cause the URI to be found invalid. This means that errors in the code (e.g. related to Python 3 conversion) were also categorized as 'invalid clone URI'. And thus, the tests that test an actually invalid URI would pass, even though there was a bug. Now, things have been refactored so it only is relevant to catch InvalidCloneUriException. Any other exception will now yield a 500 Internal Server Error, as expected.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Sun, 01 Mar 2020 21:40:32 +0100
parents eb795f7a7a18
children abb83e4edfd9
files kallithea/lib/utils.py kallithea/model/validators.py
diffstat 2 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/utils.py	Fri Mar 06 19:20:36 2020 +0100
+++ b/kallithea/lib/utils.py	Sun Mar 01 21:40:32 2020 +0100
@@ -226,7 +226,7 @@
 
 def is_valid_repo_uri(repo_type, url, ui):
     """Check if the url seems like a valid remote repo location
-    Raise InvalidCloneUriException or other Exception if any problems"""
+    Raise InvalidCloneUriException if any problems"""
     if repo_type == 'hg':
         if url.startswith('http') or url.startswith('ssh'):
             # initially check if it's at least the proper URL
--- a/kallithea/model/validators.py	Fri Mar 06 19:20:36 2020 +0100
+++ b/kallithea/model/validators.py	Sun Mar 01 21:40:32 2020 +0100
@@ -30,7 +30,7 @@
 from kallithea.config.routing import ADMIN_PREFIX
 from kallithea.lib.auth import HasPermissionAny, HasRepoGroupPermissionLevel
 from kallithea.lib.compat import OrderedSet
-from kallithea.lib.exceptions import LdapImportError
+from kallithea.lib.exceptions import InvalidCloneUriException, LdapImportError
 from kallithea.lib.utils import is_valid_repo_uri
 from kallithea.lib.utils2 import aslist, repo_name_slug, str2bool
 from kallithea.model.db import RepoGroup, Repository, User, UserGroup
@@ -409,7 +409,7 @@
             if url and url != value.get('clone_uri_hidden'):
                 try:
                     is_valid_repo_uri(repo_type, url, make_ui())
-                except Exception as e:
+                except InvalidCloneUriException as e:
                     log.warning('validation of clone URL %r failed: %s', url, e)
                     msg = self.message('clone_uri', state)
                     raise formencode.Invalid(msg, value, state,