Skip to content

Commit e0bf549

Browse files
authored
addition of validation to minimum and maximum password settings (#12798)
* update minimum and maximum password length validation in system settings form * update minimum and maximum password length validation in system settings serializer * Apply suggestions from code review * Update dojo/api_v2/serializers.py * move validation to model * fix ruff * add migration
1 parent 0e99640 commit e0bf549

2 files changed

Lines changed: 41 additions & 2 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 5.1.8 on 2025-07-17 20:45
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('dojo', '0233_remove_test_actual_time_remove_test_estimated_time'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='system_settings',
16+
name='maximum_password_length',
17+
field=models.IntegerField(default=48, help_text='Requires user to set passwords less than maximum length.', validators=[django.core.validators.MinValueValidator(9), django.core.validators.MaxValueValidator(48)], verbose_name='Maximum password length'),
18+
),
19+
migrations.AlterField(
20+
model_name='system_settings',
21+
name='minimum_password_length',
22+
field=models.IntegerField(default=9, help_text='Requires user to set passwords greater than minimum length.', validators=[django.core.validators.MinValueValidator(9), django.core.validators.MaxValueValidator(48)], verbose_name='Minimum password length'),
23+
),
24+
]

dojo/models.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,11 +618,13 @@ class System_Settings(models.Model):
618618
minimum_password_length = models.IntegerField(
619619
default=9,
620620
verbose_name=_("Minimum password length"),
621-
help_text=_("Requires user to set passwords greater than minimum length."))
621+
help_text=_("Requires user to set passwords greater than minimum length."),
622+
validators=[MinValueValidator(9), MaxValueValidator(48)])
622623
maximum_password_length = models.IntegerField(
623624
default=48,
624625
verbose_name=_("Maximum password length"),
625-
help_text=_("Requires user to set passwords less than maximum length."))
626+
help_text=_("Requires user to set passwords less than maximum length."),
627+
validators=[MinValueValidator(9), MaxValueValidator(48)])
626628
number_character_required = models.BooleanField(
627629
default=True,
628630
blank=False,
@@ -665,6 +667,19 @@ class System_Settings(models.Model):
665667
from dojo.middleware import System_Settings_Manager
666668
objects = System_Settings_Manager()
667669

670+
def clean(self):
671+
super().clean()
672+
673+
if (
674+
self.minimum_password_length is not None
675+
and self.maximum_password_length is not None
676+
):
677+
if self.minimum_password_length > self.maximum_password_length:
678+
msg = "Minimum required password length must be larger than the maximum required password length."
679+
raise ValidationError({
680+
"minimum_password_length": msg,
681+
})
682+
668683

669684
class SystemSettingsFormAdmin(forms.ModelForm):
670685
product_grade = forms.CharField(widget=forms.Textarea)

0 commit comments

Comments
 (0)