]> git.openstreetmap.org Git - rails.git/blob - app/controllers/concerns/user_methods.rb
Merge pull request #6394 from openstreetmap/dependabot/github_actions/ruby/setup...
[rails.git] / app / controllers / concerns / user_methods.rb
1 # frozen_string_literal: true
2
3 module UserMethods
4   extend ActiveSupport::Concern
5
6   private
7
8   ##
9   # ensure that there is a "user" instance variable
10   def lookup_user
11     display_name = params[:display_name] || params[:user_display_name]
12     @user = User.active.find_by!(:display_name => display_name)
13   rescue ActiveRecord::RecordNotFound
14     render_unknown_user display_name
15   end
16
17   ##
18   # render a "no such user" page
19   def render_unknown_user(name)
20     @title = t "users.no_such_user.title"
21     @not_found_user = name
22
23     respond_to do |format|
24       format.html { render :template => "users/no_such_user", :status => :not_found, :layout => "site" }
25       format.all { head :not_found }
26     end
27   end
28
29   ##
30   # update a user's details
31   def update_user(user, params)
32     user.display_name = params[:display_name]
33     user.new_email = params[:new_email]
34
35     unless params[:pass_crypt].empty? && params[:pass_crypt_confirmation].empty?
36       user.pass_crypt = params[:pass_crypt]
37       user.pass_crypt_confirmation = params[:pass_crypt_confirmation]
38     end
39
40     if params[:auth_provider].nil? || params[:auth_provider].blank?
41       user.auth_provider = nil
42       user.auth_uid = nil
43     end
44
45     if user.save
46       session[:fingerprint] = user.fingerprint
47
48       if user.new_email.blank? || user.new_email == user.email
49         flash[:notice] = t "accounts.update.success"
50       else
51         token = user.generate_token_for(:new_email)
52
53         user.email = user.new_email
54
55         if user.valid?
56           flash[:notice] = t "accounts.update.success_confirm_needed"
57
58           begin
59             UserMailer.email_confirm(user, token).deliver_later
60           rescue StandardError
61             # Ignore errors sending email
62           end
63         else
64           current_user.errors.delete(:email).each do |error|
65             current_user.errors.add(:new_email, error)
66           end
67         end
68
69         user.restore_email!
70       end
71     end
72   end
73 end