Greenhand
Greenhand

Reputation: 681

xmpppy create user account

I have searched about how to create Openfire account in Python and found the following answer.

I tried given by Joe Hildebrand and run the code at the machine running Openfire 3.8.1 with

python register.py foo@localhost bar

to create an account.

However, I get "Error!" message.

Is there anything I missed?

Edit
After deleting the , debug[] and trying again, I got the following message:

Invalid debugflag given: always  
Invalid debugflag given: nodebuilder  
DEBUG:  
DEBUG: Debug created for /usr/local/lib/python2.7/dist-packages/xmpppy-0.5.0rc1-py2.7.egg/xmpp/client.py  
DEBUG:  flags defined: always,nodebuilder  
DEBUG: socket       start Plugging <xmpp.transports.TCPsocket instance at 0x19991b8> into <xmpp.client.Client instance at 0x1988fc8>  
DEBUG: socket       warn  An error occurred while looking up _xmpp-client._tcp.localhost  
DEBUG: socket       start Successfully connected to remote host ('localhost', 5222)  
DEBUG: dispatcher   start Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> into <xmpp.client.Client instance at 0x1988fc8>  
DEBUG: dispatcher   info  Registering namespace "unknown"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)  
DEBUG: dispatcher   info  Registering namespace "http://etherx.jabber.org/streams"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   info  Registering namespace "jabber:client"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)  
DEBUG: dispatcher   info  Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x199b2d8>> for "error" type-> ns->(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   warn  Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: socket       sent  <?xml version='1.0'?>  
  <stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >  
DEBUG: socket       got   <?xml version='1.0' encoding='UTF-8'?>  
  <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">  
DEBUG: socket       got   <stream:features>  
  <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls">  
  </starttls>  
  <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">  
  <mechanism>DIGEST-MD5</mechanism>  
  <mechanism>PLAIN</mechanism>  
  <mechanism>ANONYMOUS</mechanism>  
  <mechanism>CRAM-MD5</mechanism>  
  </mechanisms>  
  <compression xmlns="http://jabber.org/features/compress">  
  <method>zlib</method>  
  </compression>  
  <auth xmlns="http://jabber.org/features/iq-auth"/>  
  <register xmlns="http://jabber.org/features/iq-register"/>  
  </stream:features>  
DEBUG: dispatcher   warn  Unknown stanza: features  
DEBUG: dispatcher   ok    Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-tls', u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None  
DEBUG: tls          start Plugging <xmpp.transports.TLS instance at 0x199b908> into <xmpp.client.Client instance at 0x1988fc8>  
DEBUG: tls          ok    TLS supported by remote server. Requesting TLS start.  
DEBUG: dispatcher   info  Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "proceed" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: dispatcher   warn  Registering namespace "urn:ietf:params:xml:ns:xmpp-tls"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: dispatcher   warn  Registering protocol "proceed" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: dispatcher   info  Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "failure" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: dispatcher   warn  Registering protocol "failure" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)  
DEBUG: socket       sent  <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>  
DEBUG: socket       got   <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>  
DEBUG: dispatcher   ok    Got urn:ietf:params:xml:ns:xmpp-tls/proceed stanza  
DEBUG: dispatcher   ok    Dispatching proceed stanza with type-> props->[] id->None  
DEBUG: tls          ok    Got starttls proceed response. Switching to TLS/SSL...  
DEBUG: dispatcher   stop  Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> out of <xmpp.client.Client instance at 0x1988fc8>.  
DEBUG: dispatcher   start Plugging <xmpp.dispatcher.Dispatcher instance at 0x19a4560> into <xmpp.client.Client instance at 0x1988fc8>  
DEBUG: dispatcher   info  Registering namespace "unknown"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)  
DEBUG: dispatcher   info  Registering namespace "http://etherx.jabber.org/streams"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   info  Registering namespace "jabber:client"  
DEBUG: dispatcher   info  Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)  
DEBUG: dispatcher   info  Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)  
DEBUG: dispatcher   info  Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x19a4560>> for "error" type-> ns->(http://etherx.jabber.org/streams)  
DEBUG: dispatcher   warn  Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)  
DEBUG: socket       sent  <?xml version='1.0'?>  
  <stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >  
DEBUG: socket       sent  <iq to="localhost" type="get" id="1">  
  <query xmlns="jabber:iq:register" />  
  </iq>  
DEBUG: dispatcher   wait  Waiting for ID:1 with timeout 25...  
DEBUG: socket       got   <?xml version='1.0' encoding='UTF-8'?>  
  <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">  
  <stream:features>  
  <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">  
  <mechanism>DIGEST-MD5</mechanism>  
  <mechanism>PLAIN</mechanism>  
  <mechanism>ANONYMOUS</mechanism>  
  <mechanism>CRAM-MD5</mechanism>  
  </mechanisms>  
  <compression xmlns="http://jabber.org/features/compress">  
  <method>zlib</method>  
  </compression>  
  <auth xmlns="http://jabber.org/features/iq-auth"/>  
  <register xmlns="http://jabber.org/features/iq-register"/>  
  </stream:features>  
DEBUG: dispatcher   warn  Unknown stanza: features  
DEBUG: dispatcher   ok    Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None  
DEBUG: socket       got   <iq type="error" id="1" from="localhost" to="mymachine/1724a327">  
  <query xmlns="jabber:iq:register"/>  
  <error code="400" type="modify">  
  <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>  
  </error>  
  </iq>  
DEBUG: dispatcher   ok    Got jabber:client/iq stanza  
DEBUG: dispatcher   ok    Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->1  
DEBUG: dispatcher   ok    Expected stanza arrived!  
DEBUG: socket       sent  <iq to="localhost" type="set" id="2">  
  <query xmlns="jabber:iq:register">  
  <username>foo</username>  
  <password>bar</password>  
  </query>  
  </iq>
DEBUG: dispatcher   wait  Waiting for ID:2 with timeout 25...  
DEBUG: socket       got   <iq type="error" id="2" from="localhost" to="mymachine/1724a327">  
  <query xmlns="jabber:iq:register">  
  <username>foo</username>  
  <password>bar</password>  
  </query>  
  <error code="400" type="modify">  
  <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>  
  </error>  
  </iq>  
DEBUG: dispatcher   ok    Got jabber:client/iq stanza  
DEBUG: dispatcher   ok    Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->2  
DEBUG: dispatcher   ok    Expected stanza arrived!  
Error!  

Upvotes: 0

Views: 1312

Answers (1)

Joe Hildebrand
Joe Hildebrand

Reputation: 10414

The most common errors, assuming you're getting connected, is that the user already exists, or that the server doesn't support registration.

However, your error trace above show you getting an error 400, not a 403 or 409. 403 would mean that registration was turned off, and 409 would mean that the user already exists.

I was able to replicate your problem with OpenFire 3.8.1 by sending to an invalid JID. When you configured OpenFire, you specify a domain. That domain MUST be in the JID you specify on the command line to the Python script. For example, I specified "localhost" when configuring. When I used "foo@mymachine" instead of "foo@localhost", I got the 400 error. If you need the domain to be different from the machine name (quite common), then either use a DNS SRV record (see RFC 6120, section 3.2), or change the Python code so that this line:

cli=xmpp.Client(jid.getDomain())

Looks like this:

cli=xmpp.Client("hostname")

The latter is a quick hack, but should get you up and running.

Upvotes: 1

Related Questions