55 lines
1.8 KiB
Ruby
55 lines
1.8 KiB
Ruby
module Public
|
|
class PasswordResetsController < WebBaseController
|
|
def new
|
|
end
|
|
|
|
def create
|
|
Users::RequestPasswordReset.call(email: params[:email])
|
|
|
|
redirect_to public_login_path,
|
|
notice: t("flash.password_resets.email_sent")
|
|
end
|
|
|
|
def edit
|
|
@user = User.find_by_password_reset_token(params[:token])
|
|
if @user.nil? || @user.password_reset_expired?
|
|
redirect_to new_public_password_reset_path,
|
|
alert: t("flash.password_resets.invalid_or_expired_link")
|
|
return
|
|
end
|
|
@token = params[:token]
|
|
end
|
|
|
|
def update
|
|
@user = User.find_by_password_reset_token(params[:token])
|
|
if @user.nil? || @user.password_reset_expired?
|
|
redirect_to new_public_password_reset_path,
|
|
alert: t("flash.password_resets.invalid_or_expired_link")
|
|
return
|
|
end
|
|
|
|
if params[:password] != params[:password_confirmation]
|
|
flash.now[:alert] = t("flash.password_resets.password_mismatch")
|
|
@token = params[:token]
|
|
return render :edit, status: :unprocessable_entity
|
|
end
|
|
|
|
if (code = PasswordComplexity.violation(params[:password]))
|
|
flash.now[:alert] = t("flash.password_resets.password_#{code == :blank ? :too_short : code}")
|
|
@token = params[:token]
|
|
return render :edit, status: :unprocessable_entity
|
|
end
|
|
|
|
if PasswordComplexity.same_as_current?(@user, params[:password])
|
|
flash.now[:alert] = t("flash.password_resets.password_same_as_current")
|
|
@token = params[:token]
|
|
return render :edit, status: :unprocessable_entity
|
|
end
|
|
|
|
@user.update!(password: params[:password])
|
|
@user.clear_password_reset!
|
|
redirect_to public_login_path, notice: t("flash.password_resets.password_updated")
|
|
end
|
|
end
|
|
end
|