Class: VersacommerceAPI::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/versacommerce_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.



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/versacommerce_api/session.rb', line 13

def initialize(url, token = nil, params = nil)
  self.url, self.token = url, token
  
  if params && params[:signature]
    unless self.class.validate_signature(params) && params[:timestamp].to_i > 24.hours.ago.utc.to_i
      raise "Invalid Signature: Possible malicious login" 
    end
  end
  
  self.class.prepare_url(self.url)
end

Instance Attribute Details

#name ⇒ Object

Returns the value of attribute name.



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

def name
  @name
end

#token ⇒ Object

Returns the value of attribute token.



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

def token
  @token
end

#url ⇒ Object

Returns the value of attribute url.



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

def url
  @url
end

Class Method Details

.prepare_url(url) ⇒ Object



75
76
77
78
79
# File 'lib/versacommerce_api/session.rb', line 75

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

.request_token(domain) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/versacommerce_api/session.rb', line 31

def self.request_token(domain)
  return nil if domain.blank? || api_key.blank?
  begin
    content = open("http://#{domain}/api/auth.xml?api_key=#{api_key}") { |io| data = io.read }
    Hash.from_xml(content)["token"] if content
  rescue
    nil
  end
end

.setup(params) ⇒ Object



26
27
28
# File 'lib/versacommerce_api/session.rb', line 26

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

.validate_signature(params) ⇒ Object



81
82
83
84
85
86
# File 'lib/versacommerce_api/session.rb', line 81

def self.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

#create_permission_url ⇒ Object



47
48
49
50
# File 'lib/versacommerce_api/session.rb', line 47

def create_permission_url
  return nil if url.blank? || api_key.blank?
  "http://#{url}/api/auth?api_key=#{api_key}"
end

#shop ⇒ Object



42
43
44
# File 'lib/versacommerce_api/session.rb', line 42

def shop
  Shop.current
end

#site ⇒ Object

Used by ActiveResource::Base to make all non-authentication API calls



54
55
56
# File 'lib/versacommerce_api/session.rb', line 54

def site
  "#{protocol}://#{api_key}:#{computed_password}@#{url}/api/"
end

#valid? ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/versacommerce_api/session.rb', line 59

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