aboutsummaryrefslogtreecommitdiffstats
path: root/server/xep_0077.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/xep_0077.py')
-rw-r--r--server/xep_0077.py71
1 files changed, 28 insertions, 43 deletions
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()