Exemple #1
0
async def test_delete_proof(acme_and_alice_connection: AcmeAliceConnect,
                            acme_client: AsyncClient):
    # V1
    proof_req_res = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )

    proof_id = (proof_req_res.json())["proof_id"]

    response = await acme_client.delete(BASE_PATH + f"/proofs/{proof_id}", )
    assert response.json() == None

    # V2
    proof_req_res = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v2",
            "proof_request": indy_proof_request.dict(),
        },
    )

    proof_id = (proof_req_res.json())["proof_id"]

    response = await acme_client.delete(BASE_PATH + f"/proofs/{proof_id}", )
    assert response.json() == None
Exemple #2
0
async def test_get_proof_single(acme_and_alice_connection: AcmeAliceConnect,
                                acme_client: AsyncClient):
    # V1
    proof_req_res = await acme_client.post(
        f"{BASE_PATH}/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )

    proof_id = proof_req_res.json()["proof_id"]
    response = await acme_client.get(f"{BASE_PATH}/proofs/{proof_id}", )
    result = response.json()
    assert "connection_id" in result
    assert "created_at" in result
    assert "updated_at" in result
    assert "presentation" in result
    assert "presentation_request" in result

    # V2
    proof_req_res = await acme_client.post(
        f"{BASE_PATH}/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v2",
            "proof_request": indy_proof_request.dict(),
        },
    )

    proof_id = proof_req_res.json()["proof_id"]

    response = await acme_client.get(f"{BASE_PATH}/proofs/{proof_id}", )

    result = response.json()
    assert "connection_id" in result
    assert "created_at" in result
    assert "updated_at" in result
    assert "presentation" in result
    assert "v2-" in result["proof_id"]
    assert "presentation_request" in result
Exemple #3
0
async def test_reject_proof_request(
    acme_and_alice_connection: AcmeAliceConnect,
    alice_member_client: AsyncClient,
    alice_tenant: Any,
    acme_client: AsyncClient,
):
    wait_for_event, _ = await start_listener(
        topic="proofs", wallet_id=alice_tenant["tenant_id"])

    # V1
    response = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )
    response.raise_for_status()

    # Wait for request received
    alice_exchange = await wait_for_event(
        filter_map={
            "connection_id": acme_and_alice_connection["alice_connection_id"],
            "state": "request-received",
            "protocol_version": "v1",
        })

    reject_proof_request_v1 = RejectProofRequest(
        proof_id=alice_exchange["proof_id"], problem_report=None)

    response = await alice_member_client.post(
        BASE_PATH + "/reject-request", json=reject_proof_request_v1.dict())
    result = response.json()
    response.raise_for_status()
    assert result is None
Exemple #4
0
async def test_get_credentials_for_request(
    acme_and_alice_connection: AcmeAliceConnect,
    acme_client: AsyncClient,
    alice_tenant: Any,
    alice_member_client: AsyncClient,
):
    wait_for_event, _ = await start_listener(
        topic="proofs", wallet_id=alice_tenant["tenant_id"])
    # V1
    await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )

    # Wait for request received
    alice_exchange = await wait_for_event(
        filter_map={
            "connection_id": acme_and_alice_connection["alice_connection_id"],
            "state": "request-received",
            "protocol_version": "v1",
        })

    proof_id = alice_exchange["proof_id"]

    response = await alice_member_client.get(
        f"{BASE_PATH}/proofs/{proof_id}/credentials", )

    result = response.json()[0]
    assert "cred_info" in result.keys()
    assert [
        attr in [
            "attrs", "cred_def_info", "referant", "interval",
            "presentation_referents"
        ] for attr in result["cred_info"].keys()
    ]

    # V2
    wait_for_event, _ = await start_listener(
        topic="proofs", wallet_id=alice_tenant["tenant_id"])
    await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v2",
            "proof_request": indy_proof_request.dict(),
        },
    )

    # Wait for request received
    alice_exchange = await wait_for_event(
        filter_map={
            "connection_id": acme_and_alice_connection["alice_connection_id"],
            "state": "request-received",
            "protocol_version": "v2",
        })
    proof_id = alice_exchange["proof_id"]

    response = await alice_member_client.get(
        f"{BASE_PATH}/proofs/{proof_id}/credentials", )

    result = response.json()[0]
    assert "cred_info" in result.keys()
    assert [
        attr in [
            "attrs", "cred_def_info", "referant", "interval",
            "presentation_referents"
        ] for attr in result["cred_info"].keys()
    ]
Exemple #5
0
async def test_accept_proof_request_v1(
    issue_credential_to_alice: CredentialExchange,
    alice_member_client: AsyncClient,
    acme_client: AsyncClient,
    acme_and_alice_connection: AcmeAliceConnect,
):
    response = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )
    response.raise_for_status()
    acme_exchange = response.json()
    acme_proof_id = acme_exchange["proof_id"]

    assert check_webhook_state(
        client=alice_member_client,
        filter_map={"state": "request-received"},
        topic="proofs",
        max_duration=120,
    )
    proof_records_alice = await alice_member_client.get(BASE_PATH + "/proofs")
    alice_proof_id = proof_records_alice.json()[0]["proof_id"]

    requested_credentials = await alice_member_client.get(
        f"/generic/verifier/proofs/{alice_proof_id}/credentials")

    referent = requested_credentials.json()[0]["cred_info"]["referent"]
    indy_request_attrs = IndyRequestedCredsRequestedAttr(cred_id=referent,
                                                         revealed=True)
    proof_accept = AcceptProofRequest(
        proof_id=alice_proof_id,
        presentation_spec=IndyPresSpec(
            requested_attributes={"0_speed_uuid": indy_request_attrs},
            requested_predicates={},
            self_attested_attributes={},
        ),
    )

    response = await alice_member_client.post(
        BASE_PATH + "/accept-request",
        json=proof_accept.dict(),
    )
    assert check_webhook_state(
        client=alice_member_client,
        filter_map={
            "state": "done",
            "proof_id": alice_proof_id
        },
        topic="proofs",
        max_duration=120,
    )
    assert check_webhook_state(
        client=acme_client,
        filter_map={
            "state": "done",
            "proof_id": acme_proof_id
        },
        topic="proofs",
        max_duration=120,
    )

    result = response.json()

    pres_exchange_result = PresentationExchange(**result)
    assert isinstance(pres_exchange_result, PresentationExchange)
    assert response.status_code == 200
Exemple #6
0
async def test_send_proof_request(
    acme_and_alice_connection: AcmeAliceConnect,
    alice_member_client: AsyncClient,
    acme_client: AsyncClient,
    alice_tenant: Any,
):
    wait_for_event, _ = await start_listener(
        topic="proofs", wallet_id=alice_tenant["tenant_id"])
    response = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v1",
            "proof_request": indy_proof_request.dict(),
        },
    )

    result = response.json()

    # assert result.keys() == ""
    assert "presentation" in result.keys()
    assert "presentation_request" in result.keys()
    assert "created_at" in result.keys()
    assert "proof_id" in result.keys()
    assert result["role"] == "verifier"
    assert result["state"]

    # Wait for request received
    await wait_for_event(
        filter_map={
            "connection_id": acme_and_alice_connection["alice_connection_id"],
            "state": "request-received",
            "protocol_version": "v1",
        })

    # V2
    wait_for_event, _ = await start_listener(
        topic="proofs", wallet_id=alice_tenant["tenant_id"])
    response = await acme_client.post(
        BASE_PATH + "/send-request",
        json={
            "connection_id": acme_and_alice_connection["acme_connection_id"],
            "protocol_version": "v2",
            "proof_request": indy_proof_request.dict(),
        },
    )

    result = response.json()
    assert "presentation" in result.keys()
    assert "presentation_request" in result.keys()
    assert "created_at" in result.keys()
    assert "proof_id" in result.keys()
    assert "v2-" in result["proof_id"]
    assert result["role"] == "verifier"
    assert result["state"]

    # Wait for request received
    await wait_for_event(
        filter_map={
            "connection_id": acme_and_alice_connection["alice_connection_id"],
            "state": "request-received",
            "protocol_version": "v2",
        })