User:Mconnor/Past/Notifications
From MozillaWiki
This is now a real project: Notifications project home
__SHOWTOC__
Overview
The Notifications project is intended to enable direct communication between websites and users via the browser, in as close to real time as possible, without requiring users to leave pages open.
One of the core principles of the original Weave project was to enable services like this in a privacy-first context. To that end, we will look to build this on top of strong crypto, so that messages are not readable in transit, even through the server.
Technologies to brush up on
Client:
- Javascript
- Mozilla/Extension development
- XMPP
- Crypto
Server:
- Python
- XMPP
- Message queues
Joint Work
- Define and document an API for external parties to pass messages securely into the server. This should include plans for abuse mitigation, blocking of unpermitted parties and storage and retention maximums
- Define and document an API for browser clients to server-approve external parties to send messages to them, as well as the ability to revoke that permission.
- Define and document a protocol for the server to get messages to the browser.
Client
Client integration with Firefox (Desktop and Mobile) has the following initial requirements:
- Implement generation and syncing of keys to multiple devices (pub/priv? AES key per site?)
- Integration of an XMPP (or similar) client with Firefox
- Ensure that the XMPP client understands how to set "away" so that notifications are broadcast intelligently
- Implement UI for displaying notifications received and decrypted
Server
Building a server for this project has the following initial requirements:
- Implement a server (using XMPP or similar) that can track clients and send messages meant for that user
- Integrate this server software with existing Mozilla Services authentication store
- Implement reliable offline messaging support
- Create an interface capable of interacting with iOS push notification systems
- Build all pieces to be horizontally scalable to ensure high performance and availability