flaskr.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """
  2. Website for Craftbroec RR stuff
  3. """
  4. import os
  5. import hashlib
  6. import hmac
  7. import subprocess
  8. import shutil
  9. from flask import jsonify, abort, request, send_from_directory
  10. from app import app
  11. @app.route('/')
  12. def index():
  13. """Show index page"""
  14. return send_from_directory('static', 'index.html')
  15. @app.route("/tutorial")
  16. @app.route("/tutorial/book")
  17. def tutorial_book():
  18. """Display book"""
  19. return send_from_directory('static', 'tutorial/book.pdf')
  20. @app.route("/tutorial/article")
  21. def tutorial_article():
  22. """Display book"""
  23. return send_from_directory('static', 'tutorial/article.pdf')
  24. @app.route("/tutorial/dist")
  25. def tutorial_dist():
  26. """Display book"""
  27. return send_from_directory('static', 'tutorial/dist.pdf')
  28. @app.route("/tutorial.png")
  29. def tutorial_dist_png():
  30. """Display book"""
  31. return send_from_directory('static', 'tutorial/dist.png')
  32. @app.route('/typeset', methods=['GET', 'POST'])
  33. def typeset():
  34. """Show index page"""
  35. working_dir = os.getcwd()
  36. if os.path.basename(working_dir) == 'rr':
  37. os.chdir('rr_tutorial')
  38. book_toc_size = os.path.getsize('master_book.toc') \
  39. if os.path.isfile('master_book.toc') else 0
  40. article_toc_size = os.path.getsize('master_article.toc') \
  41. if os.path.isfile('master_article.toc') else 0
  42. dist_toc_size = os.path.getsize('master_dist.toc') \
  43. if os.path.isfile('master_dist.toc') else 0
  44. subprocess.check_output(['xelatex', '-halt-on-error', 'master_book.tex'])
  45. subprocess.check_output(['xelatex', '-halt-on-error', 'master_article.tex'])
  46. subprocess.check_output(['./set.sh'])
  47. if book_toc_size != os.path.getsize('master_book.toc'):
  48. subprocess.check_output(['xelatex', '-halt-on-error', 'master_book.tex'])
  49. if article_toc_size != os.path.getsize('master_article.toc'):
  50. subprocess.check_output(['xelatex', '-halt-on-error', 'master_article.tex'])
  51. if dist_toc_size != os.path.getsize('master_dist.toc'):
  52. subprocess.check_output(['./set.sh'])
  53. shutil.copyfile('master_book.pdf', '../app/static/tutorial/book.pdf')
  54. shutil.copyfile('master_article.pdf', '../app/static/tutorial/article.pdf')
  55. shutil.copyfile('master_dist.pdf', '../app/static/tutorial/dist.pdf')
  56. subprocess.check_output(['./convert.sh'])
  57. shutil.copyfile('master_dist.png', '../app/static/tutorial/dist.png')
  58. os.chdir(working_dir)
  59. return jsonify(True)
  60. @app.route('/deploy', methods=['POST'])
  61. def deploy():
  62. """Run deploy script"""
  63. secret = os.environ["WEBHOOK_KEY"].encode('utf-8')
  64. digest = hmac.new(secret, request.data, hashlib.sha256).hexdigest()
  65. signature = request.headers['X-Gogs-Signature']
  66. if len(signature) < 2 or not hmac.compare_digest(signature, digest):
  67. abort(400, 'Invalid signature')
  68. subprocess.call(['pipenv', 'sync'])
  69. subprocess.call(['git', 'pull'])
  70. subprocess.call(['touch', 'flask.wsgi'])
  71. return jsonify(True)