""" Website for Craftbroec RR stuff """ import os import hashlib import hmac import subprocess import shutil from flask import jsonify, abort, request, send_from_directory from app import app @app.route('/') def index(): """Show index page""" return send_from_directory('static', 'index.html') @app.route("/tutorial") @app.route("/tutorial/book") def tutorial_book(): """Display book""" return send_from_directory('static', 'tutorial/book.pdf') @app.route("/tutorial/article") def tutorial_article(): """Display book""" return send_from_directory('static', 'tutorial/article.pdf') @app.route("/tutorial/dist") def tutorial_dist(): """Display book""" return send_from_directory('static', 'tutorial/dist.pdf') @app.route("/tutorial.png") def tutorial_dist_png(): """Display book""" return send_from_directory('static', 'tutorial/dist.png') @app.route('/typeset', methods=['GET', 'POST']) def typeset(): """Show index page""" working_dir = os.getcwd() if os.path.basename(working_dir) == 'rr': os.chdir('rr_tutorial') book_toc_size = os.path.getsize('master_book.toc') \ if os.path.isfile('master_book.toc') else 0 article_toc_size = os.path.getsize('master_article.toc') \ if os.path.isfile('master_article.toc') else 0 dist_toc_size = os.path.getsize('master_dist.toc') \ if os.path.isfile('master_dist.toc') else 0 subprocess.check_output(['xelatex', '-halt-on-error', 'master_book.tex']) subprocess.check_output(['xelatex', '-halt-on-error', 'master_article.tex']) subprocess.check_output(['./set.sh']) if book_toc_size != os.path.getsize('master_book.toc'): subprocess.check_output(['xelatex', '-halt-on-error', 'master_book.tex']) if article_toc_size != os.path.getsize('master_article.toc'): subprocess.check_output(['xelatex', '-halt-on-error', 'master_article.tex']) if dist_toc_size != os.path.getsize('master_dist.toc'): subprocess.check_output(['./set.sh']) shutil.copyfile('master_book.pdf', '../app/static/tutorial/book.pdf') shutil.copyfile('master_article.pdf', '../app/static/tutorial/article.pdf') shutil.copyfile('master_dist.pdf', '../app/static/tutorial/dist.pdf') subprocess.check_output(['./convert.sh']) shutil.copyfile('master_dist.png', '../app/static/tutorial/dist.png') os.chdir(working_dir) return jsonify(True) @app.route('/deploy', methods=['POST']) def deploy(): """Run deploy script""" secret = os.environ["WEBHOOK_KEY"].encode('utf-8') digest = hmac.new(secret, request.data, hashlib.sha256).hexdigest() signature = request.headers['X-Gogs-Signature'] if len(signature) < 2 or not hmac.compare_digest(signature, digest): abort(400, 'Invalid signature') subprocess.call(['pipenv', 'sync']) subprocess.call(['git', 'pull']) subprocess.call(['touch', 'flask.wsgi']) return jsonify(True)