Class: ShopifyAPI::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/shopify_api/session.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, token = nil, params = nil) ⇒ Session

Returns a new instance of Session.



50
51
52
53
54
55
56
57
58
59
# File 'lib/shopify_api/session.rb', line 50

def initialize(url, token = nil, params = nil)
  self.url, self.token = url, token
  self.class.prepare_url(self.url)

  if params
    unless self.class.validate_signature(params) && params[:timestamp].to_i > 24.hours.ago.utc.to_i
      raise "Invalid Signature: Possible malicious login" 
    end
  end
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



10
11
12
# File 'lib/shopify_api/session.rb', line 10

def name
  @name
end

#tokenObject

Returns the value of attribute token.



10
11
12
# File 'lib/shopify_api/session.rb', line 10

def token
  @token
end

#urlObject

Returns the value of attribute url.



10
11
12
# File 'lib/shopify_api/session.rb', line 10

def url
  @url
end

Class Method Details

.prepare_url(url) ⇒ Object



35
36
37
38
39
# File 'lib/shopify_api/session.rb', line 35

def prepare_url(url)
  return nil if url.blank?
  url.gsub!(/https?:\/\//, '')                            # remove http:// or https://
  url.concat(".myshopify.com") unless url.include?('.')   # extend url to myshopify.com if no host is given
end

.setup(params) ⇒ Object



14
15
16
# File 'lib/shopify_api/session.rb', line 14

def setup(params)
  params.each { |k,value| send("#{k}=", value) }
end

.temp(domain, token, &block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/shopify_api/session.rb', line 18

def temp(domain, token, &block)
  session = new(domain, token)
  begin
    original_domain  = URI.parse(ShopifyAPI::Base.site.to_s).host
  rescue URI::InvalidURIError
  end
  original_token   = ShopifyAPI::Base.headers['X-Shopify-Access-Token']
  original_session = new(original_domain, original_token)

  begin
    ShopifyAPI::Base.activate_session(session)
    yield
  ensure
    ShopifyAPI::Base.activate_session(original_session)
  end
end

.validate_signature(params) ⇒ Object



41
42
43
44
45
46
# File 'lib/shopify_api/session.rb', line 41

def validate_signature(params)
  return false unless signature = params[:signature]

  sorted_params = params.except(:signature, :action, :controller).collect{|k,v|"#{k}=#{v}"}.sort.join
  Digest::MD5.hexdigest(secret + sorted_params) == signature
end

Instance Method Details

#shopObject



61
62
63
# File 'lib/shopify_api/session.rb', line 61

def shop
  Shop.current
end

#siteObject



65
66
67
# File 'lib/shopify_api/session.rb', line 65

def site
  "#{protocol}://#{url}/admin"
end

#valid?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/shopify_api/session.rb', line 69

def valid?
  url.present? && token.present?
end