import config, nonce, post from glob import glob import os, sys, time, pickle from UserDict import UserDict for path in glob(config.openid.code): sys.path.insert(0,path) from openid.store import filestore from openid.consumer import consumer try: from openid.yadis.discover import DiscoveryFailure except: from yadis.discover import DiscoveryFailure store = filestore.FileOpenIDStore(config.openid.filestore) def lookup(id, args, returnto = config.openid.returnto): session = {} server = consumer.Consumer(session, store) try: request = server.begin(id) if not args.has_key('name') or args['name']=='anonymous': request.addExtensionArg('sreg','optional','nickname,fullname') except DiscoveryFailure, f: return None sid = nonce.generate(time.time()+300, repr(args)) returnto += '?xid=' + sid session.update(args) nonce.update(sid, pickle.dumps(session)) return request.redirectURL(config.openid.trustroot, returnto) def validate(args): xid = nonce.retrieve(args.get('xid',None)) if not xid: import post return post.post(config.channel.link) session = pickle.loads(xid) server = consumer.Consumer(session, store) response = server.complete(args) if response.status == consumer.SUCCESS: session['url'] = response.identity_url if session['url'] == 'http://intertwingly.net/public/yadis.xrdf': session['url'] = 'http://intertwingly.net/blog/' from post import sanitize, writeComment, cleanup from xml.sax.saxutils import escape from atomef import unescape if not session.has_key('name') or session['name']=='anonymous': extension = response.extensionResponse('sreg',True) if extension.has_key('nickname'): session['name'] = extension['nickname'] if extension.has_key('fullname'): session['name'] = extension['fullname'] if session['url'].startswith('='): session['url'] = 'http://xri.net/' + session['url'] if not [tok for tok in session['url'].split('.') if not tok.isalnum()]: session['url'] = 'http://' + session['url'] + '/' title = sanitize(unescape(session['title'])) body = sanitize(session['comment']).strip() body = body.replace(' '

': body += '\n
\n
' body += '\nPosted by
%s' % ( escape(session['url']), escape(response.endpoint.server_url), escape(session['name'])) file = writeComment(session['parent'],title,body) print 'Status: 302 Found\r\n%s\r' % str(cookie(session['url'])) from entry import post print 'Location: %s\r\n\r\nRedirecting' % ( config.channel.link + post(session['parent']).link() + '?#c%d' % os.stat(file).st_mtime) try: cleanup([]) store.cleanup() except IOError: pass # impatient spammers... except SystemExit: pass # begon deamons (see daemonize.py) else: session['warn'] = 'openid' import post post.fs = UserDict(session) setattr(post.fs,'list',session.items()) setattr(post.fs,'getvalue',session.get) post.post(config.channel.link) def cookie(id): import Cookie cookie = Cookie.SimpleCookie() if type(id) == unicode: id=id.encode('utf-8') cookie['openid'] = id expire = time.gmtime(time.time() + 365 * 24 * 60 * 60) expire_date = time.strftime('%a %d-%b-%Y %H:%M:%S GMT', expire) cookie['openid']['expires'] = expire_date cookie['openid']['path'] = '/' cookie['openid']['domain'] = config.channel.link.split('/')[2] return cookie