Skip to content

Commit

Permalink
support for queue via ajax calls (v.3.5.1)
Browse files Browse the repository at this point in the history
  • Loading branch information
frwiqueueit committed Feb 20, 2018
1 parent 9c9991f commit 5854c65
Show file tree
Hide file tree
Showing 4 changed files with 436 additions and 16 deletions.
42 changes: 34 additions & 8 deletions lib/queueit_knownuserv3/known_user.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
require 'cgi'
require 'json'

module QueueIt
class KnownUser
QUEUEIT_TOKEN_KEY = "queueittoken"
QUEUEIT_DEBUG_KEY = "queueitdebug"
QUEUEIT_AJAX_HEADER_KEY = "x-queueit-ajaxpageurl"

@@userInQueueService = nil
def self.getUserInQueueService(cookieJar)
Expand All @@ -15,6 +17,19 @@ def self.getUserInQueueService(cookieJar)
end
private_class_method :getUserInQueueService

def self.isQueueAjaxCall(request)
return request.headers[QUEUEIT_AJAX_HEADER_KEY] != nil
end
private_class_method :isQueueAjaxCall

def self.generateTargetUrl(originalTargetUrl, request)
unless isQueueAjaxCall(request)
return originalTargetUrl
end
return CGI::unescape(request.headers[QUEUEIT_AJAX_HEADER_KEY])
end
private_class_method :generateTargetUrl

def self.convertToInt(value)
begin
converted = Integer(value)
Expand Down Expand Up @@ -115,11 +130,15 @@ def self._resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig,
end

userInQueueService = getUserInQueueService(request.cookie_jar)
userInQueueService.validateQueueRequest(targetUrl, queueitToken, queueConfig, customerId, secretKey)
result = userInQueueService.validateQueueRequest(targetUrl, queueitToken, queueConfig, customerId, secretKey)
result.isAjaxResult = isQueueAjaxCall(request)

return result
end
private_class_method :_resolveQueueRequestByLocalConfig

def self._cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig, customerId, secretKey, request, debugEntries)
targetUrl = generateTargetUrl(targetUrl, request)
isDebug = getIsDebug(queueitToken, secretKey)
if(isDebug)
debugEntries["TargetUrl"] = targetUrl
Expand Down Expand Up @@ -158,7 +177,10 @@ def self._cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig, cust
end

userInQueueService = getUserInQueueService(request.cookie_jar)
userInQueueService.validateCancelRequest(targetUrl, cancelConfig, customerId, secretKey)
result = userInQueueService.validateCancelRequest(targetUrl, cancelConfig, customerId, secretKey)
result.isAjaxResult = isQueueAjaxCall(request)

return result
end
private_class_method :_cancelRequestByLocalConfig

Expand All @@ -183,6 +205,7 @@ def self.extendQueueCookie(eventId, cookieValidityMinute, cookieDomain, secretKe
def self.resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig, customerId, secretKey, request)
debugEntries = Hash.new
begin
targetUrl = generateTargetUrl(targetUrl, request)
return _resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig, customerId, secretKey, request, debugEntries)
ensure
setDebugCookie(debugEntries, request.cookie_jar)
Expand Down Expand Up @@ -228,15 +251,18 @@ def self.validateRequestByIntegrationConfig(currentUrlWithoutQueueITToken, queue

# unspecified or 'Queue' specified
if(!matchedConfig.key?("ActionType") || Utils.isNilOrEmpty(matchedConfig["ActionType"]) || matchedConfig["ActionType"].eql?(ActionTypes::QUEUE))
handleQueueAction(currentUrlWithoutQueueITToken, queueitToken, customerIntegration, customerId, secretKey, matchedConfig, request, debugEntries)
return handleQueueAction(currentUrlWithoutQueueITToken, queueitToken, customerIntegration, customerId, secretKey, matchedConfig, request, debugEntries)

elsif(matchedConfig["ActionType"].eql?(ActionTypes::CANCEL))
handleCancelAction(currentUrlWithoutQueueITToken, queueitToken, customerIntegration, customerId, secretKey, matchedConfig, request, debugEntries)
return handleCancelAction(currentUrlWithoutQueueITToken, queueitToken, customerIntegration, customerId, secretKey, matchedConfig, request, debugEntries)

# for all unknown types default to 'Ignore'
else
userInQueueService = getUserInQueueService(request.cookie_jar)
userInQueueService.getIgnoreActionResult()
result = userInQueueService.getIgnoreActionResult()
result.isAjaxResult = isQueueAjaxCall(request)

return result
end

rescue StandardError => stdErr
Expand All @@ -263,20 +289,20 @@ def self.handleQueueAction(currentUrlWithoutQueueITToken, queueitToken, customer
when "EventTargetUrl"
targetUrl = ''
else
targetUrl = currentUrlWithoutQueueITToken
targetUrl = generateTargetUrl(currentUrlWithoutQueueITToken, request)
end

return _resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig, customerId, secretKey, request, debugEntries)
end

def self.handleCancelAction(currentUrlWithoutQueueITToken, queueitToken, customerIntegration, customerId, secretKey, matchedConfig, request, debugEntries)
cancelConfig = CancelEventConfig.new;
cancelConfig = CancelEventConfig.new
cancelConfig.eventId = matchedConfig["EventId"]
cancelConfig.queueDomain = matchedConfig["QueueDomain"]
cancelConfig.cookieDomain = matchedConfig["CookieDomain"]
cancelConfig.version = customerIntegration["Version"]

return _cancelRequestByLocalConfig(currentUrlWithoutQueueITToken, queueitToken, cancelConfig, customerId, secretKey, request, debugEntries);
return _cancelRequestByLocalConfig(currentUrlWithoutQueueITToken, queueitToken, cancelConfig, customerId, secretKey, request, debugEntries)
end

def self.cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig, customerId, secretKey, request)
Expand Down
14 changes: 14 additions & 0 deletions lib/queueit_knownuserv3/models.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require 'cgi'

module QueueIt
class Utils
def self.isNilOrEmpty(value)
Expand Down Expand Up @@ -71,6 +73,7 @@ class RequestValidationResult
attr_reader :queueId
attr_reader :redirectUrl
attr_reader :redirectType
attr_accessor :isAjaxResult

def initialize(actionType, eventId, queueId, redirectUrl, redirectType)
@actionType = actionType
Expand All @@ -83,6 +86,17 @@ def initialize(actionType, eventId, queueId, redirectUrl, redirectType)
def doRedirect
return !Utils.isNilOrEmpty(@redirectUrl)
end

def getAjaxQueueRedirectHeaderKey
return "x-queueit-redirect"
end

def getAjaxRedirectUrl
if !Utils.isNilOrEmpty(@redirectUrl)
return CGI.escape(@redirectUrl)
end
return ""
end
end

class KnownUserError < StandardError
Expand Down
2 changes: 1 addition & 1 deletion lib/queueit_knownuserv3/user_in_queue_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

module QueueIt
class UserInQueueService
SDK_VERSION = "3.5.0"
SDK_VERSION = "3.5.1"

def initialize(userInQueueStateRepository)
@userInQueueStateRepository = userInQueueStateRepository
Expand Down
Loading

0 comments on commit 5854c65

Please sign in to comment.