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
101 lines
2.9 KiB
from flask import render_template, flash, redirect, g, request, url_for, session
|
|
from datetime import datetime
|
|
|
|
from app import app, db, oid, cache
|
|
from models import User
|
|
from utils import get_steam_userinfo
|
|
from board import latest_news
|
|
from forms import SettingsForm
|
|
|
|
@app.before_request
|
|
def before_request():
|
|
g.user = None
|
|
if 'user_id' in session:
|
|
g.user = User.query.get(session['user_id'])
|
|
if g.user:
|
|
g.user.last_seen = datetime.utcnow()
|
|
db.session.commit()
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return render_template("index.html", latest_news=latest_news())
|
|
|
|
@app.route('/login')
|
|
@oid.loginhandler
|
|
def login():
|
|
if g.user is not None:
|
|
return redirect(oid.get_next_url())
|
|
return oid.try_login('http://steamcommunity.com/openid')
|
|
|
|
@oid.after_login
|
|
def create_or_login(resp):
|
|
match = app.config['STEAM_ID_RE'].search(resp.identity_url)
|
|
g.user = User.get_or_create(match.group(1))
|
|
steamdata = get_steam_userinfo(g.user.steam_id)
|
|
g.user.nickname = steamdata['personaname']
|
|
g.user.avatar = steamdata['avatar']
|
|
db.session.commit()
|
|
session['user_id'] = g.user.id
|
|
flash("You are logged in as {}".format(g.user.nickname))
|
|
return redirect(oid.get_next_url())
|
|
|
|
@app.route('/logout')
|
|
def logout():
|
|
session.pop('user_id', None)
|
|
return redirect(oid.get_next_url())
|
|
|
|
|
|
### TEMPORARY ###
|
|
@app.route('/list_events')
|
|
def list_events():
|
|
return "Events list!"
|
|
@app.route('/community')
|
|
def community():
|
|
return "Community!"
|
|
@app.route('/ladder')
|
|
def ladder():
|
|
return "Ladder!"
|
|
### ###
|
|
|
|
|
|
# Teamspeak statistics page
|
|
@app.route('/teamspeak')
|
|
def teamspeak():
|
|
return render_template('teamspeak.html')
|
|
|
|
# Friends of doobs page
|
|
@app.route('/friends')
|
|
def friends():
|
|
return render_template('friends.html')
|
|
|
|
# User profile page
|
|
@app.route('/user/<int:userid>')
|
|
def user_profile(userid):
|
|
user = User.query.filter_by(id=userid).first_or_404()
|
|
return render_template('profile.html', user=user)
|
|
|
|
# User random a-z challenge progress page
|
|
@app.route('/user/<int:userid>/random', methods=['POST', 'GET'])
|
|
def user_random_hero(userid):
|
|
user = User.query.filter_by(id=userid).first_or_404()
|
|
if request.method == 'POST':
|
|
if request.form.get('skip', False):
|
|
user.random_skip()
|
|
elif request.form.get('completed', False):
|
|
user.random_success()
|
|
return render_template('hero_random.html', user=user)
|
|
|
|
# User settings page
|
|
@app.route('/settings', methods=['POST', 'GET'])
|
|
def user_settings():
|
|
user = User.query.filter_by(id=g.user.id).first_or_404()
|
|
form = SettingsForm(obj=user)
|
|
if form.validate_on_submit():
|
|
g.user.bio_text = form.bio_text.data
|
|
g.user.twitch = form.twitch.data
|
|
db.session.commit()
|
|
flash('Settings updated!')
|
|
return render_template('profile.html', user=g.user)
|
|
else:
|
|
form.populate_obj(user)
|
|
return render_template('settings.html', user=g.user, form=form)
|