Mercurial > kallithea
changeset 1261:30828b1ebe20 beta
added dump validation of cloneurl, it can still freeze if server will ask for auth.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 16 Apr 2011 21:05:21 +0200 |
parents | 83da8834f7b1 |
children | 238bea955b54 |
files | rhodecode/model/forms.py |
diffstat | 1 files changed, 31 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/model/forms.py Fri Apr 15 01:00:29 2011 +0200 +++ b/rhodecode/model/forms.py Sat Apr 16 21:05:21 2011 +0200 @@ -226,13 +226,40 @@ return _ValidRepoName +def ValidCloneUri(): + from mercurial.httprepo import httprepository, httpsrepository + from rhodecode.lib.utils import make_ui + + class _ValidCloneUri(formencode.validators.FancyValidator): + def to_python(self, value, state): + if not value: + pass + elif value.startswith('https'): + try: + httpsrepository(make_ui('db'), value).capabilities() + except: + raise formencode.Invalid(_('invalid clone url'), value, + state) + elif value.startswith('http'): + try: + httprepository(make_ui('db'), value).capabilities() + except: + raise formencode.Invalid(_('invalid clone url'), value, + state) + else: + raise formencode.Invalid(_('Invalid clone url, provide a ' + 'valid clone http\s url'), value, + state) + + return _ValidCloneUri + def ValidForkType(old_data): class _ValidForkType(formencode.validators.FancyValidator): def to_python(self, value, state): if old_data['repo_type'] != value: - raise formencode.Invalid(_('Fork have to be the same type as original'), - value, state) + raise formencode.Invalid(_('Fork have to be the same ' + 'type as original'), value, state) return value return _ValidForkType @@ -457,7 +484,8 @@ filter_extra_fields = False repo_name = All(UnicodeString(strip=True, min=1, not_empty=True), ValidRepoName(edit, old_data)) - clone_uri = UnicodeString(strip=True, min=1, not_empty=False) + clone_uri = All(UnicodeString(strip=True, min=1, not_empty=False), + ValidCloneUri()()) repo_group = OneOf(repo_groups, hideList=True) repo_type = OneOf(supported_backends) description = UnicodeString(strip=True, min=1, not_empty=True)