Add honeypot fields and minimum fill-out time for sign-up form (#15276)
* Add honeypot fields to limit non-specialized spam Add two honeypot fields: a fake website input and a fake password confirmation one. The label/placeholder/aria-label tells not to fill them, and they are hidden in CSS, so legitimate users should not fall into these. This should cut down on some non-Mastodon-specific spambots. * Require a 3 seconds delay before submitting the registration form * Fix tests * Move registration form time check to model validation * Give people a chance to clear the honeypot fields * Refactor honeypot translation strings Co-authored-by: Claire <claire.github-309c@sitedethib.com>master
parent
9669167aae
commit
49eb4d4ddf
@ -0,0 +1,9 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
module RegistrationSpamConcern |
||||||
|
extend ActiveSupport::Concern |
||||||
|
|
||||||
|
def set_registration_form_time |
||||||
|
session[:registration_form_time] = Time.now.utc |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,9 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
class RegistrationFormTimeValidator < ActiveModel::Validator |
||||||
|
REGISTRATION_FORM_MIN_TIME = 3.seconds.freeze |
||||||
|
|
||||||
|
def validate(user) |
||||||
|
user.errors.add(:base, I18n.t('auth.too_fast')) if user.registration_form_time.present? && user.registration_form_time > REGISTRATION_FORM_MIN_TIME.ago |
||||||
|
end |
||||||
|
end |
@ -1,3 +1,6 @@ |
|||||||
- if object.errors.any? |
- if object.errors.any? |
||||||
.flash-message.alert#error_explanation |
.flash-message.alert#error_explanation |
||||||
%strong= t('generic.validation_errors', count: object.errors.count) |
%strong= t('generic.validation_errors', count: object.errors.count) |
||||||
|
- object.errors[:base].each do |error| |
||||||
|
.flash-message.alert |
||||||
|
%strong= error |
||||||
|
Loading…
Reference in new issue