| ... |
... |
@@ -21,6 +21,7 @@ from nbxmpp.protocol import NS_REGISTER |
|
21
|
21
|
from nbxmpp.protocol import Iq
|
|
22
|
22
|
from nbxmpp.protocol import isResultNode
|
|
23
|
23
|
from nbxmpp.structs import CommonResult
|
|
|
24
|
+from nbxmpp.structs import CommonError
|
|
24
|
25
|
from nbxmpp.structs import RegisterData
|
|
25
|
26
|
from nbxmpp.structs import ChangePasswordResult
|
|
26
|
27
|
from nbxmpp.util import call_on_response
|
| ... |
... |
@@ -63,12 +64,43 @@ class Register(BaseModule): |
|
63
|
64
|
|
|
64
|
65
|
instructions = query.getTagData('instructions') or None
|
|
65
|
66
|
|
|
66
|
|
- return RegisterData(instructions=instructions,
|
|
|
67
|
+ data = RegisterData(instructions=instructions,
|
|
67
|
68
|
form=self._parse_form(stanza),
|
|
68
|
69
|
fields_form=self._parse_fields_form(query),
|
|
69
|
70
|
oob_url=self._parse_oob_url(query),
|
|
70
|
71
|
bob_data=parse_bob_data(query))
|
|
71
|
72
|
|
|
|
73
|
+ if (data.form is None and
|
|
|
74
|
+ data.fields_form is None and
|
|
|
75
|
+ data.oob_url is None):
|
|
|
76
|
+ return raise_error(self._log.info, stanza, 'stanza-malformed')
|
|
|
77
|
+ return data
|
|
|
78
|
+
|
|
|
79
|
+ @call_on_response('_on_submit_result')
|
|
|
80
|
+ def submit_register_form(self, form):
|
|
|
81
|
+ iq = Iq('set', NS_REGISTER, to=self._client.domain)
|
|
|
82
|
+ iq.setQueryPayload(form)
|
|
|
83
|
+ return iq
|
|
|
84
|
+
|
|
|
85
|
+ @callback
|
|
|
86
|
+ def _on_submit_result(self, stanza):
|
|
|
87
|
+ if isResultNode(stanza):
|
|
|
88
|
+ return CommonResult(jid=stanza.getFrom())
|
|
|
89
|
+
|
|
|
90
|
+ query = stanza.getTag('query', namespace=NS_REGISTER)
|
|
|
91
|
+ if query is None:
|
|
|
92
|
+ return RegisterError(stanza, None)
|
|
|
93
|
+
|
|
|
94
|
+ instructions = query.getTagData('instructions') or None
|
|
|
95
|
+
|
|
|
96
|
+ data = RegisterData(instructions=instructions,
|
|
|
97
|
+ form=self._parse_form(stanza),
|
|
|
98
|
+ fields_form=self._parse_fields_form(query),
|
|
|
99
|
+ oob_url=self._parse_oob_url(query),
|
|
|
100
|
+ bob_data=parse_bob_data(query))
|
|
|
101
|
+
|
|
|
102
|
+ return RegisterError(stanza, data)
|
|
|
103
|
+
|
|
72
|
104
|
@callback
|
|
73
|
105
|
def _default_response(self, stanza):
|
|
74
|
106
|
if not isResultNode(stanza):
|
| ... |
... |
@@ -83,7 +115,8 @@ class Register(BaseModule): |
|
83
|
115
|
return None
|
|
84
|
116
|
|
|
85
|
117
|
def _parse_form(self, stanza):
|
|
86
|
|
- form = stanza.getQuery().getTag('x', namespace=NS_DATA)
|
|
|
118
|
+ query = stanza.getTag('query', namespace=NS_REGISTER)
|
|
|
119
|
+ form = query.getTag('x', namespace=NS_DATA)
|
|
87
|
120
|
if form is None:
|
|
88
|
121
|
return None
|
|
89
|
122
|
|
| ... |
... |
@@ -150,3 +183,12 @@ class Register(BaseModule): |
|
150
|
183
|
iq = Iq('set', NS_REGISTER, to=domain)
|
|
151
|
184
|
iq.setQueryPayload(form)
|
|
152
|
185
|
return iq
|
|
|
186
|
+
|
|
|
187
|
+
|
|
|
188
|
+class RegisterError(CommonError):
|
|
|
189
|
+ def __init__(self, stanza, data):
|
|
|
190
|
+ CommonError.__init__(self, stanza)
|
|
|
191
|
+ self._data = data
|
|
|
192
|
+
|
|
|
193
|
+ def get_data(self):
|
|
|
194
|
+ return self._data
|