forked from fedi/mastodon
Fix unsupported time zone or locale preventing sign-up (#28035)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
parent
3ecc991f63
commit
4d96d716c4
|
@ -96,11 +96,9 @@ class User < ApplicationRecord
|
||||||
accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text }
|
accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text }
|
||||||
validates :invite_request, presence: true, on: :create, if: :invite_text_required?
|
validates :invite_request, presence: true, on: :create, if: :invite_text_required?
|
||||||
|
|
||||||
validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
|
|
||||||
validates_with BlacklistedEmailValidator, if: -> { ENV['EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION'] == 'true' || !confirmed? }
|
validates_with BlacklistedEmailValidator, if: -> { ENV['EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION'] == 'true' || !confirmed? }
|
||||||
validates_with EmailMxValidator, if: :validate_email_dns?
|
validates_with EmailMxValidator, if: :validate_email_dns?
|
||||||
validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create
|
validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create
|
||||||
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map { |tz| tz.tzinfo.name } }, allow_blank: true
|
|
||||||
|
|
||||||
# Honeypot/anti-spam fields
|
# Honeypot/anti-spam fields
|
||||||
attr_accessor :registration_form_time, :website, :confirm_password
|
attr_accessor :registration_form_time, :website, :confirm_password
|
||||||
|
@ -124,6 +122,8 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
before_validation :sanitize_languages
|
before_validation :sanitize_languages
|
||||||
before_validation :sanitize_role
|
before_validation :sanitize_role
|
||||||
|
before_validation :sanitize_time_zone
|
||||||
|
before_validation :sanitize_locale
|
||||||
before_create :set_approved
|
before_create :set_approved
|
||||||
after_commit :send_pending_devise_notifications
|
after_commit :send_pending_devise_notifications
|
||||||
after_create_commit :trigger_webhooks
|
after_create_commit :trigger_webhooks
|
||||||
|
@ -451,9 +451,15 @@ class User < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def sanitize_role
|
def sanitize_role
|
||||||
return if role.nil?
|
self.role = nil if role.present? && role.everyone?
|
||||||
|
end
|
||||||
|
|
||||||
self.role = nil if role.everyone?
|
def sanitize_time_zone
|
||||||
|
self.time_zone = nil if time_zone.present? && ActiveSupport::TimeZone[time_zone].nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def sanitize_locale
|
||||||
|
self.locale = nil if locale.present? && I18n.available_locales.exclude?(locale.to_sym)
|
||||||
end
|
end
|
||||||
|
|
||||||
def prepare_new_user!
|
def prepare_new_user!
|
||||||
|
|
|
@ -31,11 +31,5 @@ describe Settings::Preferences::AppearanceController do
|
||||||
|
|
||||||
expect(response).to redirect_to(settings_preferences_appearance_path)
|
expect(response).to redirect_to(settings_preferences_appearance_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'renders show on failure' do
|
|
||||||
put :update, params: { user: { locale: 'fake option' } }
|
|
||||||
|
|
||||||
expect(response).to render_template('preferences/appearance/show')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,12 +27,6 @@ RSpec.describe User do
|
||||||
expect(user).to model_have_error_on_field(:account)
|
expect(user).to model_have_error_on_field(:account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is invalid without a valid locale' do
|
|
||||||
user = Fabricate.build(:user, locale: 'toto')
|
|
||||||
user.valid?
|
|
||||||
expect(user).to model_have_error_on_field(:locale)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a valid email' do
|
it 'is invalid without a valid email' do
|
||||||
user = Fabricate.build(:user, email: 'john@')
|
user = Fabricate.build(:user, email: 'john@')
|
||||||
user.valid?
|
user.valid?
|
||||||
|
@ -45,6 +39,18 @@ RSpec.describe User do
|
||||||
expect(user.valid?).to be true
|
expect(user.valid?).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'cleans out invalid locale' do
|
||||||
|
user = Fabricate.build(:user, locale: 'toto')
|
||||||
|
expect(user.valid?).to be true
|
||||||
|
expect(user.locale).to be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'cleans out invalid timezone' do
|
||||||
|
user = Fabricate.build(:user, time_zone: 'toto')
|
||||||
|
expect(user.valid?).to be true
|
||||||
|
expect(user.time_zone).to be_nil
|
||||||
|
end
|
||||||
|
|
||||||
it 'cleans out empty string from languages' do
|
it 'cleans out empty string from languages' do
|
||||||
user = Fabricate.build(:user, chosen_languages: [''])
|
user = Fabricate.build(:user, chosen_languages: [''])
|
||||||
user.valid?
|
user.valid?
|
||||||
|
|
Loading…
Reference in a new issue