mirror of https://github.com/mitsuhiko/flask.git
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.
60 lines
1.5 KiB
60 lines
1.5 KiB
12 years ago
|
from flask import Flask, render_template, session, request, json, abort, g
|
||
|
|
||
|
import requests
|
||
|
|
||
|
|
||
|
app = Flask(__name__)
|
||
|
app.config.update(
|
||
|
DEBUG=True,
|
||
|
SECRET_KEY='my development key',
|
||
|
PERSONA_JS='https://login.persona.org/include.js',
|
||
|
PERSONA_VERIFIER='https://verifier.login.persona.org/verify',
|
||
|
)
|
||
|
app.config.from_envvar('PERSONA_SETTINGS', silent=True)
|
||
|
|
||
|
|
||
|
@app.before_request
|
||
|
def get_current_user():
|
||
|
g.user = None
|
||
|
email = session.get('email')
|
||
|
if email is not None:
|
||
|
g.user = email
|
||
|
|
||
|
|
||
|
@app.route('/')
|
||
|
def index():
|
||
|
"""Just a generic index page to show."""
|
||
|
return render_template('index.html')
|
||
|
|
||
|
|
||
|
@app.route('/_auth/login', methods=['GET', 'POST'])
|
||
|
def login_handler():
|
||
|
"""This is used by the persona.js file to kick off the
|
||
|
verification securely from the server side. If all is okay
|
||
|
the email address is remembered on the server.
|
||
|
"""
|
||
|
resp = requests.post(app.config['PERSONA_VERIFIER'], data={
|
||
|
'assertion': request.form['assertion'],
|
||
|
'audience': request.host_url,
|
||
|
}, verify=True)
|
||
|
if resp.ok:
|
||
|
verification_data = json.loads(resp.content)
|
||
|
if verification_data['status'] == 'okay':
|
||
|
session['email'] = verification_data['email']
|
||
|
return 'OK'
|
||
|
|
||
|
abort(400)
|
||
|
|
||
|
|
||
|
@app.route('/_auth/logout', methods=['POST'])
|
||
|
def logout_handler():
|
||
|
"""This is what persona.js will call to sign the user
|
||
|
out again.
|
||
|
"""
|
||
|
session.clear()
|
||
|
return 'OK'
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
app.run()
|