securedrop.py (33 lines of code) (raw):
import os
import shutil
from jinja2 import Environment, FileSystemLoader, select_autoescape
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
env = Environment(
loader=FileSystemLoader(THIS_DIR + '/templates/public'),
trim_blocks=True,
autoescape=select_autoescape(['html', 'xml'])
)
def render_page(securedrop_url: str, securedrop_url_human: str, path: str, passes_healthcheck: bool):
root_template = env.get_template('securedrop.html')
return root_template.render(
securedrop_url=securedrop_url,
securedrop_url_human = securedrop_url_human,
path=path,
passes_healthcheck=passes_healthcheck
)
def build_pages(securedrop_url: str, securedrop_url_human: str, stage: str):
# routing in Fastly requires the PROD pages to include securedrop/ before links to assets
path = 'securedrop/' if stage == 'PROD' else ''
if os.path.exists('./build'):
shutil.rmtree('./build')
os.makedirs('./build')
passed = render_page(securedrop_url, securedrop_url_human, path=path, passes_healthcheck=True)
failed = render_page(securedrop_url, securedrop_url_human, path=path, passes_healthcheck=False)
index = open("build/index.html", "w")
maintenance = open("build/maintenance.html", "w")
index.write(passed)
maintenance.write(failed)
index.close()
maintenance.close()
if __name__ == '__main__':
build_pages('xp44cagis447k3lpb4wwhcqukix6cgqokbuys24vmxmbzmaq2gjvc2yd.onion', 'theguardian.securedrop.tor.onion', stage='DEV')
shutil.copytree('./static', './build/static')