def test_postal_fulfilment_request_payload(): metadata = {"region_code": "GB-ENG", "case_id": str(uuid4())} fulfilment_request = FulfilmentRequest(metadata) assert isinstance(fulfilment_request.payload, bytes) postal_json_payload = json.loads(fulfilment_request.payload) transaction_id = postal_json_payload["event"].pop("transactionId") individual_case_id = postal_json_payload["payload"]["fulfilmentRequest"].pop( "individualCaseId" ) case_id = postal_json_payload["payload"]["fulfilmentRequest"].pop("caseId") assert is_valid_uuid(transaction_id, version=4) is True assert is_valid_uuid(individual_case_id, version=4) is True assert is_valid_uuid(case_id, version=4) is True expected_sms_payload = { "event": { "type": "FULFILMENT_REQUESTED", "source": "QUESTIONNAIRE_RUNNER", "channel": "EQ", "dateTime": datetime.now(tz=tzutc()).isoformat(), }, "payload": { "fulfilmentRequest": { "fulfilmentCode": "P_UAC_UACIP1", "contact": {}, } }, } assert postal_json_payload == expected_sms_payload
def use_jti_claim(jti_claim: str, expires_at: datetime) -> None: """ Use a jti claim :param jti_claim: jti claim to mark as used. :param expires_at: the datetime at which the jti claim expires. :raises ValueError: when jti_claim is None. :raises TypeError: when jti_claim is not a valid uuid4. :raises JtiTokenUsed: when jti_claim has already been used. """ if jti_claim is None: raise ValueError if not is_valid_uuid(jti_claim): logger.info("jti claim is invalid", jti_claim=jti_claim) raise TypeError try: # Make claim expire a little later than exp to avoid race conditions with out of sync clocks. expires_at += timedelta(seconds=60) jti = UsedJtiClaim(jti_claim, expires_at) current_app.eq["ephemeral_storage"].put( jti, overwrite=False) # type: ignore except ItemAlreadyExistsError as e: logger.error("jti claim has already been used", jti_claim=jti_claim) raise JtiTokenUsed(jti_claim) from e
def test_get_address_lookup_api_auth_token(app: Flask): with app.test_request_context("/status"): app.config["ADDRESS_LOOKUP_API_AUTH_ENABLED"] = True secret = app.eq["secret_store"].get_secret_by_name( "ADDRESS_LOOKUP_API_AUTH_TOKEN_SECRET") session_timeout = app.config["EQ_SESSION_TIMEOUT_SECONDS"] leeway = app.config["ADDRESS_LOOKUP_API_AUTH_TOKEN_LEEWAY_IN_SECONDS"] expiry_time = (int(datetime.now(timezone.utc).timestamp()) + session_timeout + leeway) token = get_address_lookup_api_auth_token() key = get_jwk_from_secret(secret) decoded_token = jwt.JWT(key=key, jwt=token) claims = json_loads(decoded_token.claims) assert claims["iss"] == "eq" assert claims["exp"] == expiry_time assert is_valid_uuid(claims["jti"])
def test_fulfilment_request_message(): fulfilment_request = TestFulfilmentRequest() assert isinstance(fulfilment_request.message, bytes) json_message = json.loads(fulfilment_request.message) transaction_id = json_message["event"].pop("transactionId") assert is_valid_uuid(transaction_id, version=4) is True expected_json_message = { "event": { "type": "FULFILMENT_REQUESTED", "source": "QUESTIONNAIRE_RUNNER", "channel": "EQ", "dateTime": datetime.now(tz=tzutc()).isoformat(), }, "payload": {}, } assert json_message == expected_json_message
def validate_uuids_in_payload(payload): individual_case_id = payload["fulfilmentRequest"].pop("individualCaseId") case_id = payload["fulfilmentRequest"].pop("caseId") assert is_valid_uuid(individual_case_id, version=4) is True assert is_valid_uuid(case_id, version=4) is True
def test_convert_tx_id(): tx_id_to_convert = "bc26d5ef-8475-4710-ac82-753a0a150708" assert is_valid_uuid(tx_id_to_convert) assert "bc26-d5ef-8475-4710" == convert_tx_id(tx_id_to_convert)