diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2011-05-02 01:13:07 -0400 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2011-05-02 01:13:07 -0400 |
| commit | 1bf4b8e5506c1b76fa453e1ae645410a09934c76 (patch) | |
| tree | 7f7de1e8cd2f581adce05ce5ea3d7243f25dcf65 | |
| parent | cc1baf75ab6967f567917ae3486c0275a64937d5 (diff) | |
| download | alias-1bf4b8e5506c1b76fa453e1ae645410a09934c76.tar.gz | |
In-band registration is almost functional.
-still need to hook up the data with the backend
-and check all the error cases
| -rw-r--r-- | server/component.py | 2 | ||||
| -rw-r--r-- | server/object.py | 2 | ||||
| -rw-r--r-- | server/server.py | 2 | ||||
| -rw-r--r-- | server/xep_0077.py | 71 |
4 files changed, 31 insertions, 46 deletions
diff --git a/server/component.py b/server/component.py index 198b159..f7fbb25 100644 --- a/server/component.py +++ b/server/component.py @@ -10,7 +10,7 @@ class ObjectComponent(ComponentXMPP): def __init__(self, jid, secret, server, port, root): ComponentXMPP.__init__(self, jid, secret, server, port) self.register_plugin('xep_0030') - self.register_plugin('xep_0077', pconfig = {'root': root}) + self.register_plugin('xep_0077', module="xep_0077") self.plugin['xep_0077'] self.register_plugin("AliasPlugin", module = "alias_plugin", pconfig = {'root': root}) self.add_event_handler("session_start", self.start) diff --git a/server/object.py b/server/object.py index 7a2e46f..5773f4f 100644 --- a/server/object.py +++ b/server/object.py @@ -98,7 +98,7 @@ class ObjectReader(Object): pass class ObjectWriter(Object): - def __init__(self, owner, hash = None, content): + def __init__(self, owner, hash = None): Object.__init__(self, owner, hash) if not os.path.exists(self.owner_path): logger.error("User {} is not registered".format(self.owner)) diff --git a/server/server.py b/server/server.py index 30925e1..63ca778 100644 --- a/server/server.py +++ b/server/server.py @@ -4,7 +4,7 @@ from argparse import ArgumentParser from config import config import daemon import daemon.pidfile -from server import ObjectComponent +from component import ObjectComponent import os.path import sys diff --git a/server/xep_0077.py b/server/xep_0077.py index b07105b..8590bb4 100644 --- a/server/xep_0077.py +++ b/server/xep_0077.py @@ -12,14 +12,15 @@ from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin from sleekxmpp import Iq from user import UserHandler from config import config +from sleekxmpp.plugins.xep_0004 import Form class Registration(ElementBase): namespace = 'jabber:iq:register' name = 'query' plugin_attrib = 'register' - interfaces = set(('pubkey', 'privkey', 'salt' - 'registered', 'remove', 'instructions')) + interfaces = set(('registered', 'remove', 'instructions', 'form')) sub_interfaces = interfaces + subitem = (Form,) def getRegistered(self): present = self.xml.find('{%s}registered' % self.namespace) @@ -45,29 +46,15 @@ class Registration(ElementBase): itemXML = ET.Element('{%s}%s' % (self.namespace, name)) self.xml.append(itemXML) + def addForm(self): + aliasform = Form(None,self) + aliasform.addField(ftype="hidden",var="FORM_TYPE",value="jabber:iq:register") + aliasform.addField(var="pubkey",ftype="text-single", label="Public Key", required=True) + aliasform.addField(var="privkey",ftype="text-single", label="Private Key", required=True) + aliasform.addField(var="salt",ftype="text-single", label="Salt", required=True) -class UserStore(object): - def __init__(self): - self.users = {} - - def __getitem__(self, jid): - return self.users.get(jid, None) - - def register(self, jid, registration): - username = registration['username'] - - def filter_usernames(user): - return user != jid and self.users[user]['username'] == username - - conflicts = filter(filter_usernames, self.users.keys()) - if conflicts: - return False - - self.users[jid] = registration - return True - - def unregister(self, jid): - del self.users[jid] + def getForm(self): + self.xml.findall('{jabber:x:data}field') class xep_0077(base_plugin): """ @@ -78,8 +65,9 @@ class xep_0077(base_plugin): self.description = "In-Band Registration" self.xep = "0077" self.form_fields = () - self.form_instructions = "" - self.backend = UserHandler(config.root) + self.form_instructions = "Please provide the following information to register\ + an alias account" + self.backend = None self.xmpp.registerHandler( Callback('In-Band Registration', @@ -103,22 +91,26 @@ class xep_0077(base_plugin): iq.reply().send() return + aliasforms = iq['register']['substanzas'] + for aliasform in aliasforms: + aliasdict = aliasform.getValues() + for field in self.form_fields: - if not iq['register'][field]: + if not aliasdict[field]: # Incomplete Registration self._sendError(iq, '406', 'modify', 'not-acceptable', "Please fill in all fields.") return - if self.backend.register(iq['from'].bare, iq['register']): + #if self.backend.register(iq['from'].bare, iq['register']): # Successful registration #self.xmpp.event('registered_user', iq) - iq.reply().setPayload(iq['register'].xml) - iq.send() - else: + iq.reply().setPayload(iq['register'].xml) + iq.send() + #else: # Conflicting registration - self._sendError(iq, '409', 'cancel', 'conflict', - "That username is already taken.") + # self._sendError(iq, '409', 'cancel', 'conflict', +# "That username is already taken.") def setForm(self, *fields): self.form_fields = fields @@ -126,9 +118,9 @@ class xep_0077(base_plugin): def setInstructions(self, instructions): self.form_instructions = instructions - def sendRegistrationForm(self, iq, userHandler): + def sendRegistrationForm(self, iq, userData=None): reg = iq['register'] - if user + if userData is None: userData = {} else: reg['registered'] = True @@ -136,14 +128,7 @@ class xep_0077(base_plugin): if self.form_instructions: reg['instructions'] = self.form_instructions - for field in self.form_fields: - data = userData.get(field, '') - if data: - # Add field with existing data - reg[field] = data - else: - # Add a blank field - reg.addField(field) + reg.addForm() iq.reply().setPayload(reg.xml) iq.send() |
