|
|
|
@ -14,6 +14,7 @@ from pokeranalytics_backend.settings import APNS_ENVIRONMENT_SANDBOX |
|
|
|
import json, jwt |
|
|
|
import json, jwt |
|
|
|
import base64 |
|
|
|
import base64 |
|
|
|
import os |
|
|
|
import os |
|
|
|
|
|
|
|
import logging |
|
|
|
|
|
|
|
|
|
|
|
import datetime |
|
|
|
import datetime |
|
|
|
|
|
|
|
|
|
|
|
@ -43,10 +44,24 @@ def app_store_webhook(request): |
|
|
|
fulljson = json.loads(decoded) |
|
|
|
fulljson = json.loads(decoded) |
|
|
|
signedPayload = fulljson['signedPayload'] |
|
|
|
signedPayload = fulljson['signedPayload'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
save_payload_file(signedPayload) |
|
|
|
decodePayload(signedPayload) |
|
|
|
decodePayload(signedPayload) |
|
|
|
|
|
|
|
|
|
|
|
return JsonResponse({'status': 'success'}) |
|
|
|
return JsonResponse({'status': 'success'}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def save_payload_file(signedPayload): |
|
|
|
|
|
|
|
tmp_dir = os.path.join(settings.BASE_DIR, 'tmp') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Create the tmp directory if it doesn't exist |
|
|
|
|
|
|
|
if not os.path.exists(tmp_dir): |
|
|
|
|
|
|
|
os.makedirs(tmp_dir) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") |
|
|
|
|
|
|
|
filename = os.path.join(tmp_dir, f'signedPayload_{timestamp}.txt') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with open(filename, 'w') as f: |
|
|
|
|
|
|
|
f.write(signedPayload) |
|
|
|
|
|
|
|
|
|
|
|
def decodePayload(signedPayload): |
|
|
|
def decodePayload(signedPayload): |
|
|
|
|
|
|
|
|
|
|
|
enable_online_checks = True |
|
|
|
enable_online_checks = True |
|
|
|
@ -65,7 +80,7 @@ def decodePayload(signedPayload): |
|
|
|
data = payload.data |
|
|
|
data = payload.data |
|
|
|
|
|
|
|
|
|
|
|
transaction_info = verifier.verify_and_decode_signed_transaction(data.signedTransactionInfo) |
|
|
|
transaction_info = verifier.verify_and_decode_signed_transaction(data.signedTransactionInfo) |
|
|
|
renewal_info = verifier.verify_and_decode_renewal_info(data.signedRenewalInfo) |
|
|
|
# renewal_info = verifier.verify_and_decode_renewal_info(data.signedRenewalInfo) |
|
|
|
|
|
|
|
|
|
|
|
signedDateTime = datetime.datetime.fromtimestamp(payload.signedDate / 1000) |
|
|
|
signedDateTime = datetime.datetime.fromtimestamp(payload.signedDate / 1000) |
|
|
|
expiresDateTime = datetime.datetime.fromtimestamp(transaction_info.expiresDate / 1000) |
|
|
|
expiresDateTime = datetime.datetime.fromtimestamp(transaction_info.expiresDate / 1000) |
|
|
|
@ -127,8 +142,10 @@ def decodePayload(signedPayload): |
|
|
|
|
|
|
|
|
|
|
|
except APIException as e: |
|
|
|
except APIException as e: |
|
|
|
print(e) |
|
|
|
print(e) |
|
|
|
|
|
|
|
logger = logging.getLogger('subscriptions') |
|
|
|
|
|
|
|
logger.exception("An error occurred during division") |
|
|
|
|
|
|
|
|
|
|
|
return HttpResponse(renewal_info) |
|
|
|
return HttpResponse('ok') |
|
|
|
|
|
|
|
|
|
|
|
# def load_root_certificate(): |
|
|
|
# def load_root_certificate(): |
|
|
|
# in_file = open("AppleRootCA-G3.cer", "rb") # opening for [r]eading as [b]inary |
|
|
|
# in_file = open("AppleRootCA-G3.cer", "rb") # opening for [r]eading as [b]inary |
|
|
|
|