Class: OmniAuth::Strategies::Mobileid

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

Constant Summary collapse

PhaseReadPin =
'read_pin'
PhaseAuhtenticated =
'authenticated'

Instance Method Summary collapse

Instance Method Details

#auth_hashObject



85
86
87
88
89
90
91
92
93
94
# File 'lib/omniauth/strategies/mobileid.rb', line 85

def auth_hash
  OmniAuth::Utils.deep_merge(super, {
    'uid' => user_data[:user_id_code],
    'user_info' => ,
    'read_pin' => {
       'challenge_id' => user_data[:challenge_id],
       'session_code' => user_data[:sesscode]},
    'extra' => {'user_hash' => user_data}
  })
end

#authenticate(phone, personal_code) ⇒ Object

Authentication message



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/omniauth/strategies/mobileid.rb', line 107

def authenticate(phone, personal_code)
  data = {
    :phone => phone,
    :personal_code => personal_code,
    :language => options[:language],
    :country_code => options[:country_code],
    :message_to_display => options[:message_to_display],
    :service_name => options[:service_name],
    :messaging_mode => options[:messaging_mode],
    :async_configuration => options[:async_configuration],
    :return_cert_data => false,
    :return_revocation_data => false
  }

  self.mobileid_client.authenticate(data)
end

#authentication_status(session_code) ⇒ Object

Authentication status message



125
126
127
# File 'lib/omniauth/strategies/mobileid.rb', line 125

def authentication_status(session_code)
  self.mobileid_client.authentication_status(session_code)
end

#callback_phaseObject



69
70
71
72
# File 'lib/omniauth/strategies/mobileid.rb', line 69

def callback_phase
  debug "callback_phase"
  fail!(failure_reason)
end

#failure_reasonObject



74
75
76
77
78
79
# File 'lib/omniauth/strategies/mobileid.rb', line 74

def failure_reason
  return :invalid_credentials if user_data.blank?

  code = (user_data[:faultstring] || user_data[:status]).try(:downcase)
  "error_#{code || 'unknown'}"
end

#get_authentication_statusObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/omniauth/strategies/mobileid.rb', line 54

def get_authentication_status
  debug 'get_authentication_status'
  @auth_data = authentication_status(request_session_code)
  debug @auth_data.inspect

  if ['USER_AUTHENTICATED', 'OUTSTANDING_TRANSACTION'].include?(user_data[:status])
    @env['omniauth.phase'] = user_data[:status] == 'USER_AUTHENTICATED' ? PhaseAuhtenticated : PhaseReadPin
    @env['REQUEST_METHOD'] = 'GET'
    @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"
    call_app!
  else
    fail!(failure_reason)
  end
end

#performObject



26
27
28
29
30
31
32
# File 'lib/omniauth/strategies/mobileid.rb', line 26

def perform
  if request_session_code # Session is in :read_pin status
    get_authentication_status
  else
    perform_authentication
  end
end

#perform_authenticationObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/omniauth/strategies/mobileid.rb', line 38

def perform_authentication
  debug 'perform_authentication'
  @auth_data = authenticate(request.params['phone'], request.params['personal_code'])
  debug user_data.inspect

  if user_data[:status] == 'OK'
    @env['omniauth.auth'] = auth_hash
    @env['omniauth.phase'] = PhaseReadPin
    @env['REQUEST_METHOD'] = 'GET'
    @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"
    call_app!
  else
    fail!(failure_reason)
  end
end

#request_phaseObject



22
23
24
# File 'lib/omniauth/strategies/mobileid.rb', line 22

def request_phase
  perform
end

#request_session_codeObject



34
35
36
# File 'lib/omniauth/strategies/mobileid.rb', line 34

def request_session_code
  request.params['session_code']
end

#user_dataObject



81
82
83
# File 'lib/omniauth/strategies/mobileid.rb', line 81

def user_data
  @auth_data
end

#user_infoObject



96
97
98
99
100
101
102
103
104
# File 'lib/omniauth/strategies/mobileid.rb', line 96

def 
  {
    'name' => "#{user_data[:user_givenname]} #{user_data[:user_surname]}",
    'first_name' => user_data[:user_givenname],
    'last_name' => user_data[:user_surname],
    'personal_code' => user_data[:user_id_code],
    'user_cn' => user_data[:user_cn]
  }
end