diff --git a/core/admin/mailu/ui/forms.py b/core/admin/mailu/ui/forms.py index 4f7a30ae..57c106c3 100644 --- a/core/admin/mailu/ui/forms.py +++ b/core/admin/mailu/ui/forms.py @@ -90,9 +90,10 @@ class UserSignupForm(flask_wtf.FlaskForm): localpart = fields.StringField(_('Email address'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)]) pw = fields.PasswordField(_('Password'), [validators.DataRequired()]) pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')]) - captcha = flask_wtf.RecaptchaField() submit = fields.SubmitField(_('Sign up')) +class UserSignupFormCaptcha(UserSignupForm): + captcha = flask_wtf.RecaptchaField() class UserSettingsForm(flask_wtf.FlaskForm): displayed_name = fields.StringField(_('Displayed name')) diff --git a/core/admin/mailu/ui/templates/user/signup.html b/core/admin/mailu/ui/templates/user/signup.html index 59c1a988..f540d660 100644 --- a/core/admin/mailu/ui/templates/user/signup.html +++ b/core/admin/mailu/ui/templates/user/signup.html @@ -14,7 +14,9 @@ {% call macros.box() %} {{ macros.form_field(form.localpart, append='@'+domain.name+'') }} {{ macros.form_fields((form.pw, form.pw2)) }} - {{ macros.form_field(form.captcha) }} + {% if form.captcha %} + {{ macros.form_field(form.captcha) }} + {% endif %} {{ macros.form_field(form.submit) }} {% endcall %} diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index c54d22ec..f7f75c32 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -170,7 +170,11 @@ def user_signup(domain_name=None): available_domains=available_domains) domain = available_domains.get(domain_name) or flask.abort(404) quota_bytes = domain.max_quota_bytes or app.config['DEFAULT_QUOTA'] - form = forms.UserSignupForm() + if app.config['RECAPTCHA_PUBLIC_KEY'] == "" or app.config['RECAPTCHA_PRIVATE_KEY'] == "": + form = forms.UserSignupForm() + else: + form = forms.UserSignupFormCaptcha() + if form.validate_on_submit(): if domain.has_email(form.localpart.data): flask.flash('Email is already used', 'error')