Skip to content

Commit

Permalink
Merge pull request #147 from kairichard/validate-package-name
Browse files Browse the repository at this point in the history
Validate package name
  • Loading branch information
Cesar Canassa committed May 11, 2015
2 parents 5e1c9d6 + bdb3b97 commit 4205b60
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 3 deletions.
20 changes: 20 additions & 0 deletions localshop/apps/packages/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,26 @@ class Meta:
'home_page', 'license', 'summary', 'version',
]

class PackageForm(forms.ModelForm):
class Meta:
model = models.Package
fields = [
'name',
]

def __init__(self, *args, **kwargs):
self._user = kwargs.pop("user")
super(PackageForm, self).__init__(*args, **kwargs)
self.base_fields['name'].error_messages.update({
'invalid': 'Enter a valid name consisting of letters, numbers, underscores or hyphens '
})

def save(self):
obj = super(PackageForm, self).save()
obj.is_local = True
obj.owners.add(self._user)
obj.save()
return obj

class ReleaseForm(forms.ModelForm):
class Meta:
Expand Down
7 changes: 4 additions & 3 deletions localshop/apps/packages/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,10 @@ def handle_register_or_upload(post_data, files, user):
return HttpResponseBadRequest('ERRORS %s' % form.errors)

if not package:
package = models.Package.objects.create(name=name, is_local=True)
package.owners.add(user)
package.save()
pkg_form = forms.PackageForm(post_data, user=user)
if not pkg_form.is_valid():
return HttpResponseBadRequest('ERRORS %s' % pkg_form.errors.as_text())
package = pkg_form.save()

release = form.save(commit=False)
release.package = package
Expand Down
21 changes: 21 additions & 0 deletions tests/apps/packages/views/test_simple_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,27 @@ def test_upload_should_not_overwrite_pypi_package(live_server, admin_user):
assert response.content == 'localshop is a pypi package!'


def test_package_name_with_whitespace(live_server, admin_user):
CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False)

headers = {
'Authorization': 'Basic ' + standard_b64encode('admin:password')
}

data = {
':action': 'file_upload',
'version': '1.0',
'metadata_version': '1.0',
'filetype': 'sdist',
'md5_digest': '06ffe94789d7bd9efba1109f40e935cf',
}
data["name"] = "invalid name"
response = requests.post(live_server + '/simple/', data=data, files={'content': 'Hi'}, headers=headers)

assert response.status_code == 400
assert "Enter a valid name consisting of letters, numbers, underscores or hyphens" in response.content


def test_package_name_with_hyphen_instead_underscore(live_server, admin_user):
CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False)

Expand Down

0 comments on commit 4205b60

Please sign in to comment.