132 lines
3.9 KiB
Python
132 lines
3.9 KiB
Python
import re
|
|
import requests
|
|
from flask import (
|
|
g, Blueprint, render_template, abort, current_app, redirect,
|
|
redirect, request, url_for, session, flash
|
|
)
|
|
from jinja2 import TemplateNotFound
|
|
from wotstats.openid import oid
|
|
|
|
from wotstats.database import db
|
|
from wotstats.models import User
|
|
|
|
pages_home = Blueprint('pages_home', __name__, template_folder='templates')
|
|
|
|
# def show(page):
|
|
# try:
|
|
# return render_template('pages/%s.html' % page)
|
|
# except TemplateNotFound:
|
|
# abort(404)
|
|
|
|
|
|
@pages_home.route('/', defaults={'page': 'index'})
|
|
@pages_home.route('/<page>')
|
|
def index(page):
|
|
print session
|
|
return render_template('pages/index.html')
|
|
|
|
|
|
# @pages_home.route('/auth.html')
|
|
# def auth_step1():
|
|
# return render_template('pages/auth_step1.html')
|
|
|
|
|
|
@pages_home.route('/login', methods=['GET', 'POST'])
|
|
@oid.loginhandler
|
|
def login():
|
|
print request.form
|
|
print request.args
|
|
if g.user is not None:
|
|
return redirect(oid.get_next_url())
|
|
if request.method == 'POST':
|
|
openid = request.form.get('openid')
|
|
if openid:
|
|
return oid.try_login(
|
|
openid,
|
|
ask_for=['email', 'nickname'],
|
|
ask_for_optional=['fullname'])
|
|
return render_template(
|
|
'pages/login.html',
|
|
next=oid.get_next_url(),
|
|
error=oid.fetch_error())
|
|
|
|
|
|
@pages_home.route('/create-profile', methods=['GET', 'POST'])
|
|
def create_profile():
|
|
if g.user is not None or 'openid' not in session:
|
|
return redirect(url_for('pages_home.index'))
|
|
if request.method == 'POST':
|
|
name = request.form['name']
|
|
email = request.form['email']
|
|
if not name:
|
|
flash(u'Error: you have to provide a name')
|
|
elif '@' not in email:
|
|
flash(u'Error: you have to enter a valid email address')
|
|
else:
|
|
flash(u'Profile successfully created')
|
|
u = User(email)
|
|
u.name = name
|
|
u.openid = session['openid']
|
|
u.password = ''
|
|
|
|
db.session.add(u)
|
|
db.session.commit()
|
|
return redirect(oid.get_next_url())
|
|
return render_template(
|
|
'pages/create_profile.html',
|
|
next=oid.get_next_url())
|
|
|
|
|
|
@pages_home.route('/logout')
|
|
def logout():
|
|
session.pop('openid', None)
|
|
session.pop('token', None)
|
|
# flash(u'You were signed out')
|
|
return redirect(oid.get_next_url())
|
|
|
|
|
|
@pages_home.route('/token')
|
|
def token():
|
|
print request.args
|
|
print request.form
|
|
|
|
if 'openid' not in session:
|
|
return redirect(url_for('pages_home.index'))
|
|
# ImmutableMultiDict([('status', u'ok'), ('access_token', u'a4d0a13df7c733102fbf6cd650794c6d047e91aa'), ('nickname', u'CrazyPants1999'), ('account_id', u'69552613'), ('', u'1505047809')])
|
|
if request.args.get('status') == 'ok' and request.args.get('access_token'):
|
|
session['token'] = {
|
|
'access_token': request.args.get('access_token'),
|
|
'expires_at': request.args.get('expires_at'),
|
|
}
|
|
return redirect(oid.get_next_url())
|
|
|
|
redirect_url = 'http://truesoft.org:5000/token'
|
|
|
|
response = requests.get('{}?application_id={}&nofollow=1&redirect_uri={}'.format(
|
|
current_app.config['WG_TOKEN_URL'],
|
|
current_app.config['WG_ID'], redirect_url)).json()
|
|
|
|
if response.get('status') == 'ok':
|
|
return redirect(response.get('data', {}).get('location'))
|
|
return redirect(oid.get_next_url())
|
|
|
|
|
|
@oid.after_login
|
|
def create_or_login(resp):
|
|
session['openid'] = resp.identity_url
|
|
session['token'] = None
|
|
|
|
user = User.query.filter_by(openid=resp.identity_url).first()
|
|
|
|
if user is not None:
|
|
# flash(u'Successfully signed in')
|
|
g.user = user
|
|
if not session['token']:
|
|
return redirect(url_for('pages_home.token'))
|
|
return redirect(oid.get_next_url())
|
|
|
|
return redirect(url_for(
|
|
'pages_home.create_profile',
|
|
next=oid.get_next_url(),
|
|
name=resp.fullname or resp.nickname,
|
|
email=resp.email))
|