queueit_knownuserv3 3.6.1 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,157 +1,168 @@
1
- require 'open-uri'
2
- require 'cgi'
3
-
4
- module QueueIt
5
- class UserInQueueService
6
- SDK_VERSION_NO = "3.6.1"
7
- SDK_VERSION = "v3-ruby-" + SDK_VERSION_NO
8
-
9
- def initialize(userInQueueStateRepository)
10
- @userInQueueStateRepository = userInQueueStateRepository
11
- end
12
-
13
- def validateQueueRequest(targetUrl, queueitToken, config, customerId, secretKey)
14
- state = @userInQueueStateRepository.getState(config.eventId, config.cookieValidityMinute, secretKey, true)
15
- if (state.isValid)
16
- if (state.isStateExtendable && config.extendCookieValidity)
17
- @userInQueueStateRepository.store(
18
- config.eventId,
19
- state.queueId,
20
- nil,
21
- !Utils::isNilOrEmpty(config.cookieDomain) ? config.cookieDomain : '',
22
- state.redirectType,
23
- secretKey)
24
- end
25
- return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, state.queueId, nil, state.redirectType, config.actionName)
26
- end
27
-
28
- queueParams = QueueUrlParams::extractQueueParams(queueitToken)
29
-
30
- requestValidationResult = nil
31
- isTokenValid = false
32
-
33
- if (!queueParams.nil?)
34
- tokenValidationResult = validateToken(config, queueParams, secretKey)
35
- isTokenValid = tokenValidationResult.isValid
36
-
37
- if (isTokenValid)
38
- requestValidationResult = getValidTokenResult(config, queueParams, secretKey)
39
- else
40
- requestValidationResult = getErrorResult(customerId, targetUrl, config, queueParams, tokenValidationResult.errorCode)
41
- end
42
- else
43
- requestValidationResult = getQueueResult(targetUrl, config, customerId)
44
- end
45
-
46
- if (state.isFound && !isTokenValid)
47
- @userInQueueStateRepository.cancelQueueCookie(config.eventId, config.cookieDomain);
48
- end
49
-
50
- return requestValidationResult;
51
- end
52
-
53
- def validateCancelRequest(targetUrl, cancelConfig, customerId, secretKey)
54
- state = @userInQueueStateRepository.getState(cancelConfig.eventId, -1, secretKey, false)
55
- if (state.isValid)
56
- @userInQueueStateRepository.cancelQueueCookie(cancelConfig.eventId, cancelConfig.cookieDomain)
57
- query = getQueryString(customerId, cancelConfig.eventId, cancelConfig.version, cancelConfig.actionName, nil, nil) +
58
- (!Utils::isNilOrEmpty(targetUrl) ? ("&r=" + Utils.urlEncode(targetUrl)) : "" )
59
- uriPath = "cancel/" + customerId + "/" + cancelConfig.eventId + "/"
60
-
61
- redirectUrl = generateRedirectUrl(cancelConfig.queueDomain, uriPath, query)
62
- return RequestValidationResult.new(ActionTypes::CANCEL, cancelConfig.eventId, state.queueId, redirectUrl, state.redirectType, cancelConfig.actionName)
63
- else
64
- return RequestValidationResult.new(ActionTypes::CANCEL, cancelConfig.eventId, nil, nil, nil, cancelConfig.actionName)
65
- end
66
- end
67
-
68
- def getValidTokenResult(config, queueParams, secretKey)
69
- @userInQueueStateRepository.store(
70
- config.eventId,
71
- queueParams.queueId,
72
- queueParams.cookieValidityMinutes,
73
- !Utils::isNilOrEmpty(config.cookieDomain) ? config.cookieDomain : '',
74
- queueParams.redirectType,
75
- secretKey)
76
-
77
- return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, queueParams.queueId, nil, queueParams.redirectType, config.actionName)
78
- end
79
-
80
- def getErrorResult(customerId, targetUrl, config, qParams, errorCode)
81
- query = getQueryString(customerId, config.eventId, config.version, config.actionName, config.culture, config.layoutName) +
82
- "&queueittoken=" + qParams.queueITToken +
83
- "&ts=" + Time.now.getutc.tv_sec.to_s +
84
- (!Utils::isNilOrEmpty(targetUrl) ? ("&t=" + Utils.urlEncode(targetUrl)) : "")
85
-
86
- redirectUrl = generateRedirectUrl(config.queueDomain, "error/" + errorCode + "/", query)
87
-
88
- return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, nil, redirectUrl, nil, config.actionName)
89
- end
90
-
91
- def getQueueResult(targetUrl, config, customerId)
92
- query = getQueryString(customerId, config.eventId, config.version, config.actionName, config.culture, config.layoutName) +
93
- (!Utils::isNilOrEmpty(targetUrl) ? "&t=" + Utils.urlEncode( targetUrl) : "")
94
-
95
- redirectUrl = generateRedirectUrl(config.queueDomain, "", query)
96
-
97
- return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, nil, redirectUrl, nil, config.actionName)
98
- end
99
-
100
- def getQueryString(customerId, eventId, configVersion, actionName, culture, layoutName)
101
- queryStringList = Array.new
102
- queryStringList.push("c=" + Utils.urlEncode(customerId))
103
- queryStringList.push("e=" + Utils.urlEncode(eventId))
104
- queryStringList.push("ver=" + SDK_VERSION)
105
- queryStringList.push("cver=" + (!configVersion.nil? ? configVersion.to_s : '-1'))
106
- queryStringList.push("man=" + Utils.urlEncode(actionName))
107
-
108
- if (!Utils::isNilOrEmpty(culture))
109
- queryStringList.push("cid=" + Utils.urlEncode(culture))
110
- end
111
- if (!Utils::isNilOrEmpty(layoutName))
112
- queryStringList.push("l=" + Utils.urlEncode(layoutName))
113
- end
114
- return queryStringList.join("&")
115
- end
116
-
117
- def generateRedirectUrl(queueDomain, uriPath, query)
118
- if (!queueDomain.end_with?("/") )
119
- queueDomain = queueDomain + "/"
120
- end
121
- return "https://" + queueDomain + uriPath + "?" + query
122
- end
123
-
124
- def extendQueueCookie(eventId, cookieValidityMinutes, cookieDomain, secretKey)
125
- @userInQueueStateRepository.reissueQueueCookie(eventId, cookieValidityMinutes, cookieDomain, secretKey)
126
- end
127
-
128
- def getIgnoreActionResult(actionName)
129
- return RequestValidationResult.new(ActionTypes::IGNORE, nil, nil, nil, nil, actionName)
130
- end
131
-
132
- def validateToken(config, queueParams, secretKey)
133
- calculatedHash = OpenSSL::HMAC.hexdigest('sha256', secretKey, queueParams.queueITTokenWithoutHash)
134
- if (calculatedHash.upcase() != queueParams.hashCode.upcase())
135
- return TokenValidationResult.new(false, "hash")
136
- end
137
- if (queueParams.eventId.upcase() != config.eventId.upcase())
138
- return TokenValidationResult.new(false, "eventid")
139
- end
140
- if (queueParams.timeStamp < Time.now.getutc.tv_sec)
141
- return TokenValidationResult.new(false, "timestamp")
142
- end
143
-
144
- return TokenValidationResult.new(true, nil)
145
- end
146
-
147
- class TokenValidationResult
148
- attr_reader :isValid
149
- attr_reader :errorCode
150
-
151
- def initialize(isValid, errorCode)
152
- @isValid = isValid
153
- @errorCode = errorCode
154
- end
155
- end
156
- end
157
- end
1
+ require 'open-uri'
2
+ require 'cgi'
3
+
4
+ module QueueIt
5
+ class UserInQueueService
6
+ SDK_VERSION_NO = "3.7.1"
7
+ SDK_VERSION = "v3-ruby-" + SDK_VERSION_NO
8
+
9
+ def initialize(userInQueueStateRepository)
10
+ @userInQueueStateRepository = userInQueueStateRepository
11
+ end
12
+
13
+ def validateQueueRequest(targetUrl, queueitToken, config, customerId, secretKey)
14
+ state = @userInQueueStateRepository.getState(config.eventId, config.cookieValidityMinute, secretKey, true)
15
+ if (state.isValid)
16
+ if (state.isStateExtendable && config.extendCookieValidity)
17
+ @userInQueueStateRepository.store(
18
+ config.eventId,
19
+ state.queueId,
20
+ nil,
21
+ !Utils::isNilOrEmpty(config.cookieDomain) ? config.cookieDomain : '',
22
+ config.isCookieHttpOnly,
23
+ config.isCookieSecure,
24
+ state.redirectType,
25
+ secretKey)
26
+ end
27
+ return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, state.queueId, nil, state.redirectType, config.actionName)
28
+ end
29
+
30
+ queueParams = QueueUrlParams::extractQueueParams(queueitToken)
31
+
32
+ requestValidationResult = nil
33
+ isTokenValid = false
34
+
35
+ if (!queueParams.nil?)
36
+ tokenValidationResult = validateToken(config, queueParams, secretKey)
37
+ isTokenValid = tokenValidationResult.isValid
38
+
39
+ if (isTokenValid)
40
+ requestValidationResult = getValidTokenResult(config, queueParams, secretKey)
41
+ else
42
+ requestValidationResult = getErrorResult(customerId, targetUrl, config, queueParams, tokenValidationResult.errorCode)
43
+ end
44
+ else
45
+ requestValidationResult = getQueueResult(targetUrl, config, customerId)
46
+ end
47
+
48
+ if (state.isFound && !isTokenValid)
49
+ @userInQueueStateRepository.cancelQueueCookie(config.eventId, config.cookieDomain, config.isCookieHttpOnly, config.isCookieSecure);
50
+ end
51
+
52
+ return requestValidationResult;
53
+ end
54
+
55
+ def validateCancelRequest(targetUrl, cancelConfig, customerId, secretKey)
56
+ state = @userInQueueStateRepository.getState(cancelConfig.eventId, -1, secretKey, false)
57
+ if (state.isValid)
58
+ @userInQueueStateRepository.cancelQueueCookie(cancelConfig.eventId, cancelConfig.cookieDomain, cancelConfig.isCookieHttpOnly, cancelConfig.isCookieSecure)
59
+
60
+ query = getQueryString(customerId, cancelConfig.eventId, cancelConfig.version, cancelConfig.actionName, nil, nil) +
61
+ (!Utils::isNilOrEmpty(targetUrl) ? ("&r=" + Utils.urlEncode(targetUrl)) : "" )
62
+
63
+ uriPath = "cancel/" + customerId + "/" + cancelConfig.eventId
64
+
65
+ if(!Utils::isNilOrEmpty(state.queueId))
66
+ uriPath = uriPath + "/" + state.queueId
67
+ end
68
+
69
+ redirectUrl = generateRedirectUrl(cancelConfig.queueDomain, uriPath, query)
70
+
71
+ return RequestValidationResult.new(ActionTypes::CANCEL, cancelConfig.eventId, state.queueId, redirectUrl, state.redirectType, cancelConfig.actionName)
72
+ else
73
+ return RequestValidationResult.new(ActionTypes::CANCEL, cancelConfig.eventId, nil, nil, nil, cancelConfig.actionName)
74
+ end
75
+ end
76
+
77
+ def getValidTokenResult(config, queueParams, secretKey)
78
+ @userInQueueStateRepository.store(
79
+ config.eventId,
80
+ queueParams.queueId,
81
+ queueParams.cookieValidityMinutes,
82
+ !Utils::isNilOrEmpty(config.cookieDomain) ? config.cookieDomain : '',
83
+ config.isCookieHttpOnly,
84
+ config.isCookieSecure,
85
+ queueParams.redirectType,
86
+ secretKey)
87
+
88
+ return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, queueParams.queueId, nil, queueParams.redirectType, config.actionName)
89
+ end
90
+
91
+ def getErrorResult(customerId, targetUrl, config, qParams, errorCode)
92
+ query = getQueryString(customerId, config.eventId, config.version, config.actionName, config.culture, config.layoutName) +
93
+ "&queueittoken=" + qParams.queueITToken +
94
+ "&ts=" + Time.now.getutc.tv_sec.to_s +
95
+ (!Utils::isNilOrEmpty(targetUrl) ? ("&t=" + Utils.urlEncode(targetUrl)) : "")
96
+
97
+ redirectUrl = generateRedirectUrl(config.queueDomain, "error/" + errorCode + "/", query)
98
+
99
+ return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, nil, redirectUrl, nil, config.actionName)
100
+ end
101
+
102
+ def getQueueResult(targetUrl, config, customerId)
103
+ query = getQueryString(customerId, config.eventId, config.version, config.actionName, config.culture, config.layoutName) +
104
+ (!Utils::isNilOrEmpty(targetUrl) ? "&t=" + Utils.urlEncode( targetUrl) : "")
105
+
106
+ redirectUrl = generateRedirectUrl(config.queueDomain, "", query)
107
+
108
+ return RequestValidationResult.new(ActionTypes::QUEUE, config.eventId, nil, redirectUrl, nil, config.actionName)
109
+ end
110
+
111
+ def getQueryString(customerId, eventId, configVersion, actionName, culture, layoutName)
112
+ queryStringList = Array.new
113
+ queryStringList.push("c=" + Utils.urlEncode(customerId))
114
+ queryStringList.push("e=" + Utils.urlEncode(eventId))
115
+ queryStringList.push("ver=" + SDK_VERSION)
116
+ queryStringList.push("cver=" + (!configVersion.nil? ? configVersion.to_s : '-1'))
117
+ queryStringList.push("man=" + Utils.urlEncode(actionName))
118
+
119
+ if (!Utils::isNilOrEmpty(culture))
120
+ queryStringList.push("cid=" + Utils.urlEncode(culture))
121
+ end
122
+ if (!Utils::isNilOrEmpty(layoutName))
123
+ queryStringList.push("l=" + Utils.urlEncode(layoutName))
124
+ end
125
+ return queryStringList.join("&")
126
+ end
127
+
128
+ def generateRedirectUrl(queueDomain, uriPath, query)
129
+ if (!queueDomain.end_with?("/") )
130
+ queueDomain = queueDomain + "/"
131
+ end
132
+ return "https://" + queueDomain + uriPath + "?" + query
133
+ end
134
+
135
+ def extendQueueCookie(eventId, cookieValidityMinutes, cookieDomain, isCookieHttpOnly, isCookieSecure, secretKey)
136
+ @userInQueueStateRepository.reissueQueueCookie(eventId, cookieValidityMinutes, cookieDomain, isCookieHttpOnly, isCookieSecure, secretKey)
137
+ end
138
+
139
+ def getIgnoreActionResult(actionName)
140
+ return RequestValidationResult.new(ActionTypes::IGNORE, nil, nil, nil, nil, actionName)
141
+ end
142
+
143
+ def validateToken(config, queueParams, secretKey)
144
+ calculatedHash = OpenSSL::HMAC.hexdigest('sha256', secretKey, queueParams.queueITTokenWithoutHash)
145
+ if (calculatedHash.upcase() != queueParams.hashCode.upcase())
146
+ return TokenValidationResult.new(false, "hash")
147
+ end
148
+ if (queueParams.eventId.upcase() != config.eventId.upcase())
149
+ return TokenValidationResult.new(false, "eventid")
150
+ end
151
+ if (queueParams.timeStamp < Time.now.getutc.tv_sec)
152
+ return TokenValidationResult.new(false, "timestamp")
153
+ end
154
+
155
+ return TokenValidationResult.new(true, nil)
156
+ end
157
+
158
+ class TokenValidationResult
159
+ attr_reader :isValid
160
+ attr_reader :errorCode
161
+
162
+ def initialize(isValid, errorCode)
163
+ @isValid = isValid
164
+ @errorCode = errorCode
165
+ end
166
+ end
167
+ end
168
+ end