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.

100 lines
3.4 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, request
  3. from flask_basicauth import BasicAuth
  4. from . import wandering_monster
  5. class PlayerAuth(BasicAuth):
  6. def init_app(self, app):
  7. super().init_app(app)
  8. self.player_password = app.config['PLAYER_BASIC_AUTH_PASSWORD']
  9. def check_credentials(self, username, password):
  10. return (password == self.player_password)
  11. basic_auth = BasicAuth()
  12. player_auth = PlayerAuth()
  13. default_views = Blueprint('default_views', __name__, url_prefix='/')
  14. @default_views.route('/')
  15. def index():
  16. return render_template('index.html')
  17. @default_views.route('/handbook')
  18. def handbook_index():
  19. return render_template('handbook.html')
  20. @default_views.route('/handbook/<string:chapter>')
  21. def handbook_section(chapter):
  22. section_template = 'srd/{}'.format(chapter)
  23. return render_template(section_template)
  24. @default_views.route('/wiki')
  25. @basic_auth.required
  26. def wiki():
  27. return render_template('wiki.html')
  28. @default_views.route('/worldmap')
  29. def worldmap():
  30. return render_template('worldmap.html')
  31. @default_views.route('/lairs')
  32. def lair_gallery():
  33. base_path = "/srv/www/atr0phy.net/acks/img/dynamic_lairs/"
  34. base_url = "https://www.atr0phy.net/acks/img/dynamic_lairs/"
  35. animal_lairs = []
  36. fs = Path(base_path + "animal/")
  37. for filename in fs.iterdir():
  38. animal_lairs.append(base_url + "animal/" + filename.name)
  39. humanoid_lairs = []
  40. fs = Path(base_path + "humanoid/")
  41. for filename in fs.iterdir():
  42. humanoid_lairs.append(base_url + "humanoid/" + filename.name)
  43. return render_template('lair_gallery.html', animal=animal_lairs, humanoid=humanoid_lairs)
  44. @default_views.route('/player_tokens')
  45. @player_auth.required
  46. def token_gallery():
  47. base_path = "/srv/www/atr0phy.net/acks/img/player_tokens/"
  48. base_url = "https://www.atr0phy.net/acks/img/player_tokens/"
  49. def to_gallery_src(src):
  50. return {"src": src, "thumb": src, "subHtml": "<h4>{}</h4>".format(src.rpartition('/')[2])}
  51. tokens = {}
  52. parent_fs = Path(base_path)
  53. for category in parent_fs.iterdir():
  54. if not category.is_dir():
  55. continue
  56. category_fs = Path(base_path + category.name + "/")
  57. tokens[category.name] = []
  58. for token in category_fs.iterdir():
  59. tokens[category.name].append(to_gallery_src(base_url + category.name + "/" + token.name))
  60. categories = [(k, v) for k, v in tokens.items()]
  61. categories = sorted(categories, key=lambda category: len(category[1]), reverse=True)
  62. return render_template('player_tokens.html', categories=categories, data=tokens)
  63. @default_views.route('/wandering_monster')
  64. def view_wandering_monster():
  65. return render_template('wandering_monster.html')
  66. @default_views.route('/wandering_monster/generate', methods=['POST'])
  67. def generate_wandering_monster():
  68. data = request.get_json()
  69. if data['type'] == "dungeon":
  70. monster = wandering_monster.generate_dungeon_monster(data['check_mod'], data['dungeon_level'], data['reaction_mod'], data['surprise_mod'])
  71. if data['type'] == "wilderness":
  72. monster = wandering_monster.generate_wilderness_monster(data['check_mod'], data['terrain_type'], data['reaction_mod'], data['surprise_mod'])
  73. return monster
  74. @default_views.route('/shares_calculator')
  75. def shares_calculator():
  76. return render_template('shares_calc.html')