From 1e5746bb2b0ca82d2bd77edf1f153fdcca70503f Mon Sep 17 00:00:00 2001 From: David Lord Date: Wed, 6 Jul 2016 08:02:13 -0700 Subject: [PATCH] persona is discontinued, remove example closes #1947 --- examples/persona/README.md | 3 -- examples/persona/persona.py | 55 ------------------------- examples/persona/static/persona.js | 52 ----------------------- examples/persona/static/spinner.png | Bin 31201 -> 0 bytes examples/persona/static/style.css | 39 ------------------ examples/persona/templates/index.html | 23 ----------- examples/persona/templates/layout.html | 27 ------------ 7 files changed, 199 deletions(-) delete mode 100644 examples/persona/README.md delete mode 100644 examples/persona/persona.py delete mode 100644 examples/persona/static/persona.js delete mode 100644 examples/persona/static/spinner.png delete mode 100644 examples/persona/static/style.css delete mode 100644 examples/persona/templates/index.html delete mode 100644 examples/persona/templates/layout.html diff --git a/examples/persona/README.md b/examples/persona/README.md deleted file mode 100644 index d9482d36..00000000 --- a/examples/persona/README.md +++ /dev/null @@ -1,3 +0,0 @@ -A simple example for integrating [Persona](https://login.persona.org/) into a -Flask application. In addition to Flask, it requires the -[requests](www.python-requests.org/) library. diff --git a/examples/persona/persona.py b/examples/persona/persona.py deleted file mode 100644 index 7374c3af..00000000 --- a/examples/persona/persona.py +++ /dev/null @@ -1,55 +0,0 @@ -from flask import Flask, render_template, session, request, 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 = resp.json() - 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' diff --git a/examples/persona/static/persona.js b/examples/persona/static/persona.js deleted file mode 100644 index c1fcdb79..00000000 --- a/examples/persona/static/persona.js +++ /dev/null @@ -1,52 +0,0 @@ -$(function() { - /* convert the links into clickable buttons that go to the - persona service */ - $('a.signin').on('click', function() { - navigator.id.request({ - siteName: 'Flask Persona Example' - }); - return false; - }); - - $('a.signout').on('click', function() { - navigator.id.logout(); - return false; - }); - - /* watch persona state changes */ - navigator.id.watch({ - loggedInUser: $CURRENT_USER, - onlogin: function(assertion) { - /* because the login needs to verify the provided assertion - with the persona service which requires an HTTP request, - this could take a bit. To not confuse the user we show - a progress box */ - var box = $('
') - .hide() - .text('Please wait ...') - .appendTo('body') - .fadeIn('fast'); - $.ajax({ - type: 'POST', - url: $URL_ROOT + '_auth/login', - data: {assertion: assertion}, - success: function(res, status, xhr) { window.location.reload(); }, - error: function(xhr, status, err) { - box.remove(); - navigator.id.logout(); - alert('Login failure: ' + err); - } - }); - }, - onlogout: function() { - $.ajax({ - type: 'POST', - url: $URL_ROOT + '_auth/logout', - success: function(res, status, xhr) { window.location.reload(); }, - error: function(xhr, status, err) { - alert('Logout failure: ' + err); - } - }); - } - }); -}); diff --git a/examples/persona/static/spinner.png b/examples/persona/static/spinner.png deleted file mode 100644 index c9cd835849676056e750dcc08161f41b7aa7c13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31201 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 a$v<*uh;o0K<$f#pRPSrvt5LFg`Tqb(kboKh diff --git a/examples/persona/static/style.css b/examples/persona/static/style.css deleted file mode 100644 index 6f0c5f15..00000000 --- a/examples/persona/static/style.css +++ /dev/null @@ -1,39 +0,0 @@ -html { - background: #eee; -} - -body { - font-family: 'Verdana', sans-serif; - font-size: 15px; - margin: 30px auto; - width: 720px; - background: white; - padding: 30px; -} - -h1 { - margin: 0; -} - -h1, h2, a { - color: #d00; -} - -div.authbar { - background: #eee; - padding: 0 15px; - margin: 10px -15px; - line-height: 25px; - height: 25px; - vertical-align: middle; -} - -div.signinprogress { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.8) url(spinner.png) center center no-repeat; - font-size: 0; -} diff --git a/examples/persona/templates/index.html b/examples/persona/templates/index.html deleted file mode 100644 index bcccdfc1..00000000 --- a/examples/persona/templates/index.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Welcome{% endblock %} -{% block body %} -

Welcome

-

- This is a small example application that shows how to integrate - Mozilla's persona signin service into a Flask application. -

- The advantage of persona over your own login system is that the - password is managed outside of your application and you get - a verified mail address as primary identifier for your user. -

- In this example nothing is actually stored on the server, it - just takes over the email address from the persona verifier - and stores it in a session. - {% if g.user %} -

- You are now logged in as {{ g.user }} - {% else %} -

- To sign in click the sign in button above. - {% endif %} -{% endblock %} diff --git a/examples/persona/templates/layout.html b/examples/persona/templates/layout.html deleted file mode 100644 index 3fe46620..00000000 --- a/examples/persona/templates/layout.html +++ /dev/null @@ -1,27 +0,0 @@ - -{% block title %}{% endblock %} | Flask Persona Example - - - - - - -

-

Mozilla Persona Example

-
- {% if g.user %} - Signed in as {{ g.user }} - (Sign out) - {% else %} - Not signed in. - {% endif %} -
-
-{% block body %}{% endblock %}