class OmniAuth::Strategies::Scalus

Constants

CODE_EXPIRES_AFTER
DEFAULT_SCOPE

Available scopes: content themes products customers orders script_tags shipping read_* or write_*

MINUTE

Public Class Methods

encoded_params_for_signature(params) click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 45
def self.encoded_params_for_signature(params)
  params = params.dup
  params.delete('hmac')
  params.delete('signature') # deprecated signature
  params.map{|k,v| "#{URI.escape(k.to_s, '&=%')}=#{URI.escape(v.to_s, '&%')}"}.sort.join('&')
end
hmac_sign(encoded_params, secret) click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 52
def self.hmac_sign(encoded_params, secret)
  OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, secret, encoded_params)
end

Public Instance Methods

authorize_params() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/scalus.rb, line 79
def authorize_params
  super.tap do |params|
    params[:scope] ||= DEFAULT_SCOPE
  end
end
callback_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/scalus.rb, line 73
def callback_phase
  return fail!(:invalid_site) unless valid_site?
  return fail!(:invalid_signature) unless valid_signature?
  super
end
callback_url() click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 85
def callback_url
  options[:callback_url] || full_host + script_name + callback_path
end
fix_https() click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 56
def fix_https
  options[:client_options][:site].gsub!(/\Ahttp\:/, 'https:')
end
request_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/scalus.rb, line 65
def request_phase
  if valid_site?
    super
  else
    fail!(:invalid_site)
  end
end
setup_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/scalus.rb, line 60
def setup_phase
  super
  fix_https
end
valid_signature?() click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 31
def valid_signature?
  return false unless request.POST.empty?

  params = request.GET
  signature = params['hmac']
  timestamp = params['timestamp']
  return false unless signature && timestamp

  return false unless timestamp.to_i > Time.now.to_i - CODE_EXPIRES_AFTER

  calculated_signature = self.class.hmac_sign(self.class.encoded_params_for_signature(params), options.client_secret)
  Rack::Utils.secure_compare(calculated_signature, signature)
end
valid_site?() click to toggle source
# File lib/omniauth/strategies/scalus.rb, line 27
def valid_site?
  !!(/\A(https|http)\:\/\/[a-zA-Z0-9][a-zA-Z0-9\-]*\.#{Regexp.quote(options[:scalus_domain])}[\/]?\z/ =~ options[:client_options][:site])
end