diff --git a/forms.py b/forms.py index 0faf0e0..e87149f 100644 --- a/forms.py +++ b/forms.py @@ -1,9 +1,11 @@ from wtforms import Form, BooleanField, StringField, PasswordField, validators +from validators import NoProfanity + class RegistrationForm(Form): - username = StringField('Username', [validators.Length(min=4, max=25)]) - name = StringField('Name', [validators.Length(min=2, max=35)]) + username = StringField('Username', [validators.Length(min=4, max=25), NoProfanity()]) + name = StringField('Name', [validators.Length(min=2, max=35), NoProfanity()]) password = PasswordField('New Password', [ validators.DataRequired(), validators.EqualTo('confirm', message='Passwords must match') @@ -20,12 +22,12 @@ class LoginForm(Form): class EditProfileForm(Form): name = RegistrationForm.name - about_me = StringField('About Me', [validators.Optional()]) + about_me = StringField('About Me', [validators.Optional(), NoProfanity()]) class NewPostForm(Form): - text = StringField('Text', [validators.Length(min=15, max=1000)]) + text = StringField('Text', [validators.Length(min=15, max=1000), NoProfanity()]) class NewCommentForm(Form): - text = StringField('Text', [validators.Length(min=5, max=50)]) + text = StringField('Text', [validators.Length(min=5, max=50), NoProfanity()]) diff --git a/validators.py b/validators.py new file mode 100644 index 0000000..7a45f68 --- /dev/null +++ b/validators.py @@ -0,0 +1,16 @@ +from typing import Optional +from profanity_filter import ProfanityFilter +from wtforms.validators import ValidationError + +pf = ProfanityFilter() + + +class NoProfanity(object): + def __init__(self, message: Optional[str] = None): + if not message: + message = 'Profanity is not acceptable on Runnerspace' + self.message = message + + def __call__(self, form, field): + if pf.is_profane(field.data): + raise ValidationError(self.message)