http://redfoot.net/3.0/code#python,
import md5
FOAF = redfoot.namespace("http://xmlns.com/foaf/0.1/")
SESSION = redfoot.namespace("http://redfoot.net/3.0/session#")
return_uri = URIRef(request.parameters.get("return_uri", "%s/" % request.host))
register_uri = URIRef(request.parameters.get("register_uri", "%s/register/" % request.host))
username = request.parameters.get("username", None)
password = request.parameters.get("password", None)
verify = request.parameters.get("verify", None)
invitation = URIRef(request.parameters.get("invitation", None))
from rdflib.Namespace import Namespace
USER = Namespace("%s/user#" % request.host)
def register():
request.create_session()
sid = request.session_id
assert sid
context = redfoot.get_context(redfoot.context_id(sid))
context.remove((sid, SESSION.message, None))
users_context = redfoot.get_context(redfoot.context_id("%s#users" % request.host))
if invitation is None or (invitation, RDF.type, USER.Invitation) not in redfoot:
context.add((sid, SESSION.message, Literal("No invitation found")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
if (None, USER.invitation, invitation) in redfoot: # if already associated with a user
context.add((sid, SESSION.message, Literal("Sorry, invitation already accepted.")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
uid = redfoot.value(invitation, FOAF.mbox)
if uid is None:
context.add((sid, SESSION.message, Literal("Sorry, invitation missing a FOAF.mbox")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
if (uid, SESSION.hexdigest, None) in redfoot:
context.add((sid, SESSION.message, Literal("User already exists.")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
if not username:
context.add((sid, SESSION.message, Literal("No username entered.")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
# TODO: check username is not in user
if password==verify:
hexdigest = Literal(md5.new(password).hexdigest())
redfoot.remove((sid, SESSION.authenticated, None))
redfoot.remove((sid, SESSION.uid, None))
context.add((sid, SESSION.authenticated, Literal("True")))
context.add((sid, SESSION.uid, uid))
users_context.add((uid, RDFS.label, Literal(username)))
users_context.add((uid, RDF.type, URIRef("#User", base=request.host)))
users_context.add((uid, SESSION.hexdigest, hexdigest))
#users_context.add((uid, DC_created, Literal("%s" % time(), datatype=URIRef(REDFOOT.seconds_since_epoch))))
users_context.add((uid, USER.invitation, invitation))
response.setStatus(302, 'found')
response.setHeader('Location', return_uri)
return
else:
context.add((sid, SESSION.message, Literal("password and verify mismatch.")))
response.setStatus(302, 'found')
response.setHeader('Location', register_uri)
return
if request.method=='POST':
register()
else:
pass # TODO
Comments regarding http://redfoot.net/3.0/aspects/auth_invite/register_process
Login to submit a comment.