You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
import logging
|
|
from yolanda.lib.base import *
|
|
from openid.consumer.consumer import Consumer, SUCCESS, FAILURE, DiscoveryFailure
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
class AccountController(BaseController):
|
|
|
|
def index(self):
|
|
c.message = {
|
|
'type': 'warning',
|
|
'text': 'Your username will be saved indefinitely.'
|
|
}
|
|
return render('/xhtml/account.mako')
|
|
|
|
def __before__(self):
|
|
self.openid_session = session.get("openid_session", {})
|
|
|
|
# @validate(schema=something, form='login')
|
|
def login(self):
|
|
#FIXME: do not operate in stateless mode - replace store with local
|
|
# openid store (app global) to make login faster with less overhead
|
|
self.consumer = Consumer(self.openid_session, None)
|
|
openid = request.params.get('openid_identifier', None)
|
|
try:
|
|
authrequest = self.consumer.begin(openid)
|
|
except DiscoveryFailure, e:
|
|
# invalid openid
|
|
c.message = {
|
|
'type': 'error',
|
|
'text': 'You were not logged on due to the given OpenID being invalid.'
|
|
}
|
|
return render('/xhtml/account.mako')
|
|
|
|
redirecturl = authrequest.redirectURL(
|
|
h.url_for('',qualified=True),
|
|
return_to=h.url_for('/account/verified',qualified=True),
|
|
immediate=False
|
|
)
|
|
session['openid_session'] = self.openid_session
|
|
session.save()
|
|
return redirect_to(redirecturl)
|
|
|
|
def verified(self):
|
|
#FIXME: do not operate in stateless mode - replace store with local
|
|
# openid store (app global) to make login faster with less overhead
|
|
self.consumer = Consumer(self.openid_session, None)
|
|
info = self.consumer.complete(request.params, (h.url_for('/account/verified', qualified=True)))
|
|
if info.status == SUCCESS:
|
|
session['openid'] = info.identity_url
|
|
session.save()
|
|
session.clear()
|
|
return redirect_to('/index')
|
|
else:
|
|
return "openid auth error"
|
|
|
|
def logout(self):
|
|
session.clear()
|
|
session.save()
|
|
return redirect_to('/index')
|
|
|