Beispiel #1
0
def _check_ep_negotiation(negotiation_id, initial_contrib):
    contributions = filter_data_only(client.contribution_list(negotiation_id))
    contributions = [c for c in contributions if c["latest"]]
    combined_peer_id = cfg.get("CREATE_COMBINED_PEER_ID")
    combined_peer = client.peer_info(combined_peer_id)
    owners = set(unpack_owners(combined_peer["owners"]))

    orig_body = None
    for contribution in contributions:
        signer = contribution["signer_key_id"]
        text = get_contribution_text(contribution)
        body = text["body"]
        if orig_body is None:
            orig_body = body
        if orig_body != body:
            raise ValueError("contribution texts differ")
        check_signer(owners, signer)
    if owners:
        raise Block("Contribution pending from: %s" % owners)
    ui.inform("All peer owners have agreed. Sending accept contribution.")
    text = get_contribution_text(initial_contrib)
    body = text["body"]
    meta = text["meta"]
    meta = hash_meta_next_negotiation(meta)
    r = client.run_contribution(negotiation_id,
                                body,
                                accept=True,
                                extra_meta=meta)
    d = r.json()
    contribution = d["data"]
    ui.inform("Sent contribution %s" % contribution["id"])
    return contribution
Beispiel #2
0
def join_ep_contribution(negotiation_id, initial_contrib):
    response = get_join_response()
    text = get_contribution_text(initial_contrib)
    body = text["body"]
    r = client.run_contribution(negotiation_id, body, accept=False)
    d = r.json()
    contribution = d["data"]
    ui.inform("Sent contribution %s" % contribution["id"])
    return contribution
Beispiel #3
0
def join_contribution(negotiation_id, initial_contrib, invitation_id):
    response = get_join_response()
    text = get_contribution_text(initial_contrib)
    body = text["body"]
    extra_meta = text["meta"].copy()
    extra_meta["invitation_id"] = invitation_id
    r = client.run_contribution(negotiation_id,
                                body,
                                accept=False,
                                extra_meta=extra_meta)
    d = r.json()
    contribution_id = d["data"]["id"]
    ui.inform("Sent contribution %s" % contribution_id)
    return contribution_id
Beispiel #4
0
def _join_second_contribution(negotiation_id, contrib):
    text = get_contribution_text(contrib)
    body = text["body"]
    meta = text["meta"]
    check_hashed_next_negotiation_id(meta)
    ui.inform("Sending second join contribution.")

    r = client.run_contribution(negotiation_id,
                                body,
                                accept=True,
                                extra_meta=meta)
    d = r.json()
    contribution_id = d["data"]["id"]
    ui.inform("Sent contribution %s" % contribution_id)
    return contribution_id
Beispiel #5
0
def join_ep_process_contribution(endpoint_id, negotiation_id, initial_contrib):
    text = get_contribution_text(initial_contrib)
    body = text["body"]
    suggested_hashes = body["data"]["message_hashes"]

    r = client.get_input_from_link(endpoint_id,
                                   PROCESSBOX,
                                   serialized=True,
                                   dry_run=True)
    if r is None:
        raise ValueError("input is missing")
    responses, computed_hashes = r
    if suggested_hashes != computed_hashes:
        abort("Couldn't agree on message hashes when processing.")
    meta = hash_meta_next_negotiation(text["meta"])
    r = client.run_contribution(negotiation_id,
                                body,
                                accept=True,
                                extra_meta=meta)
    d = r.json()
    contribution = d["data"]
    ui.inform("Sent contribution %s" % contribution["id"])
    return contribution
Beispiel #6
0
def join_ep_close_contribution(endpoint_id, negotiation_id, initial_contrib):
    text = get_contribution_text(initial_contrib)
    body = text["body"]
    suggested_hashes = body["data"]["message_hashes"]
    endpoint = client.endpoint_info(endpoint_id)
    try:
        hashes = get_endpoint_input(endpoint_id, INBOX, dry_run=True)
        if hashes is not None and suggested_hashes != hashes:
            abort("Hash mismatch for linked inbox")
    except (InputNotReady, NoLinks) as e:
        pass

    computed_hashes = client.check_endpoint_on_minimum(endpoint)
    if suggested_hashes != computed_hashes:
        abort("Couldn't agree on message hashes when closing.")
    meta = hash_meta_next_negotiation(text["meta"])
    r = client.run_contribution(negotiation_id,
                                body,
                                accept=True,
                                extra_meta=meta)
    d = r.json()
    contribution = d["data"]
    ui.inform("Sent contribution %s" % contribution["id"])
    return contribution