summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmonitor/josef_monitor.py59
-rwxr-xr-xmonitor/josef_mover.py20
-rw-r--r--monitor/monitor_conf.py2
3 files changed, 44 insertions, 37 deletions
diff --git a/monitor/josef_monitor.py b/monitor/josef_monitor.py
index c52f29c..af5067b 100755
--- a/monitor/josef_monitor.py
+++ b/monitor/josef_monitor.py
@@ -17,21 +17,29 @@ from josef_reader import monitored_domain
from josef_leveldb import db_add_certs, db_open
import os.path
+
+parser = argparse.ArgumentParser(description="")
+parser.add_argument('--config', default="monitor_conf.py")
+args = parser.parse_args()
+
# Import from config file
-if os.path.isfile("monitor_conf.py"):
- from monitor_conf import ctlogs, OUTPUT_DIR, INTERVAL, DEFAULT_CERT_FILE, DB_PATH, MONITORED_DOMAINS, DOMAINS_FILE
+if os.path.isfile(args.config):
+ moduleNames = [args.config[:-2]]
+ modules = map(__import__, moduleNames)
+ # print modules
+ CONFIG = modules[0]
+ # from monitor_conf import ctlogs, OUTPUT_DIR, INTERVAL, DEFAULT_CERT_FILE, DB_PATH, MONITORED_DOMAINS, DOMAINS_FILE
else:
print "Config file not found!"
sys.exit()
-if not os.path.exists(OUTPUT_DIR):
- os.makedirs(OUTPUT_DIR)
+if not os.path.exists(CONFIG.OUTPUT_DIR):
+ os.makedirs(CONFIG.OUTPUT_DIR)
-if not os.path.exists(DB_PATH):
- os.makedirs(DB_PATH)
+if not os.path.exists(CONFIG.DB_PATH):
+ os.makedirs(CONFIG.DB_PATH)
-parser = argparse.ArgumentParser(description="")
class ctlog:
def __init__(self, name, url, key, log_id=None):
@@ -39,8 +47,8 @@ class ctlog:
self.url = url
self.key = key
self.log_id = log_id
- self.logfile = OUTPUT_DIR + name + ".log"
- self.savefile = OUTPUT_DIR + name + "-state-info.json"
+ self.logfile = CONFIG.OUTPUT_DIR + name + ".log"
+ self.savefile = CONFIG.OUTPUT_DIR + name + "-state-info.json"
self.subtree = [[]]
self.sth = None
self.entries = 0
@@ -71,7 +79,6 @@ class ctlog:
else:
self.log("ERROR Failed to build tree from entries.")
-
def fetch_and_increment_subtree(self, first, last, url, subtree =[[]]):
new_leafs = []
if first <= last:
@@ -84,14 +91,13 @@ class ctlog:
tmp_data["leaf_hash"] = base64.b64encode(entry_hash)
tmp_cert_data.append(tmp_data)
new_leafs.append(entry_hash)
- if DB_PATH:
- db_add_certs(DB_PATH, tmp_cert_data)
- if DEFAULT_CERT_FILE:
- append_file(DEFAULT_CERT_FILE, tmp_cert_data)
+ if CONFIG.DB_PATH:
+ db_add_certs(CONFIG.DB_PATH, tmp_cert_data)
+ if CONFIG.DEFAULT_CERT_FILE:
+ append_file(CONFIG.DEFAULT_CERT_FILE, tmp_cert_data)
subtree = reduce_tree(new_leafs, subtree)
return subtree, len(new_leafs) + first
-
def to_dict(self):
d = {}
d["entries"] = self.entries
@@ -141,7 +147,6 @@ class ctlog:
self.log("STH updated. Size: " + str(new_sth["tree_size"]) + ", Time: " + sth_time)
self.sth = new_sth
-
def update_roots(self):
try:
roots = get_all_roots(self.url)
@@ -153,7 +158,7 @@ class ctlog:
if new_root_hash != self.root_hash:
self.root_hash = new_root_hash
- cert_dir = OUTPUT_DIR + self.name + "-roots"
+ cert_dir = CONFIG.OUTPUT_DIR + self.name + "-roots"
if not os.path.exists(cert_dir):
os.makedirs(cert_dir)
@@ -367,14 +372,12 @@ def get_proof_by_index(baseurl, index, tree_size):
def get_all_roots(base_url):
result = urlopen(base_url + "ct/v1/get-roots").read()
certs = json.loads(result)["certificates"]
- # print time.strftime('%H:%M:%S') + " Received " + str(len(certs)) + " root certs from " + base_url
return certs
-
def setup_domain_monitoring():
monitored_domains = []
try:
- with open(DOMAINS_FILE) as fp:
+ with open(CONFIG.DOMAINS_FILE) as fp:
for line in fp:
tmp = json.loads(line)
for domain in tmp:
@@ -384,7 +387,7 @@ def setup_domain_monitoring():
except IOError:
pass
- for md in MONITORED_DOMAINS:
+ for md in CONFIG.MONITORED_DOMAINS:
tmp = monitored_domain(md)
if not tmp in monitored_domains:
print "New domain (not in file) " + md
@@ -392,14 +395,18 @@ def setup_domain_monitoring():
monitored_domains.append(tmp)
return monitored_domains
+
+def load_config(path):
+ pass
+
def main(args):
- global DB
+
monitored_domains = setup_domain_monitoring()
# Create logs
logs = []
try:
- for item in ctlogs:
+ for item in CONFIG.CTLOGS:
logs.append(ctlog(item["name"], item["url"], item["key"], item["id"]))
print time.strftime('%H:%M:%S') + " Setting up monitor for " + str(len(logs)) + " logs..."
@@ -439,7 +446,7 @@ def main(args):
domain_dict = []
for md in monitored_domains:
domain_dict.append(md.to_dict())
- open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
+ open(CONFIG.DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
# Something went horribly wrong!
except Exception, err:
@@ -451,12 +458,12 @@ def main(args):
domain_dict = []
for md in monitored_domains:
domain_dict.append(md.to_dict())
- open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
+ open(CONFIG.DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
if __name__ == '__main__':
- main(parser.parse_args())
+ main(args)
diff --git a/monitor/josef_mover.py b/monitor/josef_mover.py
index 52b9dd6..1600217 100755
--- a/monitor/josef_mover.py
+++ b/monitor/josef_mover.py
@@ -11,7 +11,7 @@ from precerttools import cleanprecert
from monitor_conf import *
from josef_lib import *
-def print_reply(rep, entry, precert):
+def print_reply(rep, entry):
t = datetime.datetime.fromtimestamp(rep['timestamp'] / 1000, UTC()).strftime("%Y-%m-%d %H:%M:%S")
log_id = rep["id"]
@@ -26,7 +26,7 @@ def print_reply(rep, entry, precert):
# print "Log:", l["name"]
print "Time:", t
- if precert:
+ if entry[2]:
print "Type: Precert"
signed_entry = pack_precert(cleanprecert(entry[0][0]), entry[2])
else:
@@ -36,7 +36,7 @@ def print_reply(rep, entry, precert):
key = base64.b64decode(log["key"])
try:
- check_sct_signature(log["url"], signed_entry, rep, precert, key)
+ check_sct_signature(log["url"], signed_entry, rep, entry[2], key)
print "Signature: OK"
except:
print "Could not verify signature!"
@@ -44,13 +44,13 @@ def print_reply(rep, entry, precert):
print ""
-# source = [ctlogs[0]]
-source = ctlogs
-# dests = [ctlogs[0]]
-dests = ctlogs
+source = [ctlogs[0]]
+dests = [ctlogs[0]]
+# source = ctlogs
+# dests = ctlogs
first = 0
-last = 0
+last = 1
# print entries
for s_log in source:
@@ -70,11 +70,11 @@ for s_log in source:
for e in entry[0]:
submission.append(base64.b64encode(e))
- if precert:
+ if entry[2]:
res = add_prechain(d_log["url"], {"chain" : submission})
else:
res = add_chain(d_log["url"], {"chain" : submission})
- print_reply(res, entry, precert)
+ print_reply(res, entry)
# time.sleep(5)
except KeyboardInterrupt:
sys.exit()
diff --git a/monitor/monitor_conf.py b/monitor/monitor_conf.py
index db9189c..68a5732 100644
--- a/monitor/monitor_conf.py
+++ b/monitor/monitor_conf.py
@@ -29,7 +29,7 @@ MONITORED_DOMAINS = [
]
# CT logs and associated keys
-ctlogs = [
+CTLOGS = [
# {"name" : "pilot",
# "url" : "https://ct.googleapis.com/pilot/",
# "key" : "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA==",