diff --git a/app/blueprints/users/account.py b/app/blueprints/users/account.py index 780a6a72..2841bdf4 100644 --- a/app/blueprints/users/account.py +++ b/app/blueprints/users/account.py @@ -102,14 +102,19 @@ def logout(): class RegisterForm(FlaskForm): display_name = StringField("Display Name", [Optional(), Length(1, 20)], filters=[lambda x: nonEmptyOrNone(x)]) username = StringField("Username", [InputRequired(), - Regexp("^[a-zA-Z0-9._-]+$", message="Only a-zA-Z0-9._ allowed")]) - email = StringField("Email", [InputRequired(), Email()]) + Regexp("^[a-zA-Z0-9._-]+$", message="Only a-zA-Z0-9._ allowed")]) + email = StringField("Email", [InputRequired(), Email()]) password = PasswordField("Password", [InputRequired(), Length(6, 100)]) - agree = BooleanField("I agree", [Required()]) - submit = SubmitField("Register") + question = StringField("What is the result of the above calculation?", [InputRequired()]) + agree = BooleanField("I agree", [DataRequired()]) + submit = SubmitField("Register") def handle_register(form): + if form.question.data.strip().lower() != "19": + flash("Incorrect captcha answer", "danger") + return + user_by_name = User.query.filter(or_( User.username == form.username.data, User.username == form.display_name.data, @@ -168,7 +173,8 @@ def register(): if ret: return ret - return render_template("users/register.html", form=form, suggested_password=genphrase(entropy=52, wordset="bip39")) + return render_template("users/register.html", form=form, + suggested_password=genphrase(entropy=52, wordset="bip39")) class ForgotPasswordForm(FlaskForm): diff --git a/app/public/static/puzzle.png b/app/public/static/puzzle.png new file mode 100644 index 00000000..ea9fe0ec Binary files /dev/null and b/app/public/static/puzzle.png differ diff --git a/app/templates/users/register.html b/app/templates/users/register.html index 82657c1f..31696c53 100644 --- a/app/templates/users/register.html +++ b/app/templates/users/register.html @@ -32,6 +32,11 @@ Register {{ suggested_password }}

+

+ +

+ {{ render_field(form.question, hint=_("Please prove that you are human")) }} + {% set label %} {{ _("I agree to the ") }}