Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/python-nbxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/nbxmpp
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2020-03-21 21:29:32 +0300
committerlovetox <philipp@hoerist.com>2020-03-21 21:29:32 +0300
commit5c6e1bd8a790f4cf4434bf6bc0c663706ce87e37 (patch)
tree8619ca70120e07c7dd44f583071a68e838c8a7da /nbxmpp
parentc49599023f219acb07646756f40d30fe77b9a258 (diff)
Register: Add method submit_register_form()
Diffstat (limited to 'nbxmpp')
-rw-r--r--nbxmpp/modules/register.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/nbxmpp/modules/register.py b/nbxmpp/modules/register.py
index be84edb..40da450 100644
--- a/nbxmpp/modules/register.py
+++ b/nbxmpp/modules/register.py
@@ -21,6 +21,7 @@ from nbxmpp.protocol import NS_REGISTER
from nbxmpp.protocol import Iq
from nbxmpp.protocol import isResultNode
from nbxmpp.structs import CommonResult
+from nbxmpp.structs import CommonError
from nbxmpp.structs import RegisterData
from nbxmpp.structs import ChangePasswordResult
from nbxmpp.util import call_on_response
@@ -63,12 +64,43 @@ class Register(BaseModule):
instructions = query.getTagData('instructions') or None
- return RegisterData(instructions=instructions,
+ data = RegisterData(instructions=instructions,
form=self._parse_form(stanza),
fields_form=self._parse_fields_form(query),
oob_url=self._parse_oob_url(query),
bob_data=parse_bob_data(query))
+ if (data.form is None and
+ data.fields_form is None and
+ data.oob_url is None):
+ return raise_error(self._log.info, stanza, 'stanza-malformed')
+ return data
+
+ @call_on_response('_on_submit_result')
+ def submit_register_form(self, form):
+ iq = Iq('set', NS_REGISTER, to=self._client.domain)
+ iq.setQueryPayload(form)
+ return iq
+
+ @callback
+ def _on_submit_result(self, stanza):
+ if isResultNode(stanza):
+ return CommonResult(jid=stanza.getFrom())
+
+ query = stanza.getTag('query', namespace=NS_REGISTER)
+ if query is None:
+ return RegisterError(stanza, None)
+
+ instructions = query.getTagData('instructions') or None
+
+ data = RegisterData(instructions=instructions,
+ form=self._parse_form(stanza),
+ fields_form=self._parse_fields_form(query),
+ oob_url=self._parse_oob_url(query),
+ bob_data=parse_bob_data(query))
+
+ return RegisterError(stanza, data)
+
@callback
def _default_response(self, stanza):
if not isResultNode(stanza):
@@ -83,7 +115,8 @@ class Register(BaseModule):
return None
def _parse_form(self, stanza):
- form = stanza.getQuery().getTag('x', namespace=NS_DATA)
+ query = stanza.getTag('query', namespace=NS_REGISTER)
+ form = query.getTag('x', namespace=NS_DATA)
if form is None:
return None
@@ -150,3 +183,12 @@ class Register(BaseModule):
iq = Iq('set', NS_REGISTER, to=domain)
iq.setQueryPayload(form)
return iq
+
+
+class RegisterError(CommonError):
+ def __init__(self, stanza, data):
+ CommonError.__init__(self, stanza)
+ self._data = data
+
+ def get_data(self):
+ return self._data