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: 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