You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.6 KiB

3 years ago
3 years ago
3 years ago
3 years ago
  1. from pathlib import Path
  2. from flask import Blueprint, render_template, url_for, redirect
  3. from flask_basicauth import BasicAuth
  4. class PlayerAuth(BasicAuth):
  5. def init_app(self, app):
  6. super().init_app(app)
  7. self.player_password = app.config['PLAYER_BASIC_AUTH_PASSWORD']
  8. def check_credentials(self, username, password):
  9. return (password == self.player_password)
  10. basic_auth = BasicAuth()
  11. player_auth = PlayerAuth()
  12. default_views = Blueprint('default_views', __name__, url_prefix='/')
  13. @default_views.route('/')
  14. def index():
  15. return render_template('index.html')
  16. @default_views.route('/handbook')
  17. def handbook_index():
  18. return render_template('handbook.html')
  19. @default_views.route('/handbook/<string:chapter>')
  20. def handbook_section(chapter):
  21. section_template = 'srd/{}'.format(chapter)
  22. return render_template(section_template)
  23. @default_views.route('/wiki')
  24. @basic_auth.required
  25. def wiki():
  26. return render_template('wiki.html')
  27. @default_views.route('/worldmap')
  28. def worldmap():
  29. return render_template('worldmap.html')
  30. @default_views.route('/lairs')
  31. def lair_gallery():
  32. base_path = "/srv/www/atr0phy.net/acks/img/dynamic_lairs/"
  33. base_url = "https://www.atr0phy.net/acks/img/dynamic_lairs/"
  34. animal_lairs = []
  35. fs = Path(base_path + "animal/")
  36. for filename in fs.iterdir():
  37. animal_lairs.append(base_url + "animal/" + filename.name)
  38. humanoid_lairs = []
  39. fs = Path(base_path + "humanoid/")
  40. for filename in fs.iterdir():
  41. humanoid_lairs.append(base_url + "humanoid/" + filename.name)
  42. return render_template('lair_gallery.html', animal=animal_lairs, humanoid=humanoid_lairs)
  43. @default_views.route('/player_tokens')
  44. @player_auth.required
  45. def token_gallery():
  46. base_path = "/srv/www/atr0phy.net/acks/img/player_tokens/"
  47. base_url = "https://www.atr0phy.net/acks/img/player_tokens/"
  48. def to_gallery_src(src):
  49. return {"src": src, "thumb": src, "subHtml": "<h4>{}</h4>".format(src.rpartition('/')[2])}
  50. tokens = {}
  51. parent_fs = Path(base_path)
  52. for category in parent_fs.iterdir():
  53. if not category.is_dir():
  54. continue
  55. category_fs = Path(base_path + category.name + "/")
  56. tokens[category.name] = []
  57. for token in category_fs.iterdir():
  58. tokens[category.name].append(to_gallery_src(base_url + category.name + "/" + token.name))
  59. categories = [(k, v) for k, v in tokens.items()]
  60. categories = sorted(categories, key=lambda category: len(category[1]), reverse=True)
  61. return render_template('player_tokens.html', categories=categories, data=tokens)