2010-05-03 11:20:52 +02:00
|
|
|
from flask import Module, render_template, session, redirect, url_for, \
|
|
|
|
|
request, flash, g, Response
|
2010-05-16 01:06:37 +02:00
|
|
|
from flask_website import oid, twitter
|
2010-05-03 11:20:52 +02:00
|
|
|
from flask_website.database import db_session, User
|
2010-05-02 16:52:15 +02:00
|
|
|
|
|
|
|
|
general = Module(__name__)
|
2010-05-16 01:06:37 +02:00
|
|
|
tweets = twitter.SearchQuery(required=['flask'],
|
|
|
|
|
optional=['code', 'web', 'python', 'py',
|
|
|
|
|
'pocoo', 'micro', 'mitsuhiko',
|
|
|
|
|
'framework', 'django', 'jinja',
|
|
|
|
|
'werkzeug', 'pylons'],
|
|
|
|
|
lang='en')
|
2010-05-02 16:52:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@general.route('/')
|
|
|
|
|
def index():
|
2010-05-16 01:06:37 +02:00
|
|
|
return render_template('general/index.html', tweets=tweets)
|
2010-05-03 11:20:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@general.route('/logout/')
|
|
|
|
|
def logout():
|
|
|
|
|
if 'openid' in session:
|
|
|
|
|
flash(u'Logged out')
|
|
|
|
|
del session['openid']
|
|
|
|
|
return redirect(request.referrer or url_for('general.index'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@general.route('/login/', methods=['GET', 'POST'])
|
2010-05-15 23:19:13 +02:00
|
|
|
@oid.loginhandler
|
2010-05-03 11:20:52 +02:00
|
|
|
def login():
|
|
|
|
|
if g.user is not None:
|
|
|
|
|
return redirect(url_for('general.index'))
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
openid = request.values.get('openid')
|
|
|
|
|
if openid:
|
2010-05-15 23:19:13 +02:00
|
|
|
return oid.try_login(openid, ask_for=['fullname', 'nickname'])
|
|
|
|
|
error = oid.fetch_error()
|
|
|
|
|
if error:
|
|
|
|
|
flash(u'Error: ' + error)
|
|
|
|
|
return render_template('general/login.html', next=oid.get_next_url())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@oid.after_login
|
|
|
|
|
def create_or_login(resp):
|
|
|
|
|
session['openid'] = resp.identity_url
|
|
|
|
|
user = User.query.filter_by(openid=resp.identity_url).first()
|
|
|
|
|
if user is not None:
|
|
|
|
|
flash(u'Successfully signed in')
|
|
|
|
|
g.user = user
|
|
|
|
|
return redirect(oid.get_next_url())
|
|
|
|
|
return redirect(url_for('first_login', next=oid.get_next_url(),
|
|
|
|
|
name=resp.fullname or resp.nickname))
|
2010-05-03 11:20:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@general.route('/first-login/', methods=['GET', 'POST'])
|
|
|
|
|
def first_login():
|
|
|
|
|
if g.user is not None or 'openid' not in session:
|
|
|
|
|
return redirect(url_for('login'))
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
if 'cancel' in request.form:
|
|
|
|
|
del session['openid']
|
|
|
|
|
flash(u'Login was aborted')
|
|
|
|
|
return redirect(url_for('general.login'))
|
|
|
|
|
db_session.add(User(request.form['name'], session['openid']))
|
|
|
|
|
db_session.commit()
|
|
|
|
|
flash(u'Successfully created profile and logged in')
|
2010-05-15 23:19:13 +02:00
|
|
|
return redirect(oid.get_next_url())
|
2010-05-03 11:20:52 +02:00
|
|
|
return render_template('general/first_login.html',
|
2010-05-15 23:19:13 +02:00
|
|
|
next=oid.get_next_url(),
|
2010-05-03 11:20:52 +02:00
|
|
|
openid=session['openid'])
|