Class: OmniAuth::Polaris::Adaptor

Inherits:
Object
  • Object
show all
Defined in:
lib/omniauth/polaris/adaptor.rb

Constant Summary collapse

REQUIRED_ADAPTER_CONFIG_KEYS =
%i[access_id access_key method http_uri].freeze
BASIC_USER_DATA_KEYS =
%w[NameFirst NameLast NameMiddle PhoneNumber EmailAddress].freeze
METHOD =
{ POST: :GET }.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration = {}) ⇒ Adaptor

Returns a new instance of Adaptor.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/omniauth/polaris/adaptor.rb', line 22

def initialize(configuration = {})
  self.class.validate!(configuration)

  @configuration = configuration.dup

  @logger = @configuration.delete(:logger)

  REQUIRED_ADAPTER_CONFIG_KEYS.each do |name|
    instance_variable_set("@#{name}", @configuration[name])
  end

  @config = {
    http_uri: @http_uri,
    method: @method,
    access_key: @access_key,
    access_id: @access_id
  }

  ensure_method!(@method)
  @polaris_method = METHOD[@method.to_s.to_sym]
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



10
11
12
# File 'lib/omniauth/polaris/adaptor.rb', line 10

def config
  @config
end

Class Method Details

.validate!(configuration = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/omniauth/polaris/adaptor.rb', line 12

def self.validate!(configuration = {})
  message = REQUIRED_ADAPTER_CONFIG_KEYS.each_with_object([]) do |name, msg|
    next msg if configuration[name].present?

    msg << name
  end

  raise Polaris::ConfigurationError, "#{message.join(' ,')} MUST be provided" unless message.blank?
end

Instance Method Details

#authenticate_patron(pin:, barcode:) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/omniauth/polaris/adaptor.rb', line 44

def authenticate_patron(pin:, barcode:)
  # According to the polaris api docs "Date must be within +/- 30 minutes of current time or request will fail"
  http_date = 15.minutes.from_now.in_time_zone('GMT').strftime('%a, %d %b %Y %H:%M:%S %Z')

  # Authorization hash component
  authorization_hash = authorization_response(pin, barcode, http_date)

  return if authorization_hash.blank?

  # Details hash component
  details_hash = details_response(pin, barcode, http_date)

  return if details_hash.blank? || details_hash.dig('PatronBasicDataGetResult', 'PatronBasicData').blank?

  patron_user_hash = authorization_hash['PatronValidateResult'].dup

  patron_user_hash.merge(details_hash.dig('PatronBasicDataGetResult', 'PatronBasicData').slice(*BASIC_USER_DATA_KEYS))
end