No Description

Perflyst fe947352ef Add safe area around qrcode 4 years ago
lang eef20e2afe Merge remote-tracking branch 'licaon-kter/patch-2' 4 years ago
scripts ad7e92dcda Use minified qrcode.js and close input tag 4 years ago
stylesheets fe947352ef Add safe area around qrcode 4 years ago
LICENSE eff90ea151 Licensed under MIT 4 years ago
README.md fe629cf51a Fix a typo 4 years ago
clients_Android.json 0b9cb8f0c3 yaxim is Number 1 5 years ago
clients_Linux.json d8d1d85ea5 Link Kaidan website instead of git repo 4 years ago
clients_iOS.json 34dcb42841 Monal is a great iOS client 5 years ago
index.html ad7e92dcda Use minified qrcode.js and close input tag 4 years ago

README.md

Easy XMPP Invitation Landing Page

This is an XMPP invitation landing page that client developers or XMPP server admins can host on their servers. It allows users to send XMPP invitations (contacts or chat rooms) to people who do not have an XMPP client yet. This is part of the Easy XMPP initiative to improve the "first contact" experience.

For the JID vladimir@xmpp.example, it will create the following page (live example):

Vladimir has invited you to chat

Add Vladimir to your contact list by clicking the following link:

[ Add Vladimir ]

If this link does not work, you need to install and configure an XMPP client, and visit this page again afterwards.

[snipped client list and disclaimer]

Principal operation

  • Vladimir clicks on his XMPP client's "Create Invitation" button
    • The XMPP client creates a link according to RFC 5122, e.g. xmpp:vladimir@xmpp.example?otr=23
    • The client automatically transforms the link into a landing page link by removing xmpp: and adding the address as an URI fragment to the hosted landing page, e.g. https://www.xmpp.example/i/#vladimir@xmpp.example?otr=23
  • Vladimir sends the resulting invitation link via E-Mail, SMS, QR-Code, RFC 1149 or any other means to user Donald.
  • Donald opens the link in the browser, which has an "Add"/"Join" button linking to the xmpp: URI
    • If Donald has an XMPP client, it will handle the button click and open the "Add to roster" dialog
    • If Donald does not have an XMPP client, the link won't work. Donald must install a client and return to the link later

Design decisions

  • The (privacy sensitive) JID and parameters are put into the URI fragment, which is not transmitted to the hosting server
  • The fragment is parsed by the receiving client, this requires JavaScript
  • I18N and client suggestions are performed dynamically
  • MUCs get a special treatment in the UI to show they are a chat room and not a contact, based on presence of ?join in the address

TODO

  • I18N / Translation
    • Browser language auto-detection, drop-down / language list for manual override
    • More languages
  • Platform specific client recommendations (i.e. yaxim on Android, ChatSecure on iOS, Gajim on Windows)
    • Option to switch platform dynamically
  • "Edit" mode to manually create invitation links
  • Get rid of bootstrap

Inspiration

This project was inspired by mod_invite and Conversations' contact sharing page.

License

This code is licensed under the MIT License.