import json import subprocess import base64 import re import uuid # Install prereqs: # export GOBIN=~/bin/ # or something else on your path # go install github.com/WICG/webpackage/go/bundle/cmd/... files = [] def recordWrittenFile(fname): files.append(fname) def writeFile(fname, data): recordWrittenFile(fname) with open("out/" + fname, "w") as outf: outf.write(data) def start(): with open("creative.html") as inf: plainCreative = inf.read() with open("inabox-creative.html") as inf: inaboxCreative = inf.read() with open("inabox-ssr.html") as inf: inaboxSsrCreative = inf.read() for i in range(12): print("building %s" % i) small = [plainCreative, inaboxCreative] big = [plainCreative, inaboxCreative, inaboxSsrCreative, inaboxSsrCreative, inaboxSsrCreative] buildJson(small, "small-friendly-%s" % i) buildJson(small, "small-safeframe-pf-%s" % i) buildWebbundle(small, "small-bundle-%s" % i, i) buildJson(big, "big-friendly-%s" % i) buildJson(big, "big-safeframe-pf-%s" % i) buildWebbundle(big, "big-bundle-%s" % i, i) with open("out/index.html", "w") as outf: for fname in sorted(files): outf.write("%s
\n" % (fname, fname)) def buildJson(creatives, outPrefix): creatives = [creative.replace("", " %s" % outPrefix) for creative in creatives] writeFile("%s.json" % outPrefix, json.dumps(creatives, indent=2)) def newUuidUrl(): return "uuid-in-package:%s" % uuid.uuid4() def fakeUuidUrl(big, i): return "uuid-in-package:%s0000000-0000-0000-0000-%s" % ( "1" if big else "0", (str(i).zfill(12))) def buildWebbundle(creatives, outPrefix, index): domain = "trycontra.com" harFname = "%s.har" % outPrefix bundleFname = "%s.wbn" % outPrefix creatives = [creative.replace("", " %s" % outPrefix) for creative in creatives] creativeUrls = [newUuidUrl() for creative in creatives] har = {"log": {"entries": []}} def addToHar(url, contentType, *body, encoding=None): entry = { "request": { "method": "GET", "url": url, "headers": [] }, "response": { "status": 200, "headers": [{ "name": "Content-type", "value": contentType },{ "name": "X-content-type-options", "value": "nosniff" }], "content": { "text": "\n".join(body) } } } if encoding: entry["response"]["content"]["encoding"] = encoding har["log"]["entries"].append(entry) scriptUrl = fakeUuidUrl(outPrefix.startswith("big"), index) addToHar( scriptUrl, "text/javascript", "renderWebBundle(%s, %s)" % ( json.dumps(creativeUrls), json.dumps(outPrefix))) for creative, url in zip(creatives, creativeUrls): addToHar( url, "text/html", creative) writeFile(harFname, json.dumps(har, indent=2)) subprocess.run([ "gen-bundle", "-har", "out/" + harFname, "-o", "out/" + bundleFname, "-primaryURL", scriptUrl]) recordWrittenFile(bundleFname) if __name__ == "__main__": start()