Fix Bug #828: Validate username
parent
ff8dd9e613
commit
2f0471a3a4
|
@ -16,12 +16,28 @@
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from django.core import validators
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class BaseRegisterSerializer(serializers.Serializer):
|
class BaseRegisterSerializer(serializers.Serializer):
|
||||||
full_name = serializers.CharField(max_length=256)
|
full_name = serializers.CharField(max_length=256)
|
||||||
email = serializers.EmailField(max_length=200)
|
email = serializers.EmailField(max_length=200)
|
||||||
username = serializers.CharField(max_length=200)
|
username = serializers.CharField(max_length=30)
|
||||||
password = serializers.CharField(min_length=4)
|
password = serializers.CharField(min_length=4)
|
||||||
|
|
||||||
|
def validate_username(self, attrs, source):
|
||||||
|
value = attrs[source]
|
||||||
|
validator = validators.RegexValidator(re.compile('^[\w.-]+$'), "invalid username", "invalid")
|
||||||
|
|
||||||
|
try:
|
||||||
|
validator(value)
|
||||||
|
except ValidationError:
|
||||||
|
raise serializers.ValidationError("Required. 30 characters or fewer. Letters, numbers "
|
||||||
|
"and /./-/_ characters'")
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
class PublicRegisterSerializer(BaseRegisterSerializer):
|
class PublicRegisterSerializer(BaseRegisterSerializer):
|
||||||
pass
|
pass
|
||||||
|
@ -30,7 +46,8 @@ class PublicRegisterSerializer(BaseRegisterSerializer):
|
||||||
class PrivateRegisterForNewUserSerializer(BaseRegisterSerializer):
|
class PrivateRegisterForNewUserSerializer(BaseRegisterSerializer):
|
||||||
token = serializers.CharField(max_length=255, required=True)
|
token = serializers.CharField(max_length=255, required=True)
|
||||||
|
|
||||||
|
|
||||||
class PrivateRegisterForExistingUserSerializer(serializers.Serializer):
|
class PrivateRegisterForExistingUserSerializer(serializers.Serializer):
|
||||||
username = serializers.CharField(max_length=200)
|
username = serializers.CharField(max_length=30)
|
||||||
password = serializers.CharField(min_length=4)
|
password = serializers.CharField(min_length=4)
|
||||||
token = serializers.CharField(max_length=255, required=True)
|
token = serializers.CharField(max_length=255, required=True)
|
||||||
|
|
|
@ -46,5 +46,6 @@ class RecoverySerializer(serializers.Serializer):
|
||||||
token = serializers.CharField(max_length=200)
|
token = serializers.CharField(max_length=200)
|
||||||
password = serializers.CharField(min_length=6)
|
password = serializers.CharField(min_length=6)
|
||||||
|
|
||||||
|
|
||||||
class ChangeEmailSerializer(serializers.Serializer):
|
class ChangeEmailSerializer(serializers.Serializer):
|
||||||
email_token = serializers.CharField(max_length=200)
|
email_token = serializers.CharField(max_length=200)
|
||||||
|
|
|
@ -48,7 +48,7 @@ def test_respond_400_if_domain_does_not_allow_public_registration(client, regist
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
|
|
||||||
|
|
||||||
def test_respond_201_if_domain_allows_public_registration(client, register_form):
|
def test_respond_201_with_invitation_if_domain_does_not_allows_public_registration(client, register_form):
|
||||||
user = factories.UserFactory()
|
user = factories.UserFactory()
|
||||||
membership = factories.MembershipFactory(user=user)
|
membership = factories.MembershipFactory(user=user)
|
||||||
|
|
||||||
|
@ -120,3 +120,15 @@ def test_response_404_in_registration_with_github_account_in_a_project_with_inva
|
||||||
|
|
||||||
response = client.post(reverse("auth-list"), form)
|
response = client.post(reverse("auth-list"), form)
|
||||||
assert response.status_code == 404
|
assert response.status_code == 404
|
||||||
|
|
||||||
|
|
||||||
|
def test_respond_400_If_username_is_invalid(client, settings, register_form):
|
||||||
|
settings.PUBLIC_REGISTER_ENABLED = True
|
||||||
|
|
||||||
|
register_form.update({"username": "User Examp:/e"})
|
||||||
|
response = client.post(reverse("auth-register"), register_form)
|
||||||
|
assert response.status_code == 400
|
||||||
|
|
||||||
|
register_form.update({"username": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-error"})
|
||||||
|
response = client.post(reverse("auth-register"), register_form)
|
||||||
|
assert response.status_code == 400
|
||||||
|
|
Loading…
Reference in New Issue