DotaNoobs main site.
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.

101 lines
2.9 KiB

  1. from flask import render_template, flash, redirect, g, request, url_for, session
  2. from datetime import datetime
  3. from app import app, db, oid, cache
  4. from models import User
  5. from utils import get_steam_userinfo
  6. from board import latest_news
  7. from forms import SettingsForm
  8. @app.before_request
  9. def before_request():
  10. g.user = None
  11. if 'user_id' in session:
  12. g.user = User.query.get(session['user_id'])
  13. if g.user:
  14. g.user.last_seen = datetime.utcnow()
  15. db.session.commit()
  16. @app.route('/')
  17. def index():
  18. return render_template("index.html", latest_news=latest_news())
  19. @app.route('/login')
  20. @oid.loginhandler
  21. def login():
  22. if g.user is not None:
  23. return redirect(oid.get_next_url())
  24. return oid.try_login('http://steamcommunity.com/openid')
  25. @oid.after_login
  26. def create_or_login(resp):
  27. match = app.config['STEAM_ID_RE'].search(resp.identity_url)
  28. g.user = User.get_or_create(match.group(1))
  29. steamdata = get_steam_userinfo(g.user.steam_id)
  30. g.user.nickname = steamdata['personaname']
  31. g.user.avatar = steamdata['avatar']
  32. db.session.commit()
  33. session['user_id'] = g.user.id
  34. flash("You are logged in as {}".format(g.user.nickname))
  35. return redirect(oid.get_next_url())
  36. @app.route('/logout')
  37. def logout():
  38. session.pop('user_id', None)
  39. return redirect(oid.get_next_url())
  40. ### TEMPORARY ###
  41. @app.route('/list_events')
  42. def list_events():
  43. return "Events list!"
  44. @app.route('/community')
  45. def community():
  46. return "Community!"
  47. @app.route('/ladder')
  48. def ladder():
  49. return "Ladder!"
  50. ### ###
  51. # Teamspeak statistics page
  52. @app.route('/teamspeak')
  53. def teamspeak():
  54. return render_template('teamspeak.html')
  55. # Friends of doobs page
  56. @app.route('/friends')
  57. def friends():
  58. return render_template('friends.html')
  59. # User profile page
  60. @app.route('/user/<int:userid>')
  61. def user_profile(userid):
  62. user = User.query.filter_by(id=userid).first_or_404()
  63. return render_template('profile.html', user=user)
  64. # User random a-z challenge progress page
  65. @app.route('/user/<int:userid>/random', methods=['POST', 'GET'])
  66. def user_random_hero(userid):
  67. user = User.query.filter_by(id=userid).first_or_404()
  68. if request.method == 'POST':
  69. if request.form.get('skip', False):
  70. user.random_skip()
  71. elif request.form.get('completed', False):
  72. user.random_success()
  73. return render_template('hero_random.html', user=user)
  74. # User settings page
  75. @app.route('/settings', methods=['POST', 'GET'])
  76. def user_settings():
  77. user = User.query.filter_by(id=g.user.id).first_or_404()
  78. form = SettingsForm(obj=user)
  79. if form.validate_on_submit():
  80. g.user.bio_text = form.bio_text.data
  81. g.user.twitch = form.twitch.data
  82. db.session.commit()
  83. flash('Settings updated!')
  84. return render_template('profile.html', user=g.user)
  85. else:
  86. form.populate_obj(user)
  87. return render_template('settings.html', user=g.user, form=form)