Philipp Hörist pushed to branch master at gajim / python-nbxmpp

Commits:

1 changed file:

Changes:

  • nbxmpp/modules/register.py
    ... ... @@ -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