class VersacommerceAPI::Session
Attributes
name[RW]
token[RW]
url[RW]
Public Class Methods
new(url, token = nil, params = nil)
click to toggle source
# File lib/versacommerce_api/session.rb, line 12 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
request_token(domain)
click to toggle source
# File lib/versacommerce_api/session.rb, line 30 def self.request_token(domain) return nil if domain.blank? || api_key.blank? begin content = open("https://#{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)
click to toggle source
# File lib/versacommerce_api/session.rb, line 25 def self.setup(params) params.each { |k,value| send("#{k}=", value) } end
Private Class Methods
prepare_url(url)
click to toggle source
# File lib/versacommerce_api/session.rb, line 74 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
validate_signature(params)
click to toggle source
# File lib/versacommerce_api/session.rb, line 80 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
Public Instance Methods
create_permission_url()
click to toggle source
# File lib/versacommerce_api/session.rb, line 46 def create_permission_url return nil if url.blank? || api_key.blank? "https://#{url}/api/auth?api_key=#{api_key}" end
shop()
click to toggle source
# File lib/versacommerce_api/session.rb, line 41 def shop Shop.current end
site()
click to toggle source
Used by ActiveResource::Base
to make all non-authentication API calls
# File lib/versacommerce_api/session.rb, line 53 def site "#{protocol}://#{api_key}:#{computed_password}@#{url}/api/" end
valid?()
click to toggle source
# File lib/versacommerce_api/session.rb, line 58 def valid? url.present? && token.present? end
Private Instance Methods
computed_password()
click to toggle source
secret = shared_key token was provided by registration
# File lib/versacommerce_api/session.rb, line 70 def computed_password Digest::MD5.hexdigest(secret + token.to_s) end