Class: OmniAuth::Strategies::Ipizza

Inherits:
Object
  • Object
show all
Includes:
OmniAuth::Strategy
Defined in:
lib/omniauth/strategies/ipizza.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, title, options = {}) ⇒ Ipizza

Returns a new instance of Ipizza.



12
13
14
15
16
17
18
19
# File 'lib/omniauth/strategies/ipizza.rb', line 12

def initialize(app, title, options = {})
  super(app, :ipizza)
  
  @title = title
  self.logger = options.delete(:logger)
  
  ::Ipizza::Config.load_from_file(options.delete(:config))
end

Instance Attribute Details

#loggerObject

Returns the value of attribute logger.



10
11
12
# File 'lib/omniauth/strategies/ipizza.rb', line 10

def logger
  @logger
end

Instance Method Details

#auth_hashObject



84
85
86
# File 'lib/omniauth/strategies/ipizza.rb', line 84

def auth_hash
  OmniAuth::Utils.deep_merge(super, {'uid' => @user_data['personal_code'], 'user_info' => })
end

#callback_phaseObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/omniauth/strategies/ipizza.rb', line 46

def callback_phase
  debug "Callback in iPizza authentication. Parameters: #{request.params.inspect}"

  @env['REQUEST_METHOD'] = 'GET'
  
  # Silly workaround to detect the nordea response
  if request.params['B02K_CUSTID'] then request.params['VK_SND_ID'] = 'nordea' end
  
  if request.params['VK_SND_ID']
    provider = ipizza_provider_for(request.params['VK_SND_ID'])
    
    if provider 
      resp = provider.authentication_response(request.params)
  
      if resp.valid? and resp.success?
        @user_data = {'personal_code' => resp.info_social_security_id, 'name' => resp.info_name}
        @env['omniauth.auth'] = auth_hash
      
        debug "iPizza request was authenticated successfully. User data: #{auth_hash.inspect}"
      
        call_app!
      else
        debug 'Could not authenticate iPizza request'
        fail!(:invalid_credentials, {'ipizza_error' => 'invalid_credentials', 'message' => 'Invalid bank response'})
      end
    else
      fail!(:invalid_ipizza_provider, {'ipizza_error' => 'invalid_ipizza_provider', 'message' => "Invalid Ipizza provider '#{request.params['VK_SND_ID']}'"})
    end
  else
    debug 'Did not recognize iPizza request'
    fail!(:invalid_credentials, {'ipizza_error' => 'invalid_credentials', 'message' => 'Bank request cancelled'})
  end
end

#debug(message) ⇒ Object



88
89
90
# File 'lib/omniauth/strategies/ipizza.rb', line 88

def debug(message)
  logger.debug("#{Time.now} #{message}") if logger
end

#request_phaseObject



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

def request_phase
  if request.params['bank']
    provider = ipizza_provider_for(request.params['bank'])
    
    if provider
      begin
        req = provider.authentication_request
      
        url = [req.service_url, Rack::Utils.build_query(req.request_params)] * '?'
  
        debug "Redirecting to #{url}"
  
        redirect url
      rescue => e
        debug "Failed to create provider rquest: #{e.inspect}"
        fail!(:internal_error, {'ipizza_error' => 'internal_error', 'message' => "Failed to create request for provider '#{request.params['bank']}'."})
      end
    else
      fail!(:invalid_ipizza_provider, {'ipizza_error' => 'invalid_ipizza_provider', 'message' => "Invalid Ipizza provider '#{request.params['bank']}'"})
    end
  else
    fail!(:bank_identifier_missing, {'ipizza_error' => 'bank_identifier_missing', 'message' => 'Bank identifier is missing'})
  end
end

#user_infoObject



80
81
82
# File 'lib/omniauth/strategies/ipizza.rb', line 80

def 
  @user_data
end