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
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
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
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
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
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