mail/README.md

108 lines
6.6 KiB
Markdown
Raw Normal View History

2014-08-15 16:50:16 -04:00
![App Icon](https://raw.githubusercontent.com/whiteout-io/mail-html5/master/src/img/icon-128.png)
2014-08-05 07:24:51 -04:00
Whiteout Mail [![Build Status](https://travis-ci.org/whiteout-io/mail-html5.svg?branch=master)](https://travis-ci.org/whiteout-io/mail-html5)
2013-03-13 11:50:46 -04:00
==========
2014-09-26 08:51:37 -04:00
Whiteout Mail is an easy to use email client with integrated OpenPGP encryption written in pure JavaScript. Download the official version under [whiteout.io](https://whiteout.io).
2014-01-16 05:27:48 -05:00
2014-01-18 09:31:26 -05:00
### Features
2014-01-18 09:31:45 -05:00
You can read about product features and our future roadmap in our [FAQ](https://github.com/whiteout-io/mail-html5/wiki/FAQ).
2014-01-18 09:31:26 -05:00
2014-01-16 06:03:14 -05:00
### Privacy and Security
2014-01-16 05:27:48 -05:00
2014-01-18 09:31:26 -05:00
We take the privacy of your data very seriously. Here are some of the technical details:
* Messages are [encrypted end-to-end ](http://en.wikipedia.org/wiki/End-to-end_encryption) using the [OpenPGP](http://en.wikipedia.org/wiki/Pretty_Good_Privacy) standard. This means that only you and the recipient can read your mail. Your messages and private PGP key are stored only on your computer (in IndexedDB).
2014-07-29 06:06:57 -04:00
* Users have the option to use [encrypted private key sync](https://blog.whiteout.io/2014/07/07/secure-pgp-key-sync-a-proposal/) if they want to use Whiteout on multiple devices.
2014-01-16 06:12:13 -05:00
2014-08-12 08:56:26 -04:00
* [Content Security Policy (CSP)](http://www.html5rocks.com/en/tutorials/security/content-security-policy/) is enforced to prevent injection attacks.
2014-01-16 06:12:13 -05:00
* HTML mails are sanitized with [DOMPurify](https://github.com/cure53/DOMPurify) and are rendered in a sandboxed iframe.
2014-07-28 13:15:36 -04:00
* Displaying mail images is optional and opt-in by default.
2014-10-14 03:05:36 -04:00
* Like most native email clients, whiteout mail uses raw [TCP sockets](http://developer.chrome.com/apps/socket.html) to communicate directly with your mail server via IMAP/SMTP. TLS is used to protect your password and message data in transit.
* The app is deployed as a signed [Chrome Packaged App](https://developer.chrome.com/apps/about_apps.html) with [auditable static versions](https://github.com/whiteout-io/mail-html5/releases) in order to prevent [problems with host-based security](https://blog.whiteout.io/2014/04/13/heartbleed-and-javascript-crypto/).
* The app can also be used from any modern web browser in environments where installing an app is not possible (e.g. a locked down corporate desktop). The IMAP/SMTP TLS sessions are still terminated in the user's browser using JS crypto ([Forge](https://github.com/digitalbazaar/forge)), but the encrypted TLS payload is proxied via [socket.io](http://socket.io/), due to the lack of raw sockets in the browser. **Please keep in mind that this mode of operation is not as secure as using the signed packaged app, since users must trust the webserver to deliver the correct code. This mode will still protect user against passive attacks like wiretapping (since PGP and TLS are still applied in the user's browser), but not against active attacks from the webserver. So it's best to decide which threat model applies to you.**
2014-01-16 05:38:32 -05:00
### Reporting bugs and feature requests
2014-01-16 06:38:26 -05:00
* We will launch a bug bounty program later on for independant security researchers. If you find any security vulnerabilities, don't hesitate to contact us [security@whiteout.io](mailto:security@whiteout.io).
2014-01-16 06:13:03 -05:00
2014-01-16 05:45:57 -05:00
* You can also just create an [issue](https://github.com/whiteout-io/mail-html5/issues) on GitHub if you're missing a feature or just want to give us feedback. It would be much appreciated!
2014-01-16 05:38:32 -05:00
### Testing
2014-01-15 11:57:18 -05:00
2014-02-13 13:53:20 -05:00
You can download a prebuilt bundle under [releases](https://github.com/whiteout-io/mail-html5/releases) or build your own from source (requires [node.js](http://nodejs.org/download/), [grunt](http://gruntjs.com/getting-started#installing-the-cli) and [sass](http://sass-lang.com/install)):
2013-04-01 17:23:25 -04:00
2014-01-18 09:46:39 -05:00
npm install && npm test
2014-06-05 09:36:53 -04:00
2014-01-18 09:46:39 -05:00
This will download all dependencies, run the tests and build the Chrome Packaged App bundle **DEV.zip** which can be installed under [chrome://extensions](chrome://extensions) in developer mode.
2014-01-16 05:02:52 -05:00
2014-02-18 13:20:44 -05:00
### Development
For development you can start a connect dev server:
grunt dev
Then visit [http://localhost:8580/dist/#/desktop?dev=true](http://localhost:8580/dist/#/desktop?dev=true) for front-end code or [http://localhost:8580/test/unit/](http://localhost:8580/test/unit/) to test JavaScript changes. You can also start a watch task so you don't have rebuild everytime you make a change:
2014-02-18 13:20:44 -05:00
grunt watch
## Releasing Chrome App
2014-05-23 05:36:12 -04:00
grunt release-test --release=0.0.0.x
grunt release-stable --release=0.x.0
2014-09-26 08:51:37 -04:00
## Deploying Web App & Selfhosting
The App can be used both as a Chrome Packaged App or just by hosting it on you own trusted web server.
First build and generate the `dist/` directory:
grunt
2014-09-26 08:51:37 -04:00
Then start the server and navigate to [http://localhost:8585](http://localhost:8585) (or whatever port is set using the `PORT` environment variable):
npm start
2014-09-26 08:51:37 -04:00
**A note on security:** The app should not be used without SSL so it's best to set up a reverse proxy or Loadbalancer with your SSL certificates. If you are not sure how to do this it might be easier to use our managed web hosting or packaged apps under [https://whiteout.io/#product](https://whiteout.io/#product).
You can limit incoming and outgoing connections to the socket.io proxy by setting the following environment variables:
# the web socket proxy listens to this port
# if unset, defaults to 8889
PORT=12345
# the socket.io proxy accepts connections from these origins to tunnel them to tcp,
# separate with commas
# if unset, defaults to 'localhost:' + port
INBOUND_ORIGINS='foo:1234,bar:569'
# the socket.io proxy opens tcp connections with these ports to tunnel them to socket.io
# separate with commas
# if unset, defaults to '143,465,587,993' (25 is forbidden by default)
OUTBOUND_PORTS='123,456,789'
To start the server in development mode (no forced HTTPS, iframe loads http content), run `node server.js --dev`
2014-01-15 11:48:15 -05:00
## License
2014-04-15 12:34:05 -04:00
Copyright © 2014, Whiteout Networks GmbH. All rights reserved.
2014-01-16 04:59:41 -05:00
2014-01-16 05:02:52 -05:00
The code is open for inspection and peer review by the security community.
The code is currently not licensed under an open source license. If you're
interested in contributing or getting a license, please get in touch with
2014-01-16 05:04:39 -05:00
us (info@whiteout.io).
2014-01-16 04:59:41 -05:00
2014-01-16 06:40:49 -05:00
### Third party libraries
2014-01-18 09:13:49 -05:00
We work together with existing open source projects wherever possible and contribute any changes we make back upstream. Many of theses libraries are licensed under an open source license. Here are some of them:
2014-01-16 04:59:41 -05:00
* [OpenPGP.js](http://openpgpjs.org) (LGPL license): An implementation of OpenPGP in Javascript
2014-04-24 12:16:40 -04:00
* [email.js](http://emailjs.org) (MIT license): IMAP, SMTP, MIME-building and MIME-parsing engine
* [Forge](https://github.com/digitalbazaar/forge) (BSD license): An implementation of TLS in JavaScript