Giter Site home page Giter Site logo

mail's Introduction

[ABANDONED] Whiteout Mail Build Status

Whiteout Mail is an easy to use email client with integrated OpenPGP encryption written in pure JavaScript. Download the official version under whiteout.io.

Screenshot

Features

You can read about product features and our future roadmap in our FAQ.

Privacy and Security

We take the privacy of your data very seriously. Here are some of the technical details:

  • The code has undergone a full security audit by Cure53.

  • Messages are encrypted end-to-end using the OpenPGP 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).

  • Users have the option to use encrypted private key sync if they want to use Whiteout on multiple devices.

  • Content Security Policy (CSP) is enforced to prevent injection attacks.

  • HTML mails are sanitized with DOMPurify and are rendered in a sandboxed iframe.

  • Displaying mail images is optional and opt-in by default.

  • Like most native email clients, whiteout mail uses raw TCP sockets 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 with auditable static versions in order to prevent problems with host-based security.

  • 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), but the encrypted TLS payload is proxied via 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.

Architecture

client architecture

Reporting bugs and feature requests

  • We will launch a bug bounty program later on for independent security researchers. If you find any security vulnerabilities, don't hesitate to contact us [email protected].

  • You can also just create an issue on GitHub if you're missing a feature or just want to give us feedback. It would be much appreciated!

Testing

You can download a prebuilt bundle under releases or build your own from source (requires node.js, grunt and sass):

npm install && npm test

This will download all dependencies, run the tests and build the Chrome Packaged App bundle release/whiteout-mail_DEV.zip which can be installed under chrome://extensions in developer mode.

Development

For development you can start a connect dev server:

grunt dev

Then visit http://localhost:8580/dist/#/account?dev=true for front-end code or 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:

grunt watch

Releasing Chrome App

grunt release-test --release=0.0.0.x
grunt release-stable --release=0.x.0

Deploying Web App & Selfhosting

The App can be used either as a Chrome Packaged App or just by hosting it on your own trusted web server. You can build the app from source.

Build from source

Clone the git repository

git clone https://github.com/whiteout-io/mail.git

Build and generate the dist/ directory:

npm install && grunt

Running the server

To test the server, start it in development mode (without SSL):

node server.js --dev

Navigate to http://localhost:8889 (or whatever port is set using the PORT environment variable).

To start the server for production use (this automatically redirects to https)

npm start

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.

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

License

The MIT License (MIT)

Copyright (c) 2014 Whiteout Networks GmbH.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Third party libraries

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:

  • OpenPGP.js (LGPL license): An implementation of OpenPGP in Javascript
  • email.js (MIT license): IMAP, SMTP, MIME-building and MIME-parsing engine
  • Forge (BSD license): An implementation of TLS in JavaScript

mail's People

Contributors

andris9 avatar eldios avatar felixhammerl avatar gitter-badger avatar mpmks11 avatar tanx avatar webholics avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mail's Issues

support dane for tls certificate verification

Autistici.org is a community run privacy respecting mail service recommended by prism-break.org I use this as my primary email, many of my privacy concious friends use it too. They use their own certification authority and their authenticity can be validated by dane protocol. In the short term please add their ca certificate to your server and in the long term please support dane in addition to known CA bundle. This is currently the only app available for me in firefox os and I can't use gpg because of this issue.

grunt-cli required to run 'npm test'

I had to install grunt-cli globally to run:

grunt && grunt test

because the above assumes that 'grunt' is in the path. It's better to use the grunt installed in node_modules, in case I have a different version of grunt installed.

Self-hosted web application uploads public key to keys.whiteout.io

I'm hosting my own web application at https://mail.openhosting.com . I added my private key to the application and received the confirmation email from Whiteout Support. The message is decrypted properly and the public key verification link appeared. The domain is not mail.openhosting.com but rather keys.whiteout.io.

Why isn't the public key verified on my own server? Also, where is the private key stored? I didn't configure a database since there isn't a step for that in the installation instructions. I also deleted the ASCII armored private key file but message decryption continues to work.

Editor Slowness

I'm finding the encrypt-on-the-fly seems to be slowing the editor. Is there a way to improve speed on my end? Sometimes I can type ahead a whole sentence before it starts to appear.

Otherwise the ease of use and interface is very nice.

RB

Allow limiting of stored emails.

It WhiteoutMail when scrolling through thousands of emails the client can get lagged as the DOM is being overloaded. A possible solution to this may be to remove messages from top while scrolling down and add them again while scrolling up. Also it would be really great to have a feature allowing the user to choose the amount of emails wanted synced with whiteoutMail. Syncing every email from every folder can take up a lot of space and slow down the client so possibly a preset of a few thousand emails and ability for user to change sync limit.
Thanks!

allow a longer timeout for slower connections

currently I cannot use whiteout.io on my firefox os device (2G/Edge connection), there is no other gpg app for firefox os either. when a socket timeout error occurs, give an option to try a longer timeout.

btw is there a schedule for firefox os app release?

Import keypair issue

Hi,

I'm having issues importing keypair.

I was unable to import my old keypair once a while and generated new one with whiteout. After this I've deleted extension, since I was not able to replace new keys with old ones.

Then I re-installed extension hoping I will be able to imprt my old keypair. But everything become even more complicated. Option to generate new keys disappeared completely and now, no matter which file I'm setting as input (private key only, public key only, or both keys in one file one after another) I get the same error Key IDs dont match.

I cannot be wrong in typing my password!

My best guess, that keys previously generated by whiteout is still somewhere in the system. How I can check this and delete them?

Node-webkit

Have you guys considered using https://github.com/rogerwang/node-webkit to package the desktop versions of this application?

It would eliminate the need for your end users to have chrome installed.

I love the idea there is a lack of email clients with PGP support.

Stop uploading public keys right after saying you won't upload the key.

In the android app you promise not to upload the (private) key, but then a notification pops up that the public key was uploaded successfully.

Firstly you should absolutely not upload anything if you promise not to. This is mainly a phrasing issue: specifying that no private key will be uploaded will help.

But an advanced option to not upload the public key either would be much appreciated also!

There are mail providers which allow you to upload a public key with which all incoming mail will be encrypted.
For security reasons it's not a good idea to use the main key for this, because every client (including mobile ones) need the matching private key.

But this key is not supposed to be used by any contact, ONLY the mail provider. Uploading this public key is not intended and should not happen without confirmation ever.

Loads very slowly... then crashes

I'm using Whiteout on a brand new Macbook Pro (2.8 GHz Intel Core i7, 16 GB 1600 MHz DDR3).

Initial meta-data like from and subject loads very quickly, but then my machine slows to a crawl and it fails to load actual message content.

Can't send mail

for unknown reasons, it seems to be possible to send a mail with no recipients

[DEBUG][2014-11-10T23:55:23.221Z][SMTP Client] SERVER: 220 ESMTP [server]

[DEBUG][2014-11-10T23:55:23.221Z][SMTP Client] Sending EHLO ip-172-31-18-41
[DEBUG][2014-11-10T23:55:23.439Z][SMTP Client] SERVER: 250-[server]
250-PIPELINING
250-SIZE 157286400
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 8BITMIME

[DEBUG][2014-11-10T23:55:23.440Z][SMTP Client] Server supports AUTH PLAIN
[DEBUG][2014-11-10T23:55:23.440Z][SMTP Client] Server supports AUTH LOGIN
[DEBUG][2014-11-10T23:55:23.440Z][SMTP Client] Maximum allowd message size: 157286400
[DEBUG][2014-11-10T23:55:23.440Z][SMTP Client] Authentication via AUTH PLAIN
[DEBUG][2014-11-10T23:55:23.652Z][SMTP Client] SERVER: 235 2.7.0 Authentication successful

[DEBUG][2014-11-10T23:55:23.652Z][SMTP Client] Authentication successful.
[DEBUG][2014-11-10T23:55:23.652Z][SMTP Client] Sending MAIL FROM...
[DEBUG][2014-11-10T23:55:23.856Z][SMTP Client] SERVER: 250 2.1.0 Ok

[ERROR][2014-11-10T23:55:23.856Z][SMTP Client] Error: Can't send mail - no recipients defined . Stack: Error: Can't send mail - no recipients defined
at SmtpClient._actionMAIL (https://mail.whiteout.io/js/app.min.js:18:15619)
at SmtpClient._onCommand (https://mail.whiteout.io/js/app.min.js:18:9330)
at SmtpResponseParser._processLine (https://mail.whiteout.io/js/app.min.js:18:3330)
at SmtpResponseParser.send (https://mail.whiteout.io/js/app.min.js:18:2330)
at SmtpClient._onData (https://mail.whiteout.io/js/app.min.js:18:8634)
at TCPSocket._emit (https://mail.whiteout.io/js/app.min.js:18:1109)
at TCPSocket.tlsinbound (https://mail.whiteout.io/js/app.min.js:17:31278)
at Worker.self._tlsWorker.onmessage (https://mail.whiteout.io/js/app.min.js:18:468)

Problem Building

Hi,

I followed the instructions in the readme file for building and installed the required components. I'm getting a build error that I've been unable to resolve the past few days and I have a feeling it is something I've done incorrectly in my install. I'm running Win8.1. Here's the output from the cmd shell:

output

Any idea what I've done wrong?

Thanks,
Zach

Store public key in gmail contacts

Removing and reinstalling the chrome app removed my contacts. It would be nice if the public keys are backed up in google contacts when they are imported to avoid this and it would sync automatically to other devices.

Maybe "sync" button needed?

Sometimes the composed message waiting in the outbox until I restart the app to sync with the mail server.

Multiple accounts support

Please add multiple account support so I can get rid of thunderbird / geary :)

Thank you for your hard work.

Keep generated source out of the /src directory

I didn't initially realise that /src/css was generated and thus untracked by git. It might be clearer if generated source was kept to /dist?

I see that /dist is only the minified source - perhaps a /build folder would be better?

Error: Invalid US-ASCII character "\xE2"

Running a self-hosted server on Ubuntu 14.04 LTS. All software installed is from distro packages. I get the following error when starting the server with grunt

root@mail:/usr/local/src/mail-html5# grunt --trace
Running "clean:dist" (clean) task

Running "shell:target" (shell) task

Running "sass:dist" (sass) task
Error: Invalid US-ASCII character "\xE2"
        on line 46 of src/sass/blocks/basics/_mail-addresses.scss
        from line 30 of src/sass/all.scss
  Use --trace for backtrace.
Warning: Exited with error code 65 Use --force to continue.

Aborted due to warnings.


Execution Time (2014-12-08 08:08:51 UTC)
loading tasks   1.3s  ??????????????????????????????????????????????? 62%
shell:target   446ms  ????????????????? 22%
sass:dist      316ms  ???????????? 15%
Total 2s

Android app / TLS

I just tried out the whiteout.io Android app against my own server and
it turns out that it can't connect. The error message is "Connection
failed. Check your credentials!". It highlights the password field, but
the password is fine.

I checked the "TLS" connection for both, is it possible that STARTTLS is
not supported? I did not try with plain text, since I don't allow that
on my host.

Thank you!

Reg: How to do changes.

Hi

I need to do changes in white out code. if i change any thing and run using server.js. its not effecting anything. can i able to run the code without dist folder. If i run grunt file it is asking visual studio. is there any alternative for that or visual studio is compulsory.
i need to run this code for mobile app. it is logging in on desktop but in mobile its running but not logged in. am running the code using ionic framework and cordova using eclipse. so tell me the way to do modifications and run on mobile devises.

i hope u understand. i'll wait for your reply.

Thanks a lot.....

How to Modify Whiteout-io source

Hi

I need to add a custom server to Whiteout email.
i need to modify and run the code again according to my requirement.
but its not showing any changes while editing the code.
how to build the another mobile email app using the whiteout source code.

Please give me reply

Thank you

Reg: Compatibility in Mobile Device

Hi

Am working on Whiteout-io code. i need to run that app in Mobile device, Android and IOS. The thing is it's running on localhost and device. It is everything is ok in Browser but in android device it not able to log in. i had run "grunt" and copied the dist folder to the www folder in cordova app. But its not logged in. I want to do some changes with your code and i need to built again for the custom Email client. in your custom login is not working, i dont know why...

Please help me for this Issue. i'll wait for your reply..

Thanks

Where are the logs?

Having trouble connecting to Postfix/Dovecot. I'm certain that my settings are correct, but I am using a self-signed cert, which may be the problem. How can I get more detail? Where are the logs? Do I need to set a log server somewhere?

Can't revoke

I ([email protected]) tried to generate a keypair without a passphrase before 0.15.1, so I did a pre-emptive account reset (per the recommendation in #99) and got "An error occurred, we could not successfully reset your account."

OAuth

Meta-Ticket:

  • [Chrome App] OAuth token for Gmail can expire while the app is running. Refresh the token after a while.
  • [Webapp] Add 3-legged-OAuth, especially for Gmail and Outlook.com who aggressively deprecate password-based logins

production mode with a reverse proxy using unexpected redirect

I'm having trouble understanding the difference between production mode and development mode for a self-hosted backend. I've installed nginx in the front of the node.js application with a commercial SSL CA certificate. When I launch the application in development mode using node server.js --dev the proxy functions as expected. When I use the production mode startup with npm start and go to the same URL it appears that the node.js application redirects to the value I set in the proxy_pass line. For example:

upstream whiteout {
        server 127.0.0.1:8889;
}

server {
        listen 443;
        server_name mail.openhosting.com;

        #root html;
        #index index.html index.htm;

        ssl on;
        ssl_certificate /etc/ssl/certs/star.openhosting.com.pem;
        ssl_certificate_key /etc/ssl/private/star.openhosting.com.key;

        ssl_session_timeout 5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
        ssl_prefer_server_ciphers on;

        location / {
                proxy_pass http://whiteout;
                #try_files $uri $uri/ =404;
        }
}

The redirect URL ends up as https://whiteout

Why?

Multiple user support

For example, multiple people signing in to the same Whiteout instance hosted on a trusted server.

Manually import public key?

It could just be me, but playing around and unable to find the options/section where I can manually import a friends public key, and don't particularly want to spam them to signup for this.

Typo in error message

If public key with which user authenticated to whiteout.io server first time don't match with new key he wants to import during extension re-install, the system gives too implicit error message with typo:

Key IDs dont match.

While more correct will be Key IDs don't match.

I also suggest to consider to turn this error message into something more self-explaining, like "Could not import given key. It doesn't match with the key used to register whiteout.io account", or something like that...

Claiming »Open Source« on the frontpage despite no open license

Hey folks, I was a bit confused by your frontpage where you say that Whiteout is:

Standards-based and Open Source

Yes, you clarify on the following pages and the license file in the repository also states the code is not openly licensed. But arguably what it says on the main page is what people will remember.

It would be good to not call it »Open Source« when it isn’t truly what people know as open source – licensed to lift copyright so people are allowed to modify and redistribute. Especially because this is about crypto and hence trust in the software it’s strange to have this misleading element.

I do think it’s great that you work on usable email crypto and contribute to open source projects. Would be really cool if you decide to openly license Whiteout as well.

(In any case we could go for lunch some time – I saw you’re at Werk1 Munich where I sometimes work from too.)

Firefox support

Not sure how tied it is to mail-html5, but https://mail.whiteout.io is giving me a blank document with one <pre> tag inside the body. I'm running Firefox on Win8. I assume this is something to do with browser support, as my settings are pretty standard.

UI glitch when key import selection fails

Steps to reproduce:

  1. Open app in clean state (no accounts associated)
  2. Pick gmail
  3. click "import an exesting PGP key"
  4. click "Choose File"
  5. Pick an .asc file that doesn't have a public and private key in it, let's call it "key.asc"
  6. "key.asc" is still selected
  7. You can't edit the file with another program and the select it again because it doesn't trigger a change and re-check the file

Expected behaviour: If I edit the file and select it again it should be re-checked

Workaround: rename the file or restart the app

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.