authorize_resource
before_action :require_self, :only => [:account]
- before_action :check_database_writable, :only => [:new, :account, :confirm, :confirm_email, :lost_password, :reset_password, :go_public, :make_friend, :remove_friend]
+ before_action :check_database_writable, :only => [:new, :account, :confirm, :confirm_email, :lost_password, :reset_password, :go_public]
before_action :require_cookies, :only => [:new, :login, :confirm]
- before_action :lookup_user_by_name, :only => [:set_status, :delete]
+ before_action :lookup_user_by_name, :only => [:set_status, :destroy]
before_action :allow_thirdparty_images, :only => [:show, :account]
def terms
flash[:notice] = t("users.new.terms declined", :url => t("users.new.terms declined url")).html_safe if current_user.save
if params[:referer]
- redirect_to params[:referer]
+ redirect_to safe_referer(params[:referer])
else
redirect_to :action => :account, :display_name => current_user.display_name
end
end
if params[:referer]
- redirect_to params[:referer]
+ redirect_to safe_referer(params[:referer])
else
redirect_to :action => :account, :display_name => current_user.display_name
end
def lost_password
@title = t "users.lost_password.title"
- if params[:user] && params[:user][:email]
- user = User.visible.find_by(:email => params[:user][:email])
+ if params[:email]
+ user = User.visible.find_by(:email => params[:email])
if user.nil?
- users = User.visible.where("LOWER(email) = LOWER(?)", params[:user][:email])
+ users = User.visible.where("LOWER(email) = LOWER(?)", params[:email])
user = users.first if users.count == 1
end
def new
@title = t "users.new.title"
- @referer = params[:referer] || session[:referer]
+ @referer = if params[:referer]
+ safe_referer(params[:referer])
+ else
+ session[:referer]
+ end
append_content_security_policy_directives(
:form_action => %w[accounts.google.com *.facebook.com login.live.com github.com meta.wikimedia.org]
self.current_user = User.new(user_params)
if check_signup_allowed(current_user.email)
- session[:referer] = params[:referer]
+ session[:referer] = safe_referer(params[:referer]) if params[:referer]
+
+ Rails.logger.info "create: #{session[:referer]}"
current_user.status = "pending"
end
def login
- session[:referer] = params[:referer] if params[:referer]
+ session[:referer] = safe_referer(params[:referer]) if params[:referer]
if params[:username].present? && params[:password].present?
session[:remember_me] ||= params[:remember_me]
session.delete(:user)
session_expires_automatically
if params[:referer]
- redirect_to params[:referer]
+ redirect_to safe_referer(params[:referer])
else
redirect_to :controller => "site", :action => "index"
end
user.email_valid = true
flash[:notice] = gravatar_status_message(user) if gravatar_enable(user)
user.save!
- referer = token.referer
+ referer = safe_referer(token.referer) if token.referer
token.destroy
if session[:token]
gravatar_enabled = gravatar_enable(current_user)
if current_user.save
flash[:notice] = if gravatar_enabled
- t("users.confirm_email.success") + " " + gravatar_status_message(current_user)
+ "#{t('users.confirm_email.success')} #{gravatar_status_message(current_user)}"
else
t("users.confirm_email.success")
end
end
end
- def make_friend
- @new_friend = User.find_by(:display_name => params[:display_name])
-
- if @new_friend
- if request.post?
- friendship = Friendship.new
- friendship.befriender = current_user
- friendship.befriendee = @new_friend
- if current_user.is_friends_with?(@new_friend)
- flash[:warning] = t "users.make_friend.already_a_friend", :name => @new_friend.display_name
- elsif friendship.save
- flash[:notice] = t "users.make_friend.success", :name => @new_friend.display_name
- Notifier.friend_notification(friendship).deliver_later
- else
- friendship.add_error(t("users.make_friend.failed", :name => @new_friend.display_name))
- end
-
- if params[:referer]
- redirect_to params[:referer]
- else
- redirect_to :action => "show"
- end
- end
- else
- render_unknown_user params[:display_name]
- end
- end
-
- def remove_friend
- @friend = User.find_by(:display_name => params[:display_name])
-
- if @friend
- if request.post?
- if current_user.is_friends_with?(@friend)
- Friendship.where(:befriender => current_user, :befriendee => @friend).delete_all
- flash[:notice] = t "users.remove_friend.success", :name => @friend.display_name
- else
- flash[:error] = t "users.remove_friend.not_a_friend", :name => @friend.display_name
- end
-
- if params[:referer]
- redirect_to params[:referer]
- else
- redirect_to :action => "show"
- end
- end
- else
- render_unknown_user params[:display_name]
- end
- end
-
##
# sets a user's status
def set_status
##
# delete a user, marking them as deleted and removing personal data
- def delete
+ def destroy
@user.delete
redirect_to user_path(:display_name => params[:display_name])
end
##
# omniauth failure callback
def auth_failure
- flash[:error] = t("users.auth_failure." + params[:message])
+ flash[:error] = t("users.auth_failure.#{params[:message]}")
redirect_to params[:origin] || login_url
end
if referer.nil?
params[:origin] = request.path
else
- params[:origin] = request.path + "?referer=" + CGI.escape(referer)
+ params[:origin] = "#{request.path}?referer=#{CGI.escape(referer)}"
params[:referer] = referer
end
user.languages = params[:user][:languages].split(",")
case params[:avatar_action]
- when "new" then
+ when "new"
user.avatar.attach(params[:user][:avatar])
user.image_use_gravatar = false
- when "delete" then
+ when "delete"
user.avatar.purge_later
user.image_use_gravatar = false
- when "gravatar" then
+ when "gravatar"
user.avatar.purge_later
user.image_use_gravatar = true
end