reverted rpx_account for backward compatibility and added janrain_account for the new engage.js api
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.9.5-trunk+timestamp.2014.04.07.12.15.01
|
Version 2.9.5-trunk+timestamp.2014.04.15.10.14.45
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
||||||
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
||||||
{{if rows:}}
|
{{if rows:}}
|
||||||
<div style="overflow: auto;" width="80%">
|
<div style="overflow:auto; width:80%;">
|
||||||
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
||||||
{{upload=URL('download',args=request.args[0])}}
|
{{upload=URL('download',args=request.args[0])}}
|
||||||
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
||||||
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
||||||
{{if rows:}}
|
{{if rows:}}
|
||||||
<div style="overflow: auto;" width="80%">
|
<div style="overflow:auto; width:80%;">
|
||||||
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
||||||
{{upload=URL('download',args=request.args[0])}}
|
{{upload=URL('download',args=request.args[0])}}
|
||||||
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ auth.settings.reset_password_requires_verification = True
|
|||||||
|
|
||||||
## if you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.
|
## if you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.
|
||||||
## register with janrain.com, write your domain:api_key in private/janrain.key
|
## register with janrain.com, write your domain:api_key in private/janrain.key
|
||||||
from gluon.contrib.login_methods.rpx_account import use_janrain
|
from gluon.contrib.login_methods.janrain_account import use_janrain
|
||||||
use_janrain(auth, filename='private/janrain.key')
|
use_janrain(auth, filename='private/janrain.key')
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
{{if start>0:}}{{=A(T('previous %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start-step)),_class="btn")}}{{pass}}
|
||||||
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
{{if stop<nrows:}}{{=A(T('next %s rows') % step,_href=URL('select',args=request.args[0],vars=dict(start=start+step)),_class="btn")}}{{pass}}
|
||||||
{{if rows:}}
|
{{if rows:}}
|
||||||
<div style="overflow: auto;" width="80%">
|
<div style="overflow:auto; width:80%;">
|
||||||
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
{{linkto = lambda f, t, r: URL('update', args=[request.args[0], r, f]) if f else "#"}}
|
||||||
{{upload=URL('download',args=request.args[0])}}
|
{{upload=URL('download',args=request.args[0])}}
|
||||||
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
||||||
|
|||||||
@@ -0,0 +1,138 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# coding: utf8
|
||||||
|
|
||||||
|
"""
|
||||||
|
RPX Authentication for web2py
|
||||||
|
Developed by Nathan Freeze (Copyright © 2009)
|
||||||
|
Email <nathan@freezable.com>
|
||||||
|
Modified by Massimo Di Pierro
|
||||||
|
|
||||||
|
This file contains code to allow using RPXNow.com (now Jainrain.com)
|
||||||
|
services with web2py
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import urllib
|
||||||
|
from gluon import *
|
||||||
|
from gluon.tools import fetch
|
||||||
|
from gluon.storage import Storage
|
||||||
|
import gluon.contrib.simplejson as json
|
||||||
|
|
||||||
|
|
||||||
|
class RPXAccount(object):
|
||||||
|
|
||||||
|
"""
|
||||||
|
from gluon.contrib.login_methods.rpx_account import RPXAccount
|
||||||
|
auth.settings.actions_disabled=['register','change_password',
|
||||||
|
'request_reset_password']
|
||||||
|
auth.settings.login_form = RPXAccount(request,
|
||||||
|
api_key="...",
|
||||||
|
domain="...",
|
||||||
|
url = "http://localhost:8000/%s/default/user/login" % request.application)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
request,
|
||||||
|
api_key="",
|
||||||
|
domain="",
|
||||||
|
url="",
|
||||||
|
embed=True,
|
||||||
|
auth_url="https://rpxnow.com/api/v2/auth_info",
|
||||||
|
language="en",
|
||||||
|
prompt='rpx',
|
||||||
|
on_login_failure=None,
|
||||||
|
):
|
||||||
|
|
||||||
|
self.request = request
|
||||||
|
self.api_key = api_key
|
||||||
|
self.embed = embed
|
||||||
|
self.auth_url = auth_url
|
||||||
|
self.domain = domain
|
||||||
|
self.token_url = url
|
||||||
|
self.language = language
|
||||||
|
self.profile = None
|
||||||
|
self.prompt = prompt
|
||||||
|
self.on_login_failure = on_login_failure
|
||||||
|
self.mappings = Storage()
|
||||||
|
|
||||||
|
dn = {'givenName': '', 'familyName': ''}
|
||||||
|
self.mappings.Facebook = lambda profile, dn=dn:\
|
||||||
|
dict(registration_id=profile.get("identifier", ""),
|
||||||
|
username=profile.get("preferredUsername", ""),
|
||||||
|
email=profile.get("email", ""),
|
||||||
|
first_name=profile.get("name", dn).get("givenName", ""),
|
||||||
|
last_name=profile.get("name", dn).get("familyName", ""))
|
||||||
|
self.mappings.Google = lambda profile, dn=dn:\
|
||||||
|
dict(registration_id=profile.get("identifier", ""),
|
||||||
|
username=profile.get("preferredUsername", ""),
|
||||||
|
email=profile.get("email", ""),
|
||||||
|
first_name=profile.get("name", dn).get("givenName", ""),
|
||||||
|
last_name=profile.get("name", dn).get("familyName", ""))
|
||||||
|
self.mappings.default = lambda profile:\
|
||||||
|
dict(registration_id=profile.get("identifier", ""),
|
||||||
|
username=profile.get("preferredUsername", ""),
|
||||||
|
email=profile.get("email", ""),
|
||||||
|
first_name=profile.get("preferredUsername", ""),
|
||||||
|
last_name='')
|
||||||
|
|
||||||
|
def get_user(self):
|
||||||
|
request = self.request
|
||||||
|
if request.vars.token:
|
||||||
|
user = Storage()
|
||||||
|
data = urllib.urlencode(
|
||||||
|
dict(apiKey=self.api_key, token=request.vars.token))
|
||||||
|
auth_info_json = fetch(self.auth_url + '?' + data)
|
||||||
|
auth_info = json.loads(auth_info_json)
|
||||||
|
|
||||||
|
if auth_info['stat'] == 'ok':
|
||||||
|
self.profile = auth_info['profile']
|
||||||
|
provider = re.sub('[^\w\-]', '', self.profile['providerName'])
|
||||||
|
user = self.mappings.get(
|
||||||
|
provider, self.mappings.default)(self.profile)
|
||||||
|
return user
|
||||||
|
elif self.on_login_failure:
|
||||||
|
redirect(self.on_login_failure)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def login_form(self):
|
||||||
|
request = self.request
|
||||||
|
args = request.args
|
||||||
|
rpxform = """
|
||||||
|
<script type="text/javascript">
|
||||||
|
(function() {
|
||||||
|
if (typeof window.janrain !== 'object') window.janrain = {};
|
||||||
|
if (typeof window.janrain.settings !== 'object') window.janrain.settings = {};
|
||||||
|
janrain.settings.tokenUrl = '%s';
|
||||||
|
function isReady() { janrain.ready = true; };
|
||||||
|
if (document.addEventListener) {
|
||||||
|
document.addEventListener("DOMContentLoaded", isReady, false);
|
||||||
|
} else {
|
||||||
|
window.attachEvent('onload', isReady);
|
||||||
|
}
|
||||||
|
var e = document.createElement('script');
|
||||||
|
e.type = 'text/javascript';
|
||||||
|
e.id = 'janrainAuthWidget';
|
||||||
|
if (document.location.protocol === 'https:') {
|
||||||
|
e.src = 'https://rpxnow.com/js/lib/%s/engage.js';
|
||||||
|
} else {
|
||||||
|
e.src = 'http://widget-cdn.rpxnow.com/js/lib/%s/engage.js';
|
||||||
|
}
|
||||||
|
var s = document.getElementsByTagName('script')[0];
|
||||||
|
s.parentNode.insertBefore(e, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<div id="janrainEngageEmbed"></div>""" % (self.token_url, self.domain, self.domain)
|
||||||
|
return XML(rpxform)
|
||||||
|
|
||||||
|
def use_janrain(auth, filename='private/janrain.key', **kwargs):
|
||||||
|
path = os.path.join(current.request.folder, filename)
|
||||||
|
if os.path.exists(path):
|
||||||
|
request = current.request
|
||||||
|
domain, key = open(path, 'r').read().strip().split(':')
|
||||||
|
host = current.request.env.http_host
|
||||||
|
url = URL('default', 'user', args='login', scheme=True)
|
||||||
|
auth.settings.actions_disabled = \
|
||||||
|
['register', 'change_password', 'request_reset_password']
|
||||||
|
auth.settings.login_form = RPXAccount(
|
||||||
|
request, api_key=key, domain=domain, url=url, **kwargs)
|
||||||
@@ -98,32 +98,27 @@ class RPXAccount(object):
|
|||||||
def login_form(self):
|
def login_form(self):
|
||||||
request = self.request
|
request = self.request
|
||||||
args = request.args
|
args = request.args
|
||||||
rpxform = """
|
if self.embed:
|
||||||
<script type="text/javascript">
|
JANRAIN_URL = \
|
||||||
(function() {
|
"https://%s.rpxnow.com/openid/embed?token_url=%s&language_preference=%s"
|
||||||
if (typeof window.janrain !== 'object') window.janrain = {};
|
rpxform = IFRAME(
|
||||||
if (typeof window.janrain.settings !== 'object') window.janrain.settings = {};
|
_src=JANRAIN_URL % (
|
||||||
janrain.settings.tokenUrl = '%s';
|
self.domain, self.token_url, self.language),
|
||||||
function isReady() { janrain.ready = true; };
|
_scrolling="no",
|
||||||
if (document.addEventListener) {
|
_frameborder="no",
|
||||||
document.addEventListener("DOMContentLoaded", isReady, false);
|
_style="width:400px;height:240px;")
|
||||||
} else {
|
else:
|
||||||
window.attachEvent('onload', isReady);
|
JANRAIN_URL = \
|
||||||
}
|
"https://%s.rpxnow.com/openid/v2/signin?token_url=%s"
|
||||||
var e = document.createElement('script');
|
rpxform = DIV(SCRIPT(_src="https://rpxnow.com/openid/v2/widget",
|
||||||
e.type = 'text/javascript';
|
_type="text/javascript"),
|
||||||
e.id = 'janrainAuthWidget';
|
SCRIPT("RPXNOW.overlay = true;",
|
||||||
if (document.location.protocol === 'https:') {
|
"RPXNOW.language_preference = '%s';" % self.language,
|
||||||
e.src = 'https://rpxnow.com/js/lib/%s/engage.js';
|
"RPXNOW.realm = '%s';" % self.domain,
|
||||||
} else {
|
"RPXNOW.token_url = '%s';" % self.token_url,
|
||||||
e.src = 'http://widget-cdn.rpxnow.com/js/lib/%s/engage.js';
|
"RPXNOW.show();",
|
||||||
}
|
_type="text/javascript"))
|
||||||
var s = document.getElementsByTagName('script')[0];
|
return rpxform
|
||||||
s.parentNode.insertBefore(e, s);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<div id="janrainEngageEmbed"></div>""" % (self.token_url, self.domain, self.domain)
|
|
||||||
return XML(rpxform)
|
|
||||||
|
|
||||||
|
|
||||||
def use_janrain(auth, filename='private/janrain.key', **kwargs):
|
def use_janrain(auth, filename='private/janrain.key', **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user