def handleJwt(request): """Serves JWT response of appropriate type. Args: request: A HTTP request object. Returns: An encoded JWT object as response. """ wob_payload_object = wob_payload.WOB_Payload() jwt_type = request.GET.get('type', '') if jwt_type == 'loyalty': loyalty_obj = loyalty.generate_loyalty_object( config.ISSUER_ID, config.LOYALTY_CLASS_ID, config.LOYALTY_OBJECT_ID) wob_payload_object.addWalletObjects(loyalty_obj, 'LoyaltyObject') elif jwt_type == 'offer': offer_obj = offer.generate_offer_object( config.ISSUER_ID, config.OFFER_CLASS_ID, config.OFFER_OBJECT_ID) wob_payload_object.addWalletObjects(offer_obj, 'OfferObject') payload = wob_payload_object.getSaveToWalletRequest() signer = crypt.Signer.from_string(key) signed_jwt = crypt.make_signed_jwt(signer, payload) response = webapp2.Response(signed_jwt) response.content_type = 'Application/JWT' return response
def handleWebservice(request): """Creates wallet object according to webservice requests. Args: request: A HTTP request object. Returns: Returns object on success, or, error on failure. """ jsonobj = json.loads(request.body) first_name = jsonobj['params']['walletUser']['firstName'] #using first_name to test different error codes success = (first_name.startswith('SUCCESS')) if success: #possible success status codes: #SUCCESS, SUCCESS_ACCOUNT_ALREADY_CREATED, SUCCESS_ACCOUNT_ALREADY_LINKED jwt = { 'iss': config.SERVICE_ACCOUNT_EMAIL_ADDRESS, 'aud': config.AUDIENCE, 'typ': config.LOYALTY_WEB, 'iat': int(time.time()), 'payload': { 'loyaltyObjects': [], 'webserviceResponse': { 'status': 'SUCCESS' }, } } linking_id = request.params.get('linkingId') loyalty_object_id = linking_id if linking_id else config.LOYALTY_OBJECT_ID loyalty_object = loyalty.generate_loyalty_object( config.ISSUER_ID, config.LOYALTY_CLASS_ID, loyalty_object_id) jwt['payload']['loyaltyObjects'].append(loyalty_object) else: #possible status error codes: #ERROR_INVALID_DATA_FORMAT, ERROR_DATA_ON_MERCHANT_RECORD_DIFFERENT #ERROR_INVALID_LINKING_ID, ERROR_PREEXISTING_ACCOUNT_REQUIRES_LINKING, ERROR_ACCOUNT_ALREADY_LINKED error_action = 'link' if request.params.get('linkingId') else 'signup' jwt = { 'iss': config.SERVICE_ACCOUNT_EMAIL_ADDRESS, 'aud': config.AUDIENCE, 'typ': config.LOYALTY_WEB, 'iat': int(time.time()), 'payload': { 'webserviceResponse': { 'status': 'ERROR_INVALID_DATA_FORMAT', 'invalidField': ['zipcode','phone'] }, } } signer = crypt.Signer.from_string(key) signed_jwt = crypt.make_signed_jwt(signer, jwt) response = webapp2.Response(signed_jwt) response.content_type = 'Application/JWT' return response
def handleWebservice(request): """Creates wallet object according to webservice requests. Args: request: A HTTP request object. Returns: Returns object on success, or, error on failure. """ jsonobj = json.loads(request.body) first_name = jsonobj['params']['walletUser']['firstName'] #using first_name to test different error codes success = (first_name.startswith('SUCCESS')) if success: #possible success status codes: #SUCCESS, SUCCESS_ACCOUNT_ALREADY_CREATED, SUCCESS_ACCOUNT_ALREADY_LINKED jwt = { 'iss': config.SERVICE_ACCOUNT_EMAIL_ADDRESS, 'aud': config.AUDIENCE, 'typ': config.LOYALTY_WEB, 'iat': int(time.time()), 'payload': { 'loyaltyObjects': [], 'webserviceResponse': { 'status': 'SUCCESS' }, } } linking_id = request.params.get('linkingId') loyalty_object_id = linking_id if linking_id else config.LOYALTY_OBJECT_ID loyalty_object = loyalty.generate_loyalty_object( config.ISSUER_ID, config.LOYALTY_CLASS_ID, loyalty_object_id) jwt['payload']['loyaltyObjects'].append(loyalty_object) else: #possible status error codes: #ERROR_INVALID_DATA_FORMAT, ERROR_DATA_ON_MERCHANT_RECORD_DIFFERENT #ERROR_INVALID_LINKING_ID, ERROR_PREEXISTING_ACCOUNT_REQUIRES_LINKING, ERROR_ACCOUNT_ALREADY_LINKED error_action = 'link' if request.params.get('linkingId') else 'signup' jwt = { 'iss': config.SERVICE_ACCOUNT_EMAIL_ADDRESS, 'aud': config.AUDIENCE, 'typ': config.LOYALTY_WEB, 'iat': int(time.time()), 'payload': { 'webserviceResponse': { 'status': 'ERROR_INVALID_DATA_FORMAT', 'invalidWalletUserFields': ['zipcode', 'phone'] }, } } signer = crypt.Signer.from_string(key) signed_jwt = crypt.make_signed_jwt(signer, jwt) response = webapp2.Response(signed_jwt) response.content_type = 'Application/JWT' return response
def handleJwt(request): """Serves JWT response of appropriate type. Args: request: A HTTP request object. Returns: An encoded JWT object as response. """ wob_payload_object = wob_payload.WOB_Payload() jwt_type = request.GET.get('type', '') obj_id = str(random.randint(1, 100)) if jwt_type == 'loyalty': loyalty_obj = loyalty.generate_loyalty_object( config.ISSUER_ID, config.LOYALTY_CLASS_ID, config.LOYALTY_OBJECT_ID + obj_id) wob_payload_object.addWalletObjects(loyalty_obj, 'LoyaltyObject') elif jwt_type == 'offer': offer_obj = offer.generate_offer_object( config.ISSUER_ID, config.OFFER_CLASS_ID, config.OFFER_OBJECT_ID + obj_id) wob_payload_object.addWalletObjects(offer_obj, 'OfferObject') elif jwt_type == 'giftcard': giftcard_obj = giftcard.generate_giftcard_object( config.ISSUER_ID, config.GIFTCARD_CLASS_ID, config.GIFTCARD_OBJECT_ID + obj_id) wob_payload_object.addWalletObjects(giftcard_obj, 'GiftCardObject') payload = wob_payload_object.getSaveToWalletRequest() signer = crypt_google.RSASigner.from_service_account_file( config.SERVICE_ACCOUNT_PRIVATE_KEY) signed_jwt = crypt.make_signed_jwt(signer, payload) response = webapp2.Response(signed_jwt) response.content_type = 'Application/JWT' return response