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 @user.update!(password: params[:password]) @user.clear_password_reset! redirect_to public_login_path, notice: t("flash.password_resets.password_updated") end end end