PylonsHQ.

Chairos
Aug 7, 2007 3:06:49 AM

new openid login controller

Language: Python
Tags: openid
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# This requires python-openid 2.0.1 (or greater, I guess)
from turnthepage.lib.base import *
from openid.consumer.consumer import Consumer, SUCCESS, FAILURE, DiscoveryFailure

class LoginController(BaseController):
    def __before__(self):
        self.openid_session = session.get("openid_session", {})
            
    @dispatch_on(POST="login_POST")
    def login(self):
        return render_response('/login/form.mako')
    def login_POST(self):
        self.consumer = Consumer(self.openid_session, g.openid_store)
        openid = request.params.get('openid', None)
        if openid is None:
            return render_response('/login/form.mako')
        try:
            authrequest = self.consumer.begin(openid)
        except DiscoveryFailure, e:
            return Response("hello world")
        redirecturl = authrequest.redirectURL(h.url_for('front', qualified=True), return_to=h.url_for('verified', qualified=True), immediate=False)
        session['openid_session'] = self.openid_session
        session.save()
        return redirect_to(redirecturl)
    def verified(self):
        self.consumer = Consumer(self.openid_session, g.openid_store)
        info = self.consumer.complete(request.params, h.url_for('verified', qualified=True))
        if info.status == SUCCESS:
            user = model.User.get(info.identity_url)
            if user is None:
                user = model.User(info.identity_url)
                user.flush()
            user.updatelastlogin()
            user.flush()
            del session['openid_session']
            session['openid'] = str(user.openid)
            session.save()
            return redirect_to('front')
        else:
            
            raise Exception
        
    @dispatch_on(POST="logout_POST")
    def logout(self):
        return render_response('/login/logout.mako')
    def logout_POST(self):
        del session['openid']
        session.save()
        return redirect_to('front')

Download

Comments (0)

You must login before you can comment.

Powered by Pylons - Contact Administrators