Sha256: bed69c31b5c9050778a21d0cf87d5b579109e576b795c14b873a88fe7a57972b

Contents?: true

Size: 1023 Bytes

Versions: 6

Compression:

Stored size: 1023 Bytes

Contents

module DeviseMultiFactor
  class RememberTFACookie

    def generate_cookie_data(resource, expires_at:)
      { 'data' => generate_resource_data(resource) }
        .merge('expires_at' => expires_at)
        .to_json
    end

    def valid_cookie_data?(resource, cookie_data)
      return false if cookie_data.nil?

      parsed_data = JSON.parse(cookie_data)
      expires_at = parse_time(parsed_data['expires_at'])
      return false if expires_at.nil? || expires_at < Time.current

      expected_data = generate_resource_data(resource)
      parsed_data['data'] == expected_data
    rescue JSON::ParserError
      false
    end

    private

    def generate_resource_data(resource)
      {
        'resource_name' => resource.class.to_s,
        'resource_id' => resource.public_send(Devise.second_factor_resource_id),
        'remember_tfa_token' => resource.try(:remember_tfa_token) || '',
      }
    end

    def parse_time(time_str)
      Time.parse(time_str)
    rescue StandardError
      nil
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
devise-multi-factor-3.2.5 lib/devise_multi_factor/remember_tfa_cookie.rb
devise-multi-factor-3.2.4 lib/devise_multi_factor/remember_tfa_cookie.rb
devise-multi-factor-3.2.3 lib/devise_multi_factor/remember_tfa_cookie.rb
devise-multi-factor-3.2.2 lib/devise_multi_factor/remember_tfa_cookie.rb
devise-multi-factor-3.2.1 lib/devise_multi_factor/remember_tfa_cookie.rb
devise-multi-factor-3.2.0 lib/devise_multi_factor/remember_tfa_cookie.rb