module ZuoraConnect::Controllers::Helpers

def setup_instance_via_data

def setup_instance_via_data
  session.clear
  values = JSON.parse(ZuoraConnect::AppInstance.decrypt_response(Base64.urlsafe_decode64(request["data"])))
  if values["param_data"]
    values["param_data"].each do |k ,v|
      params[k] = v
    end
  end
  session["#{values["appInstance"]}::destroy"] = values["destroy"]
  session["appInstance"] = values["appInstance"]
  if values["current_user"]
    session["#{values["appInstance"]}::admin"] = values["current_user"]["admin"] ? values["current_user"]["admin"] : false
    session["#{values["appInstance"]}::user::timezone"] = values["current_user"]["timezone"]
    session["#{values["appInstance"]}::user::locale"] = values["current_user"]["locale"]
    session["#{values["appInstance"]}::user::email"] = values["current_user"]["email"]
  end
  ZuoraConnect.logger.debug({msg: 'Setup values', connect: values}) if Rails.env != "production"
  @appinstance = ZuoraConnect::AppInstance.where(:id => values["appInstance"].to_i).first
  if @appinstance.blank?
    Apartment::Tenant.switch!("public")
    begin
      Apartment::Tenant.create(values["appInstance"].to_s)
    rescue Apartment::TenantExists => ex
      ZuoraConnect.logger.debug("Tenant Already Exists")
    end
    mapped_values = {:api_token => values['api_token'], :token => values['api_token'], :access_token => values["access_token"], :refresh_token => values["refresh_token"], :oauth_expires_at => values["expires"]}
    @appinstance = ZuoraConnect::AppInstance.new(mapped_values.merge({:id => values["appInstance"].to_i}))
    @appinstance.save(:validate => false)
  else
    mapped_values = {:access_token => values["access_token"], :refresh_token => values["refresh_token"], :oauth_expires_at => values["expires"]}
    @appinstance.assign_attributes(mapped_values)
    if @appinstance.access_token_changed? && @appinstance.refresh_token_changed?
      @appinstance.save(:validate => false)
    else
      raise ZuoraConnect::Exceptions::AccessDenied.new("Authorization mistmatch. Possible tampering")
    end
  end     
end