class OmniAuth::Strategies::Swedbank
Constants
- AUTH_SERVICE
- AUTH_VERSION
Public Instance Methods
callback_phase()
click to toggle source
Calls superclass method
# File lib/omniauth/strategies/swedbank.rb, line 61 def callback_phase begin pub_key = OpenSSL::X509::Certificate.new(options.public_key).public_key rescue => e return fail!(:public_key_load_err, e) end if request.params['VK_SERVICE'] != '3003' return fail!(:unsupported_response_service_err) end if request.params['VK_VERSION'] != '008' return fail!(:unsupported_response_version_err) end if request.params['VK_ENCODING'] != 'UTF-8' return fail!(:unsupported_response_encoding_err) end sig_str = [ request.params['VK_SERVICE'], request.params['VK_VERSION'], request.params['VK_SND_ID'], request.params['VK_REC_ID'], request.params['VK_NONCE'], request.params['VK_INFO'] ].map{|v| prepend_length(v)}.join raw_signature = Base64.decode64(request.params['VK_MAC']) if !pub_key.verify(OpenSSL::Digest::SHA1.new, raw_signature, sig_str) return fail!(:invalid_response_signature_err) end super end
prepend_length(value)
click to toggle source
# File lib/omniauth/strategies/swedbank.rb, line 27 def prepend_length(value) # prepend length to string in 0xx format [ value.to_s.length.to_s.rjust(3, '0'), value.dup.to_s.force_encoding('ascii')].join end
request_phase()
click to toggle source
# File lib/omniauth/strategies/swedbank.rb, line 98 def request_phase begin priv_key = OpenSSL::PKey::RSA.new(options.private_key) rescue => e return fail!(:private_key_load_err, e) end form = OmniAuth::Form.new(:title => I18n.t('omniauth.swedbank.please_wait'), :url => options.site) { 'VK_SERVICE' => AUTH_SERVICE, 'VK_VERSION' => AUTH_VERSION, 'VK_SND_ID' => options.snd_id, 'VK_REC_ID' => options.rec_id, 'VK_NONCE' => stamp, 'VK_RETURN' => callback_url, 'VK_MAC' => signature(priv_key), 'VK_LANG' => 'LAT', 'VK_ENCODING' => 'UTF-8' }.each do |name, val| form.html "<input type=\"hidden\" name=\"#{name}\" value=\"#{val}\" />" end form.button I18n.t('omniauth.swedbank.click_here_if_not_redirected') form.instance_variable_set('@html', form.to_html.gsub('</form>', '</form><script type="text/javascript">document.forms[0].submit();</script>')) form.to_response end
signature(priv_key)
click to toggle source
# File lib/omniauth/strategies/swedbank.rb, line 43 def signature(priv_key) Base64.encode64(priv_key.sign(OpenSSL::Digest::SHA1.new, signature_input)) end
signature_input()
click to toggle source
# File lib/omniauth/strategies/swedbank.rb, line 32 def signature_input [ AUTH_SERVICE, # VK_SERVICE AUTH_VERSION, # VK_VERSION options.snd_id, # VK_SND_ID options.rec_id, # VK_REC_ID stamp, # VK_NONCE callback_url # VK_RETURN ].map{|v| prepend_length(v)}.join end
stamp()
click to toggle source
# File lib/omniauth/strategies/swedbank.rb, line 22 def stamp return @stamp if @stamp @stamp = Time.now.strftime('%Y%m%d%H%M%S') + SecureRandom.random_number(999999).to_s.rjust(6, '0') end