Skip to content

Commit

Permalink
Fix unsupported time zone or locale preventing sign-up
Browse files Browse the repository at this point in the history
  • Loading branch information
Gargron committed Nov 22, 2023
1 parent c9ffdcb commit 7f483e9
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 16 deletions.
14 changes: 10 additions & 4 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,9 @@ class User < ApplicationRecord
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 :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 EmailMxValidator, if: :validate_email_dns?
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
attr_accessor :registration_form_time, :website, :confirm_password
Expand All @@ -124,6 +122,8 @@ class User < ApplicationRecord

before_validation :sanitize_languages
before_validation :sanitize_role
before_validation :sanitize_time_zone
before_validation :sanitize_locale
before_create :set_approved
after_commit :send_pending_devise_notifications
after_create_commit :trigger_webhooks
Expand Down Expand Up @@ -451,9 +451,15 @@ def sanitize_languages
end

def sanitize_role
return if role.nil?
self.role = nil if role.present? && role.everyone?
end

def sanitize_time_zone
self.time_zone = nil if time_zone.present? && ActiveSupport::TimeZone[time_zone].nil?
end

self.role = nil if role.everyone?
def sanitize_locale
self.locale = nil if locale.present? && I18n.available_locales.exclude?(locale.to_sym)
end

def prepare_new_user!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,5 @@

expect(response).to redirect_to(settings_preferences_appearance_path)
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
6 changes: 0 additions & 6 deletions spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,6 @@
expect(user).to model_have_error_on_field(:account)
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
user = Fabricate.build(:user, email: 'john@')
user.valid?
Expand Down

0 comments on commit 7f483e9

Please sign in to comment.