#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright (c) 2014, NORDUnet A/S. # See LICENSE for licensing information. import argparse import json import urllib2 import sys import yaml from certtools import http_request, create_ssl_context parser = argparse.ArgumentParser(description="") parser.add_argument('--config', help="System configuration", required=True) parser.add_argument('--localconfig', help="Local configuration", required=True) parser.add_argument('--frontendnode', help="Destination node", required=True) parser.add_argument('--sthfile', help="File containing STH", required=True) args = parser.parse_args() config = yaml.load(open(args.config)) localconfig = yaml.load(open(args.localconfig)) frontendnodes = config["frontendnodes"] frontendnode = [node for node in frontendnodes if node["name"] == args.frontendnode][0] paths = localconfig["paths"] create_ssl_context(cafile=paths["https_cacertfile"]) own_key = (localconfig["nodename"], "%s/%s-private.pem" % (paths["privatekeys"], localconfig["nodename"])) hashed_dir = True def sendsth(node, baseurl, submission): try: result = http_request(baseurl + "plop/v1/frontend/sendsth", json.dumps(submission), key=own_key, verifynode=node, publickeydir=paths["publickeys"]) return json.loads(result) except urllib2.HTTPError, e: print >>sys.stderr, "ERROR: sendsth", e.read() sys.exit(1) except ValueError, e: print >>sys.stderr, "==== FAILED REQUEST ====" print >>sys.stderr, submission print >>sys.stderr, "======= RESPONSE =======" print >>sys.stderr, result print >>sys.stderr, "========================" sys.stderr.flush() raise e sth = json.load(open(args.sthfile)) nodeaddress = "https://%s/" % frontendnode["address"] nodename = frontendnode["name"] sendsthresult = sendsth(nodename, nodeaddress, sth) if sendsthresult["result"] != "ok": print >>sys.stderr, "send sth:", sendsthresult sys.exit(1)