485 |
485 |
]
|
486 |
486 |
}
|
487 |
487 |
|
488 |
|
def sha_sign(self, algo, key, params, keep):
|
|
488 |
def sha_sign(self, algo, key, params, keep, encoding='iso-8859-1'):
|
489 |
489 |
'''Ogone signature algorithm of query string'''
|
490 |
490 |
values = params.items()
|
491 |
491 |
values = [(a.upper(), b) for a, b in values]
|
... | ... | |
493 |
493 |
values = [u'%s=%s' % (a, b) for a, b in values if a in keep and b]
|
494 |
494 |
tosign = key.join(values)
|
495 |
495 |
tosign += key
|
496 |
|
tosign = force_byte(tosign, encoding='iso-8859-1')
|
|
496 |
tosign = force_byte(tosign, encoding=encoding)
|
497 |
497 |
hashing = getattr(hashlib, algo)
|
498 |
498 |
return hashing(tosign).hexdigest().upper()
|
499 |
499 |
|
500 |
|
def sha_sign_in(self, params):
|
501 |
|
return self.sha_sign(self.hash_algorithm, self.sha_in, params, SHA_IN_PARAMS)
|
|
500 |
def sha_sign_in(self, params, encoding='iso-8859-1'):
|
|
501 |
return self.sha_sign(self.hash_algorithm, self.sha_in, params, SHA_IN_PARAMS, encoding=encoding)
|
502 |
502 |
|
503 |
|
def sha_sign_out(self, params):
|
504 |
|
return self.sha_sign(self.hash_algorithm, self.sha_out, params, SHA_OUT_PARAMS)
|
|
503 |
def sha_sign_out(self, params, encoding='iso-8859-1'):
|
|
504 |
return self.sha_sign(self.hash_algorithm, self.sha_out, params, SHA_OUT_PARAMS, encoding=encoding)
|
505 |
505 |
|
506 |
506 |
def get_request_url(self):
|
507 |
507 |
if self.environment == ENVIRONMENT_TEST:
|
... | ... | |
582 |
582 |
signed = False
|
583 |
583 |
if self.sha_in:
|
584 |
584 |
signature = params.get('SHASIGN')
|
585 |
|
expected_signature = self.sha_sign_out(params)
|
586 |
|
signed = signature == expected_signature
|
|
585 |
# check signature against both encoding
|
|
586 |
for encoding in ('iso-8859-1', 'utf-8'):
|
|
587 |
expected_signature = self.sha_sign_out(params, encoding=encoding)
|
|
588 |
signed = signature == expected_signature
|
|
589 |
if signed:
|
|
590 |
break
|
587 |
591 |
if status == '1':
|
588 |
592 |
result = CANCELLED
|
589 |
593 |
elif status == '2':
|