Skip to content

Commit dc2f102

Browse files
author
queue-it
committed
Preparing release 3.7.0
1 parent 01c2507 commit dc2f102

17 files changed

+2076
-1913
lines changed

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1818
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1919
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21-
SOFTWARE.
21+
SOFTWARE.

README.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,5 +149,35 @@ def index(request):
149149
# There was an error validating the request
150150
# Use your own logging framework to log the error
151151
# This was a configuration error, so we let the user continue
152-
print stdErr.message
152+
print stdErr.message
153+
```
154+
155+
## Request body trigger (advanced)
156+
157+
The connector supports triggering on request body content. An example could be a POST call with specific item ID where you want end-users to queue up for.
158+
For this to work, you will need to contact Queue-it support or enable request body triggers in your integration settings in your GO Queue-it platform account.
159+
Once enabled you will need to update your integration so request body is available for the connector.
160+
You need to create a new context provider similar to this one:
161+
162+
```python
163+
from queueit_knownuserv3.http_context_providers import Django_1_8_Provider
164+
165+
166+
class Django_1_8_Provider_WithBody(Django_1_8_Provider):
167+
def __init__(self, request, response):
168+
super(Django_1_8_Provider_WithBody, self).__init__(request, response)
169+
170+
def getRequestBodyAsString(self):
171+
return self.request.body
172+
173+
```
174+
175+
And then use it instead of `Django_1_8_Provider`
176+
177+
```python
178+
# The default Django_1_8_Provider class always returns empty string as request body.
179+
# So we use Django_1_8_Provider_WithBody in order to read the body.
180+
# If you don't need to read the request body you may use Django_1_8_Provider
181+
# http_context_provider = Django_1_8_Provider(request, response)
182+
http_context_provider = Django_1_8_Provider_WithBody(request, response)
153183
```

SDK/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
*.pyc
66
/.vs
7+
.idea

SDK/_run_all_tests.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
suite = unittest.TestLoader().discover("")
55
result = unittest.TextTestRunner(verbosity=1).run(suite)
66

7-
if(result.wasSuccessful()):
8-
sys.exit(0)
7+
if result.wasSuccessful():
8+
sys.exit(0)
99
else:
10-
sys.exit(1)
10+
sys.exit(1)

SDK/queueit_knownuserv3/connector_diagnostics.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,52 @@
22
from models import RequestValidationResult, Utils
33
from queueit_helpers import QueueitHelpers
44

5+
56
class ConnectorDiagnostics:
67
def __init__(self):
78
self.isEnabled = False
89
self.hasError = False
910
self.validationResult = RequestValidationResult(None, None, None, None, None, None)
1011

11-
def __setStateWithTokenError(self, customerId, errorCode):
12+
def __setStateWithTokenError(self, customer_id, error_code):
1213
self.hasError = True
13-
redirectUrl = "https://{0}.api2.queue-it.net/{0}/diagnostics/connector/error/?code={1}".format(customerId, errorCode)
14+
redirect_url_template = "https://{0}.api2.queue-it.net/{0}/diagnostics/connector/error/?code={1}"
15+
redirect_url = redirect_url_template.format(customer_id, error_code)
1416
self.validationResult = RequestValidationResult("ConnectorDiagnosticsRedirect",
15-
None, None, redirectUrl, None, None)
17+
None, None, redirect_url, None, None)
1618

1719
def __setStateWithSetupError(self):
1820
self.hasError = True
19-
redirectUrl = "https://api2.queue-it.net/diagnostics/connector/error/?code=setup"
21+
redirect_url = "https://api2.queue-it.net/diagnostics/connector/error/?code=setup"
2022
self.validationResult = RequestValidationResult("ConnectorDiagnosticsRedirect",
21-
None, None, redirectUrl, None, None)
23+
None, None, redirect_url, None, None)
2224

2325
@staticmethod
24-
def verify(customerId, secretKey, queueitToken):
26+
def verify(customer_id, secret_key, queueit_token):
2527
diagnostics = ConnectorDiagnostics()
26-
qParams = QueueUrlParams.extractQueueParams(queueitToken)
28+
q_params = QueueUrlParams.extractQueueParams(queueit_token)
2729

28-
if(qParams == None):
30+
if q_params is None:
2931
return diagnostics
3032

31-
if(qParams.redirectType == None):
33+
if q_params.redirectType is None:
3234
return diagnostics
3335

34-
if(qParams.redirectType != "debug"):
36+
if q_params.redirectType != "debug":
3537
return diagnostics
3638

37-
if(Utils.isNilOrEmpty(customerId) or Utils.isNilOrEmpty(secretKey)):
39+
if Utils.isNilOrEmpty(customer_id) or Utils.isNilOrEmpty(secret_key):
3840
diagnostics.__setStateWithSetupError()
3941
return diagnostics
4042

41-
calculatedHash = QueueitHelpers.hmacSha256Encode(qParams.queueITTokenWithoutHash, secretKey)
42-
if(qParams.hashCode != calculatedHash):
43-
diagnostics.__setStateWithTokenError(customerId, "hash")
43+
expected_hash = QueueitHelpers.hmacSha256Encode(q_params.queueITTokenWithoutHash, secret_key)
44+
if q_params.hashCode != expected_hash:
45+
diagnostics.__setStateWithTokenError(customer_id, "hash")
4446
return diagnostics
4547

46-
if(qParams.timeStamp < QueueitHelpers.getCurrentTime()):
47-
diagnostics.__setStateWithTokenError(customerId, "timestamp")
48+
if q_params.timeStamp < QueueitHelpers.getCurrentTime():
49+
diagnostics.__setStateWithTokenError(customer_id, "timestamp")
4850
return diagnostics
4951

5052
diagnostics.isEnabled = True
5153
return diagnostics
52-
Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from queueit_helpers import QueueitHelpers
22

33

4-
class HttpContextProvider:
4+
class HttpContextProvider(object):
55
ERROR_MSG = "Please implement/use specific provider"
66

77
def getProviderName(self):
88
raise NotImplementedError(self.ERROR_MSG)
99

10-
def setCookie(self, name, value, expire, domain):
10+
def setCookie(self, name, value, expire, domain, is_http_only, is_secure):
1111
raise NotImplementedError(self.ERROR_MSG)
1212

1313
def getCookie(self, name):
@@ -16,12 +16,15 @@ def getCookie(self, name):
1616
def getHeader(self, name):
1717
raise NotImplementedError(self.ERROR_MSG)
1818

19-
def getRequestIp(self, name):
19+
def getRequestIp(self):
2020
raise NotImplementedError(self.ERROR_MSG)
2121

2222
def getOriginalRequestUrl(self):
2323
raise NotImplementedError(self.ERROR_MSG)
2424

25+
def getRequestBodyAsString(self):
26+
raise NotImplementedError(self.ERROR_MSG)
27+
2528

2629
class Django_1_8_Provider(HttpContextProvider):
2730
def __init__(self, request, response):
@@ -31,11 +34,11 @@ def __init__(self, request, response):
3134
def getProviderName(self):
3235
return "django_1_8"
3336

34-
def setCookie(self, name, value, expire, domain):
35-
if (str(domain) == ""):
37+
def setCookie(self, name, value, expire, domain, is_http_only, is_secure):
38+
if str(domain) == "":
3639
domain = None
3740

38-
if (value is not None):
41+
if value is not None:
3942
value = QueueitHelpers.urlEncode(value)
4043

4144
self.response.set_cookie(
@@ -45,17 +48,17 @@ def setCookie(self, name, value, expire, domain):
4548
expires=expire,
4649
path='/',
4750
domain=domain,
48-
secure=None,
49-
httponly=False)
51+
secure=is_secure,
52+
httponly=is_http_only)
5053

5154
def getCookie(self, name):
5255
value = self.request.COOKIES.get(name)
53-
if (value is not None):
56+
if value is not None:
5457
value = QueueitHelpers.urlDecode(value)
5558
return value
5659

5760
def getHeader(self, name):
58-
if (name is None or name == ""):
61+
if name is None or name == "":
5962
return None
6063

6164
key = "HTTP_" + name.replace("-", "_").upper()
@@ -65,4 +68,7 @@ def getRequestIp(self):
6568
return self.request.META.get("REMOTE_ADDR")
6669

6770
def getOriginalRequestUrl(self):
68-
return self.request.build_absolute_uri()
71+
return self.request.build_absolute_uri()
72+
73+
def getRequestBodyAsString(self):
74+
return ''

0 commit comments

Comments
 (0)