X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/846699104d2783d2d9d1162196bd428f0af6334e..4bbd7f531017daf2b72517b1c1e20b523270bdf8:/app/controllers/user_controller.rb?ds=inline diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 3a2bc7f0d..db8a509bd 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -4,9 +4,9 @@ class UserController < ApplicationController before_filter :authorize, :only => [:api_details, :api_gpx_files] before_filter :authorize_web, :except => [:api_details, :api_gpx_files] before_filter :set_locale, :except => [:api_details, :api_gpx_files] - before_filter :require_user, :only => [:set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image, :delete_image] + before_filter :require_user, :only => [:account, :go_public, :make_friend, :remove_friend] before_filter :check_database_readable, :except => [:api_details, :api_gpx_files] - before_filter :check_database_writable, :only => [:login, :new, :set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image, :delete_image] + before_filter :check_database_writable, :only => [:login, :new, :account, :go_public, :make_friend, :remove_friend] before_filter :check_api_readable, :only => [:api_details, :api_gpx_files] before_filter :require_allow_read_prefs, :only => [:api_details] before_filter :require_allow_read_gpx, :only => [:api_gpx_files] @@ -57,6 +57,12 @@ class UserController < ApplicationController @user.description = params[:user][:description] @user.languages = params[:user][:languages].split(",") + + case params[:image_action] + when "new" then @user.image = params[:user][:image] + when "delete" then @user.image = nil + end + @user.home_lat = params[:user][:home_lat] @user.home_lon = params[:user][:home_lon] @@ -67,7 +73,12 @@ class UserController < ApplicationController flash.now[:notice] = t 'user.account.flash update success' else flash.now[:notice] = t 'user.account.flash update success confirm needed' - Notifier.deliver_email_confirm(@user, @user.tokens.create) + + begin + Notifier.deliver_email_confirm(@user, @user.tokens.create) + rescue + # Ignore errors sending email + end end end else @@ -80,17 +91,6 @@ class UserController < ApplicationController end end - def set_home - if params[:user][:home_lat] and params[:user][:home_lon] - @user.home_lat = params[:user][:home_lat].to_f - @user.home_lon = params[:user][:home_lon].to_f - if @user.save - flash[:notice] = t 'user.set_home.flash success' - redirect_to :controller => 'user', :action => 'account' - end - end - end - def go_public @user.data_public = true @user.save @@ -107,7 +107,8 @@ class UserController < ApplicationController if user token = user.tokens.create Notifier.deliver_lost_password(user, token) - flash.now[:notice] = t 'user.lost_password.notice email on way' + flash[:notice] = t 'user.lost_password.notice email on way' + redirect_to :action => 'login' else flash.now[:error] = t 'user.lost_password.notice email cannot find' end @@ -145,42 +146,39 @@ class UserController < ApplicationController def new @title = t 'user.new.title' - # The user is logged in already, so don't show them the signup page, instead - # send them to the home page + # The user is logged in already, so don't show them the signup + # page, instead send them to the home page redirect_to :controller => 'site', :action => 'index' if session[:user] end def login - if params[:user] and session[:user].nil? + @title = t 'user.login.title' + + if params[:user] email_or_display_name = params[:user][:email] pass = params[:user][:password] user = User.authenticate(:username => email_or_display_name, :password => pass) + if user session[:user] = user.id - elsif User.authenticate(:username => email_or_display_name, :password => pass, :inactive => true) + session_expires_after 1.month if params[:remember_me] + + # The user is logged in, if the referer param exists, redirect + # them to that unless they've also got a block on them, in + # which case redirect them to the block so they can clear it. + if user.blocked_on_view + redirect_to user.blocked_on_view, :referrer => params[:referrer] + elsif params[:referer] + redirect_to params[:referer] + else + redirect_to :controller => 'site', :action => 'index' + end + elsif User.authenticate(:username => email_or_display_name, :password => pass, :inactive => true) flash.now[:error] = t 'user.login.account not active' else flash.now[:error] = t 'user.login.auth failure' end end - - if session[:user] - # The user is logged in, if the referer param exists, redirect them to that - # unless they've also got a block on them, in which case redirect them to - # the block so they can clear it. - user = User.find(session[:user]) - block = user.blocked_on_view - if block - redirect_to block, :referrer => params[:referrer] - elsif params[:referer] - redirect_to params[:referer] - else - redirect_to :controller => 'site', :action => 'index' - end - return - end - - @title = t 'user.login.title' end def logout @@ -192,6 +190,7 @@ class UserController < ApplicationController session[:token] = nil end session[:user] = nil + session_expires_automatically if params[:referer] redirect_to params[:referer] else @@ -245,18 +244,6 @@ class UserController < ApplicationController end end - def upload_image - @user.image = params[:user][:image] - @user.save! - redirect_to :controller => 'user', :action => 'view', :display_name => @user.display_name - end - - def delete_image - @user.image = nil - @user.save! - redirect_to :controller => 'user', :action => 'view', :display_name => @user.display_name - end - def api_gpx_files doc = OSM::API.new.get_xml_doc @user.traces.each do |trace| @@ -296,7 +283,11 @@ class UserController < ApplicationController flash[:warning] = t 'user.make_friend.already_a_friend', :name => name end - redirect_to :controller => 'user', :action => 'view' + if params[:referer] + redirect_to params[:referer] + else + redirect_to :controller => 'user', :action => 'view' + end end end @@ -311,7 +302,11 @@ class UserController < ApplicationController flash[:error] = t 'user.remove_friend.not_a_friend', :name => friend.display_name end - redirect_to :controller => 'user', :action => 'view' + if params[:referer] + redirect_to params[:referer] + else + redirect_to :controller => 'user', :action => 'view' + end end end