module Kameleoon::Cookie

@api private

Constants

EXPIRE_DAYS
KAMELEOON_VISITOR_CODE_LENGTH

Public Instance Methods

obtain_hash_double(visitor_code, respool_times = {}, container_id = '') click to toggle source
# File lib/kameleoon/cookie.rb, line 25
def obtain_hash_double(visitor_code, respool_times = {}, container_id = '')
  identifier = visitor_code.to_s
  identifier += container_id.to_s
  if !respool_times.nil? && !respool_times.empty?
    identifier += respool_times.values.sort.join.to_s
  end
  (Digest::SHA256.hexdigest(identifier.encode('UTF-8')).to_i(16) / (BigDecimal("2") ** BigDecimal("256"))).round(16)
end
read_and_write(request_cookies, top_level_domain, response_cookies, default_visitor_code = nil) click to toggle source

@return [String] visitor code

# File lib/kameleoon/cookie.rb, line 12
def read_and_write(request_cookies, top_level_domain, response_cookies, default_visitor_code = nil)
  kameleoon_visitor_code = read(request_cookies)
  if kameleoon_visitor_code.nil?
    kameleoon_visitor_code = check_default_visitor_code(default_visitor_code) || Kameleoon::Utils.generate_random_string(KAMELEOON_COOKIE_VALUE_LENGTH)
  end
  cookie = { :value => kameleoon_visitor_code, :expires => Time.now + Kameleoon::Utils.in_seconds(EXPIRE_DAYS), :path => '/' }
  unless top_level_domain.nil?
    cookie[:domain] = top_level_domain
  end
  response_cookies[KAMELEOON_COOKIE_NAME] = cookie
  kameleoon_visitor_code
end

Private Instance Methods

check_default_visitor_code(default_visitor_code) click to toggle source
# File lib/kameleoon/cookie.rb, line 42
def check_default_visitor_code(default_visitor_code)
  if default_visitor_code.nil?
    return
  end
  default_visitor_code = default_visitor_code.to_s
  if default_visitor_code.length == 0
    raise Kameleoon::Exception::VisitorCodeNotValid.new("Empty visitor Code")
  end
  if default_visitor_code.length > KAMELEOON_VISITOR_CODE_LENGTH
    raise Kameleoon::Exception::VisitorCodeNotValid.new("Visitor Code is longer than 255 chars.")
  end
  default_visitor_code
end
read(cookies) click to toggle source
# File lib/kameleoon/cookie.rb, line 56
def read(cookies)
  value = cookies[KAMELEOON_COOKIE_NAME]
  if value.nil?
    return
  end
  if value.start_with?(KAMELEOON_KEY_JS_COOKIE)
    start_index = KAMELEOON_KEY_JS_COOKIE.length
    value = value[start_index..-1]
  end
  if value.length == 0
    nil
  end
  value[0..(KAMELEOON_VISITOR_CODE_LENGTH - 1)]
end