diff --git a/bookwyrm/forms/landing.py b/bookwyrm/forms/landing.py index b01c2cc98..36c18dfb8 100644 --- a/bookwyrm/forms/landing.py +++ b/bookwyrm/forms/landing.py @@ -1,4 +1,6 @@ """ Forms for the landing pages """ +from django.contrib.auth.password_validation import validate_password +from django.core.exceptions import ValidationError from django.forms import PasswordInput from django.utils.translation import gettext_lazy as _ @@ -28,6 +30,10 @@ class RegisterForm(CustomForm): """Check if the username is taken""" cleaned_data = super().clean() localname = cleaned_data.get("localname").strip() + try: + validate_password(cleaned_data.get("password")) + except ValidationError as err: + self.add_error("password", err) if models.User.objects.filter(localname=localname).first(): self.add_error("localname", _("User with this username already exists")) diff --git a/bookwyrm/tests/views/landing/test_register.py b/bookwyrm/tests/views/landing/test_register.py index 24360a646..aa1ca7fb9 100644 --- a/bookwyrm/tests/views/landing/test_register.py +++ b/bookwyrm/tests/views/landing/test_register.py @@ -122,6 +122,17 @@ class RegisterViews(TestCase): self.assertEqual(models.User.objects.count(), 1) validate_html(response.render()) + def test_register_invalid_password(self, *_): + """gotta have an email""" + view = views.Register.as_view() + self.assertEqual(models.User.objects.count(), 1) + request = self.factory.post( + "register/", {"localname": "nutria", "password": "password", "email": "aa"} + ) + response = view(request) + self.assertEqual(models.User.objects.count(), 1) + validate_html(response.render()) + def test_register_error_and_invite(self, *_): """redirect to the invite page""" view = views.Register.as_view()