aboutsummaryrefslogtreecommitdiffstats
path: root/server/xep_0077.py
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2011-05-03 03:03:27 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2011-05-03 03:03:27 -0400
commit76ae36901e9fb7bd9cc07162afd05ba41242fc1c (patch)
tree3d18338c0527f523293d214d3fae08ab09147947 /server/xep_0077.py
parent1bf4b8e5506c1b76fa453e1ae645410a09934c76 (diff)
downloadalias-76ae36901e9fb7bd9cc07162afd05ba41242fc1c.tar.gz
More fixes for the alias registration.
- registration info saved on the hard drive - doesn't return registration info for an already registered user
Diffstat (limited to 'server/xep_0077.py')
-rw-r--r--server/xep_0077.py90
1 files changed, 51 insertions, 39 deletions
diff --git a/server/xep_0077.py b/server/xep_0077.py
index 8590bb4..6018c55 100644
--- a/server/xep_0077.py
+++ b/server/xep_0077.py
@@ -10,7 +10,7 @@ from sleekxmpp.xmlstream.handler.callback import Callback
from sleekxmpp.xmlstream.matcher.xpath import MatchXPath
from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin
from sleekxmpp import Iq
-from user import UserHandler
+from user import User
from config import config
from sleekxmpp.plugins.xep_0004 import Form
@@ -18,43 +18,42 @@ class Registration(ElementBase):
namespace = 'jabber:iq:register'
name = 'query'
plugin_attrib = 'register'
- interfaces = set(('registered', 'remove', 'instructions', 'form'))
+ interfaces = set(('registered', 'remove', 'instructions'))
sub_interfaces = interfaces
subitem = (Form,)
- def getRegistered(self):
+ def get_registered(self):
present = self.xml.find('{%s}registered' % self.namespace)
return present is not None
- def getRemove(self):
+ def get_remove(self):
present = self.xml.find('{%s}remove' % self.namespace)
return present is not None
- def setRegistered(self, registered):
+ def set_registered(self, registered):
if registered:
- self.addField('registered')
+ self.add_field('registered')
else:
del self['registered']
- def setRemove(self, remove):
+ def set_remove(self, remove):
if remove:
self.addField('remove')
else:
del self['remove']
- def addField(self, name):
+ def add_field(self, name):
itemXML = ET.Element('{%s}%s' % (self.namespace, name))
self.xml.append(itemXML)
- def addForm(self):
+ def add_form(self, values=None):
aliasform = Form(None,self)
- aliasform.addField(ftype="hidden",var="FORM_TYPE",value="jabber:iq:register")
+ aliasform.addField(ftype="hidden",var="FORM_TYPE",value=self.namespace)
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)
-
- def getForm(self):
- self.xml.findall('{jabber:x:data}field')
+ if values:
+ aliasform.setValues(values)
class xep_0077(base_plugin):
"""
@@ -64,80 +63,93 @@ class xep_0077(base_plugin):
def plugin_init(self):
self.description = "In-Band Registration"
self.xep = "0077"
- self.form_fields = ()
+ self.form_fields = ("privkey", "pubkey", "salt")
self.form_instructions = "Please provide the following information to register\
an alias account"
- self.backend = None
- self.xmpp.registerHandler(
+ self.xmpp.register_handler(
Callback('In-Band Registration',
MatchXPath('{%s}iq/{jabber:iq:register}query' % self.xmpp.default_ns),
- self.__handleRegistration))
+ self.__handle_registration))
register_stanza_plugin(Iq, Registration)
def post_init(self):
base_plugin.post_init(self)
self.xmpp['xep_0030'].add_feature("jabber:iq:register")
- def __handleRegistration(self, iq):
+ def __handle_registration(self, iq):
+ registrant = User(iq['from'].bare)
if iq['type'] == 'get':
# Registration form requested
- self.sendRegistrationForm(iq, self.backend)
+ self.send_registration_form(iq, registrant)
elif iq['type'] == 'set':
if iq['register']['remove']:
# Remove an account
- self.backend.unregister(iq['from'].bare)
- #self.xmpp.event('unregistered_user', iq)
+ registrant.unregister()
+ self.xmpp.event('unregistered_user', iq)
iq.reply().send()
return
aliasforms = iq['register']['substanzas']
for aliasform in aliasforms:
aliasdict = aliasform.getValues()
-
for field in self.form_fields:
if not aliasdict[field]:
# Incomplete Registration
- self._sendError(iq, '406', 'modify', 'not-acceptable',
+ self._send_error(iq, '406', 'modify', 'not-acceptable',
"Please fill in all fields.")
return
- #if self.backend.register(iq['from'].bare, iq['register']):
+ try:
+ print aliasdict
+ registrant.register(aliasdict)
# 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()
+ except:
+ return
+ else:
# Conflicting registration
- # self._sendError(iq, '409', 'cancel', 'conflict',
-# "That username is already taken.")
+ self._send_error(iq, '409', 'cancel', 'conflict',
+ "That username is already taken.")
def setForm(self, *fields):
self.form_fields = fields
- def setInstructions(self, instructions):
+ def set_instructions(self, instructions):
self.form_instructions = instructions
- def sendRegistrationForm(self, iq, userData=None):
+ def send_registration_form(self, iq, registrant):
reg = iq['register']
- if userData is None:
- userData = {}
- else:
- reg['registered'] = True
-
if self.form_instructions:
reg['instructions'] = self.form_instructions
- reg.addForm()
+ if registrant.registered():
+ print "yoyoyo"
+ print registrant.get_registration()
+ reg['registered'] = True
+ reg.add_form(registrant.get_registration())
+ else:
+ reg.add_form()
iq.reply().setPayload(reg.xml)
iq.send()
- def _sendError(self, iq, code, error_type, name, text=''):
+ def _send_error(self, iq, code, error_type, name, text=''):
iq.reply().setPayload(iq['register'].xml)
iq.error()
iq['error']['code'] = code
iq['error']['type'] = error_type
iq['error']['condition'] = name
iq['error']['text'] = text
- iq.send() \ No newline at end of file
+ iq.send()
+
+if __name__=='__main__':
+ test = Registration()
+ test.add_form()
+ test['registered']=True
+ print test
+ #why doesn't this work?
+ form = test.xml.findall('{jabber:x:data}x')
+ print form