X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/ec9d2fde783796829a84655387e1810ea4b5e642..8fe18995964717ff6f88858291c6f464cc40397f:/app/controllers/user_controller.rb diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index fca0e3be7..8520aa324 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -257,7 +257,7 @@ class UserController < ApplicationController password_authentication(params[:username], params[:password]) elsif params[:openid_url].present? session[:remember_me] ||= params[:remember_me_openid] - redirect_to auth_url("openid", params[:openid_url]) + redirect_to auth_url("openid", params[:openid_url], params[:referer]) end end @@ -403,13 +403,11 @@ class UserController < ApplicationController friend.friend_user_id = @new_friend.id if @user.is_friends_with?(@new_friend) flash[:warning] = t "user.make_friend.already_a_friend", :name => @new_friend.display_name + elsif friend.save + flash[:notice] = t "user.make_friend.success", :name => @new_friend.display_name + Notifier.friend_notification(friend).deliver_now else - if friend.save - flash[:notice] = t "user.make_friend.success", :name => @new_friend.display_name - Notifier.friend_notification(friend).deliver_now - else - friend.add_error(t("user.make_friend.failed", :name => @new_friend.display_name)) - end + friend.add_error(t("user.make_friend.failed", :name => @new_friend.display_name)) end if params[:referer] @@ -497,7 +495,7 @@ class UserController < ApplicationController when "openid" email_verified = uid.match(%r{https://www.google.com/accounts/o8/id?(.*)}) || uid.match(%r{https://me.yahoo.com/(.*)}) - when "google" + when "google", "facebook" email_verified = true else email_verified = false @@ -516,7 +514,7 @@ class UserController < ApplicationController when "pending" then unconfirmed_login(user) when "active", "confirmed" then - successful_login(user) + successful_login(user, env["omniauth.params"]["referer"]) when "suspended" then failed_login t("user.login.account is suspended", :webmaster => "mailto:webmaster@openstreetmap.org") else @@ -569,12 +567,19 @@ class UserController < ApplicationController ## # return the URL to use for authentication - def auth_url(provider, uid) - if provider == "openid" - auth_path(:provider => "openid", :openid_url => openid_expand_url(uid), :origin => request.path) + def auth_url(provider, uid, referer = nil) + params = { :provider => provider } + + params[:openid_url] = openid_expand_url(uid) if provider == "openid" + + if referer.nil? + params[:origin] = request.path else - auth_path(:provider => provider, :origin => request.path) + params[:origin] = request.path + "?referer=" + CGI.escape(referer) + params[:referer] = referer end + + auth_path(params) end ## @@ -596,11 +601,11 @@ class UserController < ApplicationController ## # process a successful login - def successful_login(user) + def successful_login(user, referer = nil) session[:user] = user.id session_expires_after 28.days if session[:remember_me] - target = session[:referer] || url_for(:controller => :site, :action => :index) + target = referer || session[:referer] || url_for(:controller => :site, :action => :index) # The user is logged in, so decide where to send them: # @@ -675,11 +680,11 @@ class UserController < ApplicationController user.home_lat = params[:user][:home_lat] user.home_lon = params[:user][:home_lon] - if params[:user][:preferred_editor] == "default" - user.preferred_editor = nil - else - user.preferred_editor = params[:user][:preferred_editor] - end + user.preferred_editor = if params[:user][:preferred_editor] == "default" + nil + else + params[:user][:preferred_editor] + end if params[:user][:auth_provider].nil? || params[:user][:auth_provider].blank? user.auth_provider = nil @@ -771,11 +776,11 @@ class UserController < ApplicationController ## # check signup acls def check_signup_allowed(email = nil) - if email.nil? - domain = nil - else - domain = email.split("@").last - end + domain = if email.nil? + nil + else + email.split("@").last + end if blocked = Acl.no_account_creation(request.remote_ip, domain) logger.info "Blocked signup from #{request.remote_ip} for #{email}"