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
Esempio n. 3
0
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
Esempio n. 4
0
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