bookstore/app/controllers/users_controller.rb

78 lines
1.9 KiB
Ruby
Raw Permalink Normal View History

2021-03-22 03:16:29 +01:00
# frozen_string_literal: true
# Users controller
2021-03-20 14:23:06 +01:00
class UsersController < ApplicationController
2021-03-22 03:16:29 +01:00
before_action :ensure_admin, only: %i[destroy block]
2021-03-21 22:31:58 +01:00
def index
@users = User.all
end
2021-03-20 14:23:06 +01:00
def new
2021-03-20 20:02:37 +01:00
@user = User.new
2021-03-20 14:23:06 +01:00
end
def create
2021-03-20 22:37:38 +01:00
@user = User.create(params.require(:user).permit(:email, :password))
2021-03-21 17:02:04 +01:00
if @user.invalid?
redirect_to '/welcome', notice: notices_from_errors(@user)
else
session[:user_id] = @user.id
redirect_to '/welcome', notice: 'Account has been created'
end
2021-03-20 14:23:06 +01:00
end
2021-03-21 10:36:09 +01:00
2021-03-21 11:26:08 +01:00
def password_recovery_request
2021-03-21 10:36:09 +01:00
@user = User.where(email: params['email']).first
2021-03-22 03:16:29 +01:00
recovery_password = ('a'..'z').to_a.sample(8).join
@user.recovery_password = recovery_password
@user.save
UserMailer.with(user: @user, recovery_password: recovery_password).password_recovery.deliver_now
redirect_to '/welcome', notice: "Recovery email sent to #{params['email']}"
2021-03-21 10:36:09 +01:00
end
2021-03-22 03:16:29 +01:00
def password_recovery_request_form; end
2021-03-21 10:36:09 +01:00
2021-03-21 11:26:08 +01:00
def recover_password_form
2021-03-21 11:40:53 +01:00
@recovery_password = params[:recovery_password]
2021-03-21 10:36:09 +01:00
@user_id = params[:id]
end
def recover_password
2021-03-22 04:38:35 +01:00
@user = User.find(params[:user_id])
if recovery_password_proper?
set_new_password
else
redirect_to '/welcome', notice: 'Recovery link expired or invalid'
2021-03-21 10:36:09 +01:00
end
end
2021-03-21 22:31:58 +01:00
def destroy
User.destroy(params[:id])
redirect_to '/users'
end
2021-03-21 23:43:09 +01:00
def block
User.find(params[:id]).update(status: :blocked)
redirect_to '/users'
end
2021-03-22 04:38:35 +01:00
private
def recovery_password_proper?
@user.recovery_password_digest &&
@user.authenticate_recovery_password(params[:recovery_password])
end
def set_new_password
@user.password = params[:password]
@user.password_confirmation = params[:password_confirmation]
if @user.save
@user.update(recovery_password: nil)
redirect_to '/welcome', notice: 'Password changed'
else
redirect_to '/welcome', notice: 'Passwords don\'t match'
end
end
2021-03-20 14:23:06 +01:00
end