18F/identity-idp

View on GitHub
app/controllers/account_reset/delete_account_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module AccountReset
  class DeleteAccountController < ApplicationController
    def show
      render :show and return unless token

      result = AccountReset::ValidateGrantedToken.new(token, request, analytics).call
      analytics.account_reset_granted_token_validation(**result.to_h)

      if result.success?
        handle_valid_token
      else
        handle_invalid_token(result)
      end
    end

    def delete
      granted_token = session.delete(:granted_token)
      result = AccountReset::DeleteAccount.new(granted_token, request, analytics).call
      analytics.account_reset_delete(**result.to_h.except(:email))

      if result.success?
        handle_successful_deletion(result)
      else
        handle_invalid_token(result)
      end
    end

    private

    def token
      params[:token]
    end

    def handle_valid_token
      session[:granted_token] = token
      redirect_to url_for
    end

    def handle_invalid_token(result)
      flash[:error] = result.errors[:token].first
      redirect_to root_url
    end

    def handle_successful_deletion(result)
      sign_out
      flash[:email] = result.extra[:email]
      redirect_to account_reset_confirm_delete_account_url
    end
  end
end