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