#!/usr/bin/env python3
"""Run SSL Labs server test on all of HTTPSWatch's domains."""
import argparse
import json
import re
import subprocess


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("sslscan_binary")
    parser.add_argument("output_file")
    args = parser.parse_args()

    with open("config/meta.json", "r", encoding="utf-8") as fp:
        meta = json.load(fp)
    domains = []
    for listing in meta["listings"]:
        if "external" in listing:
            continue
        with open("config/{}.json".format(listing["shortname"]), encoding="utf-8") as fp:
            listing["data"] = json.load(fp)
        for cat in listing["data"]["categories"]:
            for site in cat["sites"]:
                domains.append(site["domain"])

    p = subprocess.Popen([args.sslscan_binary, "--grade", "--usecache"] + domains, stdout=subprocess.PIPE)
    stdout = p.communicate()[0].decode("ascii").strip()
    results = {}
    r = re.compile("\"(.+)\": \"(.+)\"", re.ASCII)
    for l in stdout.splitlines():
        m = r.match(l)
        g = m.groups()
        results[g[0]] = g[1]

    with open(args.output_file, "w", encoding="utf-8") as fp:
        json.dump(results, fp)


if __name__ == "__main__":
    main()