18F/identity-idp

View on GitHub
app/forms/concerns/piv_cac_form_helpers.rb

Summary

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

module PivCacFormHelpers
  extend ActiveSupport::Concern

  def valid_token?
    return false unless token.present?

    token_decoded &&
      token_has_correct_nonce &&
      not_error_token
  end

  def token_decoded
    @data = PivCacService.decode_token(token)
    @key_id = @data['key_id']
    true
  end

  def not_error_token
    possible_error = @data['error']
    if possible_error
      self.error_type = possible_error
      false
    else
      self.x509_dn_uuid = @data['uuid']
      self.x509_dn = @data['subject']
      self.x509_issuer = @data['issuer']
      true
    end
  end

  def token_has_correct_nonce
    if @data['nonce'] == nonce
      true
    else
      self.error_type = 'token.invalid'
      false
    end
  end
end