XMPP integration for Django app made simple
Project description
XMPP integration for Django app made simple!
Features
ConverseJS web chat integration
surely best available XMPP web client
inspired by TracyWebTech/django-conversejs
Support for MUC auto join
Support for users query
Ejabberd Django authentication using ejabberd_auth management command
inspired by ffalcinelli/django-ejabberd-bridge
Single sign on functionality without storing user’s credentials (requires using ejabberd_auth)
Set avatar using gravatar and vCard during first login
Installation
Install django-xmpp via pip:
pip install django-xmpp
Add xmpp and django_gravatar into INSTALLED_APPS:
INSTALLED_APPS = ( ... 'django_gravatar', 'xmpp', )
Setup most important variables:
XMPP_DOMAIN = 'example.com' XMPP_BOSH_SERVICE_URL = 'https://xmpp.example.com:5280/http-bind'
Optionally setup ConverseJS to suit your needs:
XMPP_CONVERSEJS_SETTINGS = { 'allow_contact_removal': False, 'allow_contact_requests': True, 'auto_subscribe': True, 'allow_logout': False, 'allow_muc': True, 'allow_otr': False, 'allow_registration': False, 'message_carbons': True, 'hide_muc_server': True, 'use_vcards': True, 'animate': True, 'play_sounds': True, 'xhr_user_search': True, 'sounds_path': '%ssounds/' % STATIC_URL, 'visible_toolbar_buttons': { 'call': False, 'clear': False, 'emoticons': True, 'toggle_participants': False, } }
Include xmpp.urls in your urls.py:
urlpatterns = [ ... url(r'^xmpp/', include("xmpp.urls")), ]
Use ConverseJS in your base template:
{% load xmpp_tags %} {% conversejs_initialize %}
Ejabberd Django authentication
Create ejaberd_auth.sh file that will simply call ejabberd_auth management command. Adjust to suit your environment (eg. virtualenv):
#!/bin/bash cd <path_to_your_django_project> python manage.py ejabberd_auth $@
Edit ejabberd.yml and add external auth script, eg.:
host_config: "example.com": auth_method: external extauth_program: "/<path_to_your_project>/ejabberd_auth.sh"
Settings
These are all available settings you may use.
- XMPP_BOSH_SERVICE_URL
URL for ConverseJS BOSH connection
- XMPP_DOMAIN
Default XMPP domain
- XMPP_DOMAIN_MUC
Domain for multi user chats (default converence.<XMPP_DOMAIN>)
- XMPP_CONVERSEJS_AUTH
Authentication type for ConverseJS (prebind is not supported so login is the only option)
- XMPP_CONVERSEJS_SETTINGS
dictionary of settings passed to converse.initialize. For more list of available options see Converse.js docs
- XMPP_ENABLED
Enable or disable XMPP at all
- XMPP_UPDATE_VCARD
Enable or disable vCard update
- XMPP_UPDATE_VCARD_HOURS
Update vCard every n hours (default False)
A note on usernames
Jabber IDs are case-insensitive (so “MyUser@domain.com” and “myuser@domain.com” are the same account). By contrast, the username field in the default Django User model is case-sensitive (see this Django ticket). This means two separate “MyUser” and “myuser” accounts in Django will have the same JID on the XMPP server. The ejabberd_auth management command will not authenticate such users, and they will both see “Authentication failed” in Converse and other XMPP clients.
To avoid such conflicts, it is recommended to use a custom User model that enforces unique lowercase usernames with a RegexField. Other characters not allowed in a Jabber ID should be excluded as well. See this guide for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-xmpp-0.4.tar.gz
.
File metadata
- Download URL: django-xmpp-0.4.tar.gz
- Upload date:
- Size: 453.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53dab49cc711731b0906531074133d84b657e51f1ec8d9a23196dd0665c25d8e |
|
MD5 | 34b15856a3e34e251559f9690c433698 |
|
BLAKE2b-256 | 1542a93d2d2bda580285b961fc8d99e62a200cf297978f39f894ab09f8a9b2ab |