djabberd

Generic application to handle https://ejabberd-saas.com/ Remote Data API calls


Keywords
django, ejabberd, python
License
GPL-3.0
Install
pip install djabberd==0.9.6

Documentation

Generic application to handle https://ejabberd-saas.com/ Remote Data API calls

djabberd

For each specific tasks a handler function must be implemented.

Install

pip install djabberd

Quick start

1. Include the django-ejabberd URLconf in your project urls.py like this::

url(r'', include('djabberd.urls'),
# For Django==1.8
url(r'', include('djabberd.urls'), namespace='djabberd')

2. Setup the handler in your Django settings::

DJABBERD_API_HANDLERS='your.module.path'

Based on ejabberd-saas's documentation those endpoints are required(01-Feb-2016):

  1. User management:
    1. Authentication ('/auth')
    2. User exists ('/user')
  2. Roster management:
    1. Retrieve user roster ('/roster')
  3. Archive:
    1. Store ('/archive')
    2. Get ('/archive')

There must be one function for each endpoint that should be implemented like this:

  • user_authentication(username, password):
    • Returns True if authentication is valid
    • Returns False if authentication is not valid
  • user_exists(username):
    • Returns True if user exists
    • Returns False if not(or if it is not active)
  • retrieve_user_roster(username):
    • Returns the roster in JSON format
    • Returns False if user does not exist
  • archive_store(payload)
    • Returns True if message has been stored
    • Returns a string containing an error message if message has not been stored
  • archive_get(username[, peer, after, before, limit, chat_type])
    • Returns the message history in JSON format
    • Returns False in any other case

Formats

  • retrieve_user_roster:

    {"roster": [
        {"username": "CONTACT",
         "subscription": "both",
         "nick": "NICK"},
         ...
      ]}
    
  • archive_store:

    {"username": "USERNAME1",
     "peer": "USERNAME2",
     "xml": "MESSAGE_STANZA",
     "body": "TEXT",
     "timestamp": "TIMESTAMP",
     "direction": "DIRECTION"}
    
  • archive_get:

    {"archive": [{"username": "USERNAME1",
                  "peer": "USERNAME2",
                  "xml": "MESAGE_STANZA",
                  "body": "TEXT",
                  "timestamp": "TIMESTAMP",
                  "direction": "DIRECTION"}, ...]
                  "count" : MESSAGES_NUMBER
    }
    

Considerations

Based on ejabberd-saas's documentation:

  • If XMPP JID is "userid@xmppdomain", just pass "userid"
  • If XMPP JID of USER is "userid@xmppdomain", just pass "xmppdomain"
  • If an exception is raised from your handler it would be treated as a server error
  • Return HTTP 200 for the successful case
  • Return HTTP 401 if authentication fails
  • Return HTTP 401 if it's not the successful case
  • Return HTTP 500 for server errors, this is the Django's default behavior

Running Tests

python setup.py develop
python runtests.py [tests.<tests_module>[.<TestClass>[.<test_method>]]]