gatoatigrado3

Simple Google Apps Flask OpenID app

Nov 22nd, 2012
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.69 KB | None | 0 0
  1. from os.path import dirname, join
  2. from flask import Flask, flash, g, redirect, session
  3. import sqlite3dbm # Simple sqlite3 key-value store written by a coworker
  4. from flask_openid import OpenID
  5.  
  6. app = Flask("my Google OpenID app")
  7. app.secret_key = YOUR RANDOM STRING HERE
  8. oid = OpenID(app, join(dirname(__file__), 'openid_store'))
  9.  
  10. def open_db():
  11.     g.db = getattr(g, 'db', None) or sqlite3dbm.sshelve.open("database.sqlite3")
  12.  
  13. def get_user():
  14.     return g.db.get('oid-' + session.get('openid', ''))
  15.  
  16. @app.before_request
  17. def set_user_if_logged_in():
  18.     open_db()
  19.     g.user = get_user()
  20.  
  21. @app.route("/login")
  22. @oid.loginhandler
  23. def login():
  24.     if g.user is not None:
  25.         return redirect(oid.get_next_url())
  26.     else:
  27.         return oid.try_login("https://www.google.com/accounts/o8/id",
  28.             ask_for=['email', 'fullname', 'nickname'])
  29.  
  30. @oid.after_login
  31. def new_user(resp):
  32.     session['openid'] = resp.identity_url
  33.     if get_user() is None:
  34.         user_id = g.db.get('user-count', 0)
  35.         g.db['user-count'] = user_id + 1
  36.         g.db['oid-' + session['openid']] = {
  37.             'id': user_id,
  38.             'email': resp.email,
  39.             'fullname': resp.fullname,
  40.             'nickname': resp.nickname}
  41.     return redirect(oid.get_next_url())
  42.  
  43. @app.route('/logout')
  44. def logout():
  45.     session.pop('openid', None)
  46.     flash(u'You were signed out')
  47.     return redirect(oid.get_next_url())
  48.  
  49. @app.route('/')
  50. def hello():
  51.     if g.user:
  52.         return "hi user %(id)d (email %(email)s). <a href='/logout'>logout</a>" %(g.user)
  53.     else:
  54.         return "not logged in. <a href='/login'>login</a>"
  55.  
  56. if __name__ == "__main__":
  57.     app.run(port=2664, debug=True)
Add Comment
Please, Sign In to add comment