]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/user.rb
Use rails tokens for email changes
[rails.git] / app / models / user.rb
index b04f8e2b914c274babd1d9aec55c5f85ce4705e7..958a03a9821220c3e4512b8b20d1352208e5fef1 100644 (file)
@@ -37,7 +37,6 @@
 #  users_auth_idx                    (auth_provider,auth_uid) UNIQUE
 #  users_display_name_canonical_idx  (lower(NORMALIZE(display_name, NFKC)))
 #  users_display_name_idx            (display_name) UNIQUE
-#  users_display_name_lower_idx      (lower((display_name)::text))
 #  users_email_idx                   (email) UNIQUE
 #  users_email_lower_idx             (lower((email)::text))
 #  users_home_idx                    (home_tile)
@@ -100,6 +99,7 @@ class User < ApplicationRecord
   validates :display_name, :if => proc { |u| u.display_name_changed? },
                            :characters => { :url_safe => true },
                            :whitespace => { :leading => false, :trailing => false }
+  validate :display_name_cannot_be_user_id_with_other_id, :if => proc { |u| u.display_name_changed? }
   validates :email, :presence => true, :confirmation => true, :characters => true
   validates :email, :if => proc { |u| u.email_changed? },
                     :uniqueness => { :case_sensitive => false }
@@ -124,6 +124,20 @@ class User < ApplicationRecord
   before_save :update_tile
   after_save :spam_check
 
+  generates_token_for :new_email, :expires_in => 1.week do
+    fingerprint
+  end
+
+  generates_token_for :password_reset, :expires_in => 1.week do
+    fingerprint
+  end
+
+  def display_name_cannot_be_user_id_with_other_id
+    display_name&.match(/^user_(\d+)$/i) do |m|
+      errors.add :display_name, I18n.t("activerecord.errors.messages.display_name_is_user_n") unless m[1].to_i == id
+    end
+  end
+
   def to_param
     display_name
   end