summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.rst12
-rw-r--r--HISTORY.rst81
-rw-r--r--changes/feature-7552_mail-help-message-on-ui1
-rw-r--r--changes/next-changelog.rst28
-rw-r--r--release-notes.rst334
-rwxr-xr-xsetup.py31
-rw-r--r--src/leap/bitmask/gui/mail_status.py17
-rw-r--r--src/leap/bitmask/gui/mainwindow.py6
-rw-r--r--src/leap/bitmask/gui/ui/mail_status.ui105
-rw-r--r--src/leap/bitmask/provider/pinned.py7
-rw-r--r--src/leap/bitmask/provider/pinned_mailbitmask.py99
11 files changed, 349 insertions, 372 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 2d56cc6d..9af1ebcc 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -3,6 +3,18 @@
Changelog
---------
+0.9.1 November 03 - "the day of the calaca"
++++++++++++++++++++++++++++++++++++++++++++
+
+Features
+~~~~~~~~
+- `#7542 <https://leap.se/code/issues/7542>`_: Pin mail.bitmask.net provider. Closes feature #7542.
+
+Bugfixes
+~~~~~~~~
+- `#7563 <https://leap.se/code/issues/7563>`_: try to look for /usr/bin/gpg1
+- `#7562 <https://leap.se/code/issues/7562>`_: use zmq embedded minitornado, instead of system lib.
+
0.9.0 October 28
++++++++++++++++
diff --git a/HISTORY.rst b/HISTORY.rst
index dba0f38b..ba0df9ef 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -7,6 +7,87 @@ History
2015
====
+0.9.1 November 03 - "the day of the calaca"
++++++++++++++++++++++++++++++++++++++++++++
+
+Features
+~~~~~~~~
+- `#7542 <https://leap.se/code/issues/7542>`_: Pin mail.bitmask.net provider. Closes feature #7542.
+
+Bugfixes
+~~~~~~~~
+- `#7563 <https://leap.se/code/issues/7563>`_: try to look for /usr/bin/gpg1
+- `#7562 <https://leap.se/code/issues/7562>`_: use zmq embedded minitornado, instead of system lib.
+
+0.9.0 October 28
+++++++++++++++++
+
+Features
+~~~~~~~~
+
+- `#4284 <https://leap.se/code/issues/4284>`_: Download specific smtp certificate from provider, instead of using the vpn one.
+- `#5526 <https://leap.se/code/issues/5526>`_: Make "check" button selected by default.
+- `#6359 <https://leap.se/code/issues/6359>`_: Adapt bitmask to the new events api on leap.common.
+- `#6360 <https://leap.se/code/issues/6360>`_: Use txzmq in backend.
+- `#6368 <https://leap.se/code/issues/6368>`_: Add support to the new async-api of keymanager.
+- `#6683 <https://leap.se/code/issues/6683>`_: Add ability to generate sumo tarball.
+- `#6713 <https://leap.se/code/issues/6713>`_: Add support for xfce-polkit agent.
+- `#6876 <https://leap.se/code/issues/6876>`_: Update api port for pinned riseup.
+- `#7139 <https://leap.se/code/issues/7139>`_: Use logbook zmq handler to centralize logging.
+- `#7140 <https://leap.se/code/issues/7140>`_: Implement a thread-safe zmq handler for logbook.
+- `#7141 <https://leap.se/code/issues/7141>`_: Add log handler to display colored logs on the terminal.
+- `#7142 <https://leap.se/code/issues/7142>`_: Add log handler to store logs on bitmask.log.
+- `#7143 <https://leap.se/code/issues/7143>`_: Adapt existing log filter/silencer to the new logbook handler.
+- `#7144 <https://leap.se/code/issues/7144>`_: Replace logging handler with logbook handler bitmask-wide.
+- `#7162 <https://leap.se/code/issues/7162>`_: Log LSB-release info if available.
+- `#7180 <https://leap.se/code/issues/7180>`_: Add log rotation for bitmask.log.
+- `#7184 <https://leap.se/code/issues/7184>`_: Forward twisted logs to logging and handle logging logs with logbook.
+- `#7250 <https://leap.se/code/issues/7250>`_: Enable '--danger' for stable versions.
+- `#7291 <https://leap.se/code/issues/7291>`_: Move the updater code from the launcher to the client.
+- `#7342 <https://leap.se/code/issues/7342>`_: Added apply_updates.py script for the pyinstaller bundle.
+- `#7353 <https://leap.se/code/issues/7353>`_: Add notifications of soledad sync progress to UI.
+- `#7356 <https://leap.se/code/issues/7356>`_: Allow to disable EIP component on build.
+- `#7414 <https://leap.se/code/issues/7414>`_: Remove taskthread dependency, replace with custom (and small) code.
+- `#7419 <https://leap.se/code/issues/7419>`_: Load credentials from environment variables and trigger login.
+- `#7471 <https://leap.se/code/issues/7471>`_: Disable email firewall if we are running inside a docker container.
+- Add support to the new async-api of soledad
+
+Bugfixes
+~~~~~~~~
+
+- `#6418 <https://leap.se/code/issues/6418>`_: Cannot change preseeded providers if checks for one fail.
+- `#6424 <https://leap.se/code/issues/6424>`_: Do not disable autostart if the quit is triggered by a system logout.
+- `#6536 <https://leap.se/code/issues/6536>`_, `#6568 <https://leap.se/code/issues/6568>`_, `#6691 <https://leap.se/code/issues/6691>`_: Refactor soledad sync to do it the twisted way.
+- `#6541 <https://leap.se/code/issues/6541>`_: Client must honor the ports specified in eip-service.json.
+- `#6594 <https://leap.se/code/issues/6594>`_: Handle disabled registration on provider.
+- `#6654 <https://leap.se/code/issues/6654>`_: Regression fix, login attempt is made against previously selected provider.
+- `#6682 <https://leap.se/code/issues/6682>`_: Handle user cancel keyring open operation, this prevents a bitmask freeze.
+- `#6894 <https://leap.se/code/issues/6894>`_: Change 'ip' command location to support Fedora/RHEL distros.
+- `#7093 <https://leap.se/code/issues/7093>`_: Fix controller attribute error.
+- `#7126 <https://leap.se/code/issues/7126>`_: Don't run the event server on the backend for the standalone bundle since the launcher takes care of that.
+- `#7149 <https://leap.se/code/issues/7149>`_: Start the events server when reactor is running.
+- `#7185 <https://leap.se/code/issues/7185>`_: Log contains exported PGP Private Key.
+- `#7222 <https://leap.se/code/issues/7222>`_: Run the zmq log subscriber in the background to avoid hitting the zmq's buffer limits.
+- `#7273 <https://leap.se/code/issues/7273>`_: Logbook subscriber stop fails if not started.
+- `#7273 <https://leap.se/code/issues/7273>`_: ZMQError: address already in use - logbook subscriber already started.
+- `#7281 <https://leap.se/code/issues/7281>`_: Support a provider not providing location for the eip gateways.
+- `#7319 <https://leap.se/code/issues/7319>`_: Raise the maxfiles limit in OSX
+- `#7343 <https://leap.se/code/issues/7343>`_: Clean up and fix the tests.
+- `#7415 <https://leap.se/code/issues/7415>`_: Fix wrong argument number on window raise event.
+- `#7448 <https://leap.se/code/issues/7448>`_: Fix hangs during logout.
+- `#7451 <https://leap.se/code/issues/7451>`_: Assign the timeout 'call later' before starting the sync to prevent race conditions.
+- `#7453 <https://leap.se/code/issues/7453>`_: After a complete sync show the user the amount of unread emails.
+- `#7470 <https://leap.se/code/issues/7470>`_: Fix bug with password change.
+- `#7474 <https://leap.se/code/issues/7474>`_: Track soledad ready state on a shared place for easy access. Enable password change window.
+- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
+- `#7512 <https://leap.se/code/issues/7512>`_: Pass on standalone flag to common.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store logs in the right place.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store zmq certs in the right path.
+- Authenticate properly logout calls to API.
+- Fix soledad bootstrap sync retries.
+- Fix the bootstrap script for developers so it works on Fedora/RHEL systems where there is /usr/lib64 for python libs.
+- Remove bubble argument from the logbook NullHandler
+
0.8.1 February 25
+++++++++++++++++
diff --git a/changes/feature-7552_mail-help-message-on-ui b/changes/feature-7552_mail-help-message-on-ui
new file mode 100644
index 00000000..44ab8fa7
--- /dev/null
+++ b/changes/feature-7552_mail-help-message-on-ui
@@ -0,0 +1 @@
+- Add UI message to help new mail users to get started. Closes feature #7552.
diff --git a/changes/next-changelog.rst b/changes/next-changelog.rst
new file mode 100644
index 00000000..90448d57
--- /dev/null
+++ b/changes/next-changelog.rst
@@ -0,0 +1,28 @@
+0.9.2 - xxx
++++++++++++++++++++++++++++++++
+
+Please add lines to this file, they will be moved to the CHANGELOG.rst during
+the next release.
+
+There are two template lines for each category, use them as reference.
+
+I've added a new category `Misc` so we can track doc/style/packaging stuff.
+
+Features
+~~~~~~~~
+- `#1234 <https://leap.se/code/issues/1234>`_: Description of the new feature corresponding with issue #1234.
+- New feature without related issue number.
+
+Bugfixes
+~~~~~~~~
+- `#1235 <https://leap.se/code/issues/1235>`_: Description for the fixed stuff corresponding with issue #1235.
+- Bugfix without related issue number.
+
+Misc
+~~~~
+- `#1236 <https://leap.se/code/issues/1236>`_: Description of the new feature corresponding with issue #1236.
+- Some change without issue number.
+
+Known Issues
+~~~~~~~~~~~~
+- `#1236 <https://leap.se/code/issues/1236>`_: Description of the known issue corresponding with issue #1236.
diff --git a/release-notes.rst b/release-notes.rst
index af0e9109..7a63901e 100644
--- a/release-notes.rst
+++ b/release-notes.rst
@@ -1,323 +1,25 @@
-0.9.0 October 28
-++++++++++++++++
+0.9.1 November 03 - "the day of the calaca"
++++++++++++++++++++++++++++++++++++++++++++
-We are very pleased to announce Bitmask stable 0.9.0 :tada:.
+We were very pleased to announce Bitmask stable 0.9.1 :tada:.
-It's been 9 months since we released our latest stable version, we have been
-working a lot and trying out several release candidates in the way.
+This is a minor release and you can see changes on `the changelog`_.
-Using the latest Bitmask you'll be able to use our encrypted email service, now
-in beta state!
+The complete list of things that have changed since 0.8.x series can be seen on
+`0.9.0 release notes`_
+Don't miss the big pile of changes we brought you on 0.9.0 :)
-NOTE: beta means that we expect not to break but we don't promise you won't get
-any headache or lose some email, so please be careful.
+Using the latest Bitmask, Linux users will be able to use our encrypted email
+service, now in beta state! A Mac release is imminent and a windows release is
+underway.
-Currently we have a test provider for mail usage hosted on
-https://mail.bitmask.net this provider is already bundled with Bitmask for easy
-access on the wizard.
+Currently we have a test provider for mail @ https://mail.bitmask.net This
+provider is already bundled with Bitmask for easy access on the wizard. Please
+help us test this and file bug reports here:
+https://leap.se/code/projects/report-issues
-----
+NOTE: beta means that we expect things not to break but we don't promise you
+won't get any headaches or lose some email, so please be careful.
-Some numbers on what we have been doing all this time:
-
-- we have closed **472** issues,
-- we have closed **379** pull requests,
-- adding up all the components changes we got **830** new commits
-
-----
-
-Here you have a list of the most notable changes since our latest stable
-release.
-
-Index of changes:
-
-* `Bitmask Client`_ (0.8.1 → 0.9.0)
-* `Soledad`_ (0.6.3 → 0.7.4)
-* `Keymanager`_ (0.3.8 → 0.4.3)
-* `Common`_ (0.3.10 → 0.4.4)
-* `Mail`_ (0.3.11 → 0.4.0)
-
-Bitmask Client
-==============
-
-Features
-~~~~~~~~
-- `#4284 <https://leap.se/code/issues/4284>`_: Download specific smtp certificate from provider, instead of using the vpn one.
-- `#5526 <https://leap.se/code/issues/5526>`_: Make "check" button selected by default.
-- `#6359 <https://leap.se/code/issues/6359>`_: Adapt bitmask to the new events api on leap.common.
-- `#6360 <https://leap.se/code/issues/6360>`_: Use txzmq in backend.
-- `#6368 <https://leap.se/code/issues/6368>`_: Add support to the new async-api of keymanager.
-- `#6683 <https://leap.se/code/issues/6683>`_: Add ability to generate sumo tarball.
-- `#6713 <https://leap.se/code/issues/6713>`_: Add support for xfce-polkit agent.
-- `#6876 <https://leap.se/code/issues/6876>`_: Update api port for pinned riseup.
-- `#7139 <https://leap.se/code/issues/7139>`_: Use logbook zmq handler to centralize logging.
-- `#7140 <https://leap.se/code/issues/7140>`_: Implement a thread-safe zmq handler for logbook.
-- `#7141 <https://leap.se/code/issues/7141>`_: Add log handler to display colored logs on the terminal.
-- `#7142 <https://leap.se/code/issues/7142>`_: Add log handler to store logs on bitmask.log.
-- `#7143 <https://leap.se/code/issues/7143>`_: Adapt existing log filter/silencer to the new logbook handler.
-- `#7144 <https://leap.se/code/issues/7144>`_: Replace logging handler with logbook handler bitmask-wide.
-- `#7162 <https://leap.se/code/issues/7162>`_: Log LSB-release info if available.
-- `#7180 <https://leap.se/code/issues/7180>`_: Add log rotation for bitmask.log.
-- `#7184 <https://leap.se/code/issues/7184>`_: Forward twisted logs to logging and handle logging logs with logbook.
-- `#7250 <https://leap.se/code/issues/7250>`_: Enable ``--danger`` for stable versions.
-- `#7291 <https://leap.se/code/issues/7291>`_: Move the updater code from the launcher to the client.
-- `#7342 <https://leap.se/code/issues/7342>`_: Added ``apply_updates.py`` script for the pyinstaller bundle.
-- `#7353 <https://leap.se/code/issues/7353>`_: Add notifications of soledad sync progress to UI.
-- `#7356 <https://leap.se/code/issues/7356>`_: Allow to disable EIP component on build.
-- `#7414 <https://leap.se/code/issues/7414>`_: Remove taskthread dependency, replace with custom (and small) code.
-- `#7419 <https://leap.se/code/issues/7419>`_: Load credentials from environment variables and trigger login.
-- `#7471 <https://leap.se/code/issues/7471>`_: Disable email firewall if we are running inside a docker container.
-- Add support to the new async-api of soledad
-
-Bugfixes
-~~~~~~~~
-- `#6418 <https://leap.se/code/issues/6418>`_: Cannot change preseeded providers if checks for one fail.
-- `#6424 <https://leap.se/code/issues/6424>`_: Do not disable autostart if the quit is triggered by a system logout.
-- `#6536 <https://leap.se/code/issues/6536>`_, `#6568 <https://leap.se/code/issues/6568>`_, `#6691 <https://leap.se/code/issues/6691>`_: Refactor soledad sync to do it the twisted way.
-- `#6541 <https://leap.se/code/issues/6541>`_: Client must honor the ports specified in ``eip-service.json``.
-- `#6594 <https://leap.se/code/issues/6594>`_: Handle disabled registration on provider.
-- `#6654 <https://leap.se/code/issues/6654>`_: Regression fix, login attempt is made against previously selected provider.
-- `#6682 <https://leap.se/code/issues/6682>`_: Handle user cancel keyring open operation, this prevents a bitmask freeze.
-- `#6894 <https://leap.se/code/issues/6894>`_: Change ``ip`` command location to support Fedora/RHEL distros.
-- `#7093 <https://leap.se/code/issues/7093>`_: Fix controller attribute error.
-- `#7126 <https://leap.se/code/issues/7126>`_: Don't run the event server on the backend for the standalone bundle since the launcher takes care of that.
-- `#7149 <https://leap.se/code/issues/7149>`_: Start the events server when reactor is running.
-- `#7185 <https://leap.se/code/issues/7185>`_: Log contains exported PGP Private Key.
-- `#7222 <https://leap.se/code/issues/7222>`_: Run the zmq log subscriber in the background to avoid hitting the zmq's buffer limits.
-- `#7273 <https://leap.se/code/issues/7273>`_: Logbook subscriber stop fails if not started.
-- `#7273 <https://leap.se/code/issues/7273>`_: ZMQError: address already in use - logbook subscriber already started.
-- `#7281 <https://leap.se/code/issues/7281>`_: Support a provider not providing location for the eip gateways.
-- `#7319 <https://leap.se/code/issues/7319>`_: Raise the maxfiles limit in OSX
-- `#7343 <https://leap.se/code/issues/7343>`_: Clean up and fix the tests.
-- `#7415 <https://leap.se/code/issues/7415>`_: Fix wrong argument number on window raise event.
-- `#7448 <https://leap.se/code/issues/7448>`_: Fix hangs during logout.
-- `#7451 <https://leap.se/code/issues/7451>`_: Assign the timeout 'call later' before starting the sync to prevent race conditions.
-- `#7453 <https://leap.se/code/issues/7453>`_: After a complete sync show the user the amount of unread emails.
-- `#7470 <https://leap.se/code/issues/7470>`_: Fix bug with password change.
-- `#7474 <https://leap.se/code/issues/7474>`_: Track soledad ready state on a shared place for easy access. Enable password change window.
-- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
-- `#7512 <https://leap.se/code/issues/7512>`_: Pass on standalone flag to common.
-- `#7512 <https://leap.se/code/issues/7512>`_: Store logs in the right place.
-- `#7512 <https://leap.se/code/issues/7512>`_: Store zmq certs in the right path.
-- Authenticate properly logout calls to API.
-- Fix soledad bootstrap sync retries.
-- Fix the bootstrap script for developers so it works on Fedora/RHEL systems where there is ``/usr/lib64`` for python libs.
-- Remove bubble argument from the logbook NullHandler
-
-----
-
-Soledad
-=======
-
-soledad.client
-~~~~~~~~~~~~~~
-
-Features
---------
-- `#7353 <https://leap.se/code/issues/7353>`_: Improve how we send information on ``SOLEDAD_SYNC_SEND_STATUS`` and in ``SOLEDAD_SYNC_RECEIVE_STATUS``.
-- `#5895 <https://leap.se/code/issues/5895>`_: Store all incoming documents in the sync db.
-- `#6359 <https://leap.se/code/issues/6359>`_: Adapt soledad to the new events api on leap.common.
-- `#6400 <https://leap.se/code/issues/6400>`_: Include the IV in the encrypted document MAC.
-- `#6996 <https://leap.se/code/issues/6996>`_: Expose post-sync hooks via plugin system.
-- Add a pool of HTTP/HTTPS connections that is able to verify the server certificate against a given CA certificate.
-- Use twisted.enterprise.adbapi for access to the sync database.
-- Use twisted.web.client for client sync.
-
-Bugfixes
---------
-
-- `#5855 <https://leap.se/code/issues/5855>`_: Reset syncer connection when getting HTTP error during sync.
-- `#5975 <https://leap.se/code/issues/5975>`_: Wait for last post request to finish before starting a new one.
-- `#6437 <https://leap.se/code/issues/6437>`_: Use TLS v1 in soledad client.
-- `#6625 <https://leap.se/code/issues/6625>`_: Retry on sqlcipher thread timeouts.
-- `#6757 <https://leap.se/code/issues/6757>`_: Fix the order of insertion of documents when using workers for decrypting incoming documents during a sync.
-- `#6892 <https://leap.se/code/issues/6892>`_: Fix the log message when a local secret is not found so it's less confusing.
-- `#6980 <https://leap.se/code/issues/6980>`_: Remove MAC from secrets file.
-- `#7088 <https://leap.se/code/issues/7088>`_: Fix sync encrypter pool close queue error.
-- `#7302 <https://leap.se/code/issues/7302>`_: Increase http request timeout time to 90s.
-- `#7386 <https://leap.se/code/issues/7386>`_: Fix hanging sync by properly waiting db initialization on sync decrypter pool.
-- `#7503 <https://leap.se/code/issues/7503>`_: Do not signal sync completion if sync failed.
-- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
-- Always initialize the sync db to allow for both asynchronous encryption and asynchronous decryption when syncing.
-- Avoid double decryption of documents.
-- Bugfix: move sync db and encpool creation to api.
-- Bugfix: refactor code loss.
-- Bugfix: set active secret before saving local file.
-- Bugfix: wrong sqlcipher passphrase now raises correctly.
-- Fallback to utf-8 if confidence on chardet guessing is too low.
-- Fix logging and graceful failing when exceptions are raised during sync.
-- Fix the order of the events emited for incoming documents.
-- Handle ``DatabaseDoesNotExist`` during sync.
-- Handle ``MissingDesignDocError`` after get_sync_info.
-- Handle missing design doc at GET (``get_sync_info``). Soledad server can handle this during sync.
-
-Misc (CI, tests, refactor, packaging)
--------------------------------------
-
-- `#2945 <https://leap.se/code/issues/2945>`_: Do not depend on pysqlite2.
-- `#6797 <https://leap.se/code/issues/6797>`_: Add dependency on Twisted.
-- `#7338 <https://leap.se/code/issues/7338>`_: refactor ``SoledadCrypto`` to remove circular dependency with ``SoledadSecrets``.
-- Add tests for enc/dec pool.
-- Improve helper scripts and dependencies listing.
-- Improve log messages when concurrently fetching documents from the server.
-- Lots of code restyling to pass CI tests.
-- Refactor asynchronous encryption/decryption code to its own file.
-- Refactor decription pool and http target to use a deferred instead of a waiting loop.
-- Refactor details of making an HTTP request body and headers out of the send/fetch logic. This also makes it easier to enable batching.
-- Refactor enc/dec pool to standardize start/stop of the pools.
-- Remove dependency on simplejson.
-- Split ``http_target`` into 4 modules, separating those responsibilities.
-
-
-soledad.server
-~~~~~~~~~~~~~~
-
-Features
---------
-
-- `#6785 <https://leap.se/code/issues/6785>`_: Use monthly token databases.
-- Lots of code restyling to pass CI tests.
-- Lots of work done to get tests passing.
-- Remove dependency on simplejson.
-
-Bugfixes
---------
-
-- `#6436 <https://leap.se/code/issues/6436>`_: Run daemon as user soledad.
-- `#6437 <https://leap.se/code/issues/6437>`_: Avoid use of SSLv3.
-- `#6557 <https://leap.se/code/issues/6557>`_: Fix server initscript location.
-- `#6797 <https://leap.se/code/issues/6797>`_: Add dependency on Twisted.
-- `#6833 <https://leap.se/code/issues/6833>`_: Remove unneeded parameters from ``CouchServerState`` initialization.
-- Fix a bug where `BadRequest` could be raised after everything was persisted.
-- Fix server daemon uid and gid by passing them to twistd on the initscript.
-
-
-soledad.common
-~~~~~~~~~~~~~~
-
-Features
---------
-
-- `#6359 <https://leap.se/code/issues/6359>`_: Adapt soledad to the new events api on leap.common.
-- Lots of code restyling to pass CI tests.
-- Lots of work done to get tests passing.
-- Refactor `couch.py` to separate persistence from logic while saving uploaded documents. Also simplify logic while checking for conflicts.
-- Remove dependency on simplejson.
-
-Bugfixes
---------
-- `#5896 <https://leap.se/code/issues/5896>`_: Include couch design docs source files in source distribution and only compile ``ddocs.py`` when building the package.
-- `#6671 <https://leap.se/code/issues/6671>`_: Bail out if ``cdocs/`` dir does not exist.
-- `#6833 <https://leap.se/code/issues/6833>`_: Remove unneeded parameters from ``CouchServerState`` initialization.
-
-----
-
-Keymanager
-==========
-
-Features
-~~~~~~~~
-
-- `#5359 <https://leap.se/code/issues/5359>`_: Adapt to new events api on leap.common.
-- `#5932 <https://leap.se/code/issues/5932>`_: Add ``fetch_key`` method to fetch keys from a URI.
-- `#6211 <https://leap.se/code/issues/6211>`_: Upgrade keys if not successfully used and strict high validation level.
-- `#6212 <https://leap.se/code/issues/6212>`_: Multi uid support.
-- `#6240 <https://leap.se/code/issues/6240>`_: Upgrade key when signed by old key.
-- `#6262 <https://leap.se/code/issues/6262>`_: Keep old key after upgrade.
-- `#6299 <https://leap.se/code/issues/6299>`_: New soledad doc struct for encryption-keys.
-- `#6346 <https://leap.se/code/issues/6346>`_: Use addresses instead of keys for encrypt, decrypt, sign & verify.
-- `#6366 <https://leap.se/code/issues/6366>`_: Expose info about the signing key.
-- `#6368 <https://leap.se/code/issues/6368>`_: Port keymanager to the new soledad async API.
-- `#6815 <https://leap.se/code/issues/6815>`_: Fetched keys from other domain than its provider are set as 'Weak Chain' validation level.
-- `KeyManager.put_key` now accepts also ascii keys.
-
-Bugfixes
-~~~~~~~~
-
-- `#6022 <https://leap.se/code/issues/6022>`_: Fix call to python-gnupg's ``verify_file()`` method.
-- `#7188 <https://leap.se/code/issues/7188>`_: Remove the dependency on ``enum34``.
-- `#7274 <https://leap.se/code/issues/7274>`_: use async events api.
-- `#7410 <https://leap.se/code/issues/7410>`_: add logging to fetch_key.
-- `#7410 <https://leap.se/code/issues/7410>`_: catch request exceptions on key fetching.
-- `#7420 <https://leap.se/code/issues/7420>`_: don't repush a public key with different address.
-- `#7498 <https://leap.se/code/issues/7498>`_: self-repair the keyring if keys get duplicated.
-- Don't repush a public key with different addres
-- More verbosity in ``get_key`` wrong address log.
-- Return always ``KeyNotFound`` failure if fetch keys fails on an unknown error.
-- Use ``ca_bundle`` when fetching keys by url.
-
-Misc (CI, tests, refactor, packaging)
--------------------------------------
-
-- Cleanup API.
-- Packaging improvements.
-- Style changes.
-- Tests updates.
-
-
-----
-
-Common
-======
-
-Features
-~~~~~~~~
-
-- `#7188 <https://leap.se/code/issues/7188>`_: Modify ``leap.common.events`` to use ZMQ. Closes #6359.
-- Add a ``HTTPClient`` the twisted way.
-- Add close method for http agent.
-- Allow passing callback to HTTP client.
-- Bugfix: HTTP timeout was not being cleared on abort.
-- Bugfix: do not add a port string to non-tcp addresses.
-- Fix code style and tests.
-- Make https client use Twisted SSL validation and adds a reuse by default behavior on connection pool
-
-
-Bugfixes
-~~~~~~~~
-
-- `#6994 <https://leap.se/code/issues/6994>`_: Fix time comparison between local and UTC times that caused the VPN certificates not being correctly downloaded on time.
-- `#7089 <https://leap.se/code/issues/7089>`_: Fix regexp to allow ipc protocol in zmq sockets.
-- `#7130 <https://leap.se/code/issues/7130>`_: Remove extraneous data from events logs.
-- `#7234 <https://leap.se/code/issues/7234>`_: Add http request timeout.
-- `#7259 <https://leap.se/code/issues/7259>`_: Add a flag to disable events framework.
-- `#7274 <https://leap.se/code/issues/7274>`_: Expose async methods for events.
-- `#7512 <https://leap.se/code/issues/7512>`_: Consider standalone flag when saving events certificates.
-- Fix wrong ca_cert path inside bundle.
-- Workaround for deadlock problem in zmq auth.
-
-----
-
-Mail
-====
-
-Features
-~~~~~~~~
-
-- `#3879 <https://leap.se/code/issues/3879>`_: Parse OpenPGP header and import keys from it.
-- `#4692 <https://leap.se/code/issues/4692>`_: Don't add any footer to the emails.
-- `#5359 <https://leap.se/code/issues/5359>`_: Adapt to new events api on leap.common.
-- `#5937 <https://leap.se/code/issues/5937>`_: Discover public keys via attachment.
-- `#6357 <https://leap.se/code/issues/6357>`_: Create a ``OutgoingMail`` class that has the logic for encrypting, signing and sending messages. Factors that logic out of ``EncryptedMessage`` so it can be used by other clients.
-- `#6361 <https://leap.se/code/issues/6361>`_: Refactor email fetching outside IMAP to its own independient ``IncomingMail`` class.
-- `#6617 <https://leap.se/code/issues/6617>`_: Add public key as attachment.
-- `#6742 <https://leap.se/code/issues/6742>`_: Add listener for each email added to inbox in IncomingMail.
-- `#6996 <https://leap.se/code/issues/6996>`_: Ability to reindex local UIDs after a soledad sync.
-- Add very basic support for message sequence numbers.
-- Expose generic and protocol-agnostic public mail API.
-- Lots of style fixes and tests updates.
-- Make use of the twisted-based, async soledad API.
-- Send a BYE command to all open connections, so that the MUA is notified when the server is shutted down.
-
-Bugfixes
-~~~~~~~~
-
-- `#6601 <https://leap.se/code/issues/6601>`_: Port ``enum`` to ``enum34``.
-- `#7169 <https://leap.se/code/issues/7169>`_: Update SMTP gateway docs.
-- `#7244 <https://leap.se/code/issues/7244>`_: Fix nested multipart rendering.
-- `#7430 <https://leap.se/code/issues/7430>`_: If the auth token has expired signal the GUI to request her to log in again.
-- `#7471 <https://leap.se/code/issues/7471>`_: Disable local only tcp bind on docker containers to allow access to IMAP and SMTP.
-- `#7480 <https://leap.se/code/issues/7480>`_: Don't extract openpgp header if valid attached key.
-- Bugfix: Return the first cdoc if no body found
-- Bugfix: fix keyerror when inserting msg on ``pending_inserts`` dict.
-- Bugfix: fixed syntax error in ``models.py``.
+.. _`the changelog`: https://github.com/leapcode/bitmask_client/blob/0.9.1/CHANGELOG.rst
+.. _`0.9.0 release notes`: https://github.com/leapcode/bitmask_client/blob/0.9.0/release-notes.rst
diff --git a/setup.py b/setup.py
index c4d3e8e6..8463c172 100755
--- a/setup.py
+++ b/setup.py
@@ -57,14 +57,13 @@ setup_root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(setup_root, "src"))
trove_classifiers = [
- "Development Status :: 3 - Alpha",
+ "Development Status :: 4 - Beta",
"Environment :: X11 Applications :: Qt",
"Intended Audience :: End Users/Desktop",
("License :: OSI Approved :: GNU General "
"Public License v3 or later (GPLv3+)"),
"Operating System :: OS Independent",
"Programming Language :: Python",
- "Programming Language :: Python :: 2.6",
"Programming Language :: Python :: 2.7",
"Topic :: Security",
'Topic :: Security :: Cryptography',
@@ -276,7 +275,6 @@ class cmd_build(versioneer_build):
copy_reqs(self.build_lib)
-
class cmd_sdist(versioneer_sdist):
user_options = versioneer_sdist.user_options + \
@@ -300,14 +298,20 @@ class cmd_sdist(versioneer_sdist):
# We need to copy the requirements to the specified path
# so that the client has a copy to do the startup checks.
copy_reqs(base_dir, withsrc=True)
- with open(os.path.join(base_dir,
- 'src', 'leap', '__init__.py'),
- 'w') as nuke_top_init:
- nuke_top_init.write('')
- with open(os.path.join(base_dir,
- 'src', 'leap', 'soledad', '__init__.py'),
- 'w') as nuke_soledad_ns:
- nuke_soledad_ns.write('')
+ try:
+ with open(os.path.join(base_dir,
+ 'src', 'leap', '__init__.py'),
+ 'w') as nuke_top_init:
+ nuke_top_init.write('')
+ except Exception:
+ pass
+ try:
+ with open(os.path.join(base_dir,
+ 'src', 'leap', 'soledad', '__init__.py'),
+ 'w') as nuke_soledad_ns:
+ nuke_soledad_ns.write('')
+ except Exception:
+ pass
def make_distribution(self):
# add our extra files to the list just before building the
@@ -361,7 +365,10 @@ class cmd_sdist(versioneer_sdist):
for module in self.leap_sumo_packages:
# check, just in case...
if module and module != "bitmask":
- shutil.rmtree("src/leap/" + _fix_namespace(module))
+ try:
+ shutil.rmtree("src/leap/" + _fix_namespace(module))
+ except Exception:
+ pass
import shutil
diff --git a/src/leap/bitmask/gui/mail_status.py b/src/leap/bitmask/gui/mail_status.py
index eebae49b..8b4329d7 100644
--- a/src/leap/bitmask/gui/mail_status.py
+++ b/src/leap/bitmask/gui/mail_status.py
@@ -58,6 +58,8 @@ class MailStatusWidget(QtGui.QWidget):
self.ui = Ui_MailStatusWidget()
self.ui.setupUi(self)
+ self.ui.lblMailReadyHelp.setVisible(False)
+
# set systray tooltip status
self._mx_status = ""
self._service_name = get_service_display_name(MX_SERVICE)
@@ -103,6 +105,8 @@ class MailStatusWidget(QtGui.QWidget):
callback=self._mail_handle_imap_events)
register(event=catalog.SMTP_SERVICE_STARTED,
callback=self._mail_handle_imap_events)
+ register(event=catalog.IMAP_CLIENT_LOGIN,
+ callback=self._mail_handle_imap_events)
self._soledad_event.connect(
self._mail_handle_soledad_events_slot)
@@ -415,6 +419,10 @@ class MailStatusWidget(QtGui.QWidget):
self._show_unread_mails()
elif event == catalog.IMAP_SERVICE_STARTED:
self._imap_started = True
+ elif event == catalog.IMAP_CLIENT_LOGIN:
+ # If a MUA has logged in then we don't need to show this.
+ self._hide_mail_ready_help()
+
if ext_status is not None:
self._set_mail_status(ext_status, ready=1)
@@ -483,6 +491,15 @@ class MailStatusWidget(QtGui.QWidget):
"""
self._set_mail_status(self.tr("ON"), 2)
+ # this help message will hide when the MUA connects
+ self.ui.lblMailReadyHelp.setVisible(True)
+
+ def _hide_mail_ready_help(self):
+ """
+ Hide the mail help message on the UI.
+ """
+ self.ui.lblMailReadyHelp.setVisible(False)
+
def mail_state_disabled(self):
"""
Display the correct UI for the disabled state.
diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index 387c6283..a8a4e41d 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -1021,9 +1021,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
"Version: <b>{ver}</b> ({ver_hash})<br>"
"<br>{greet}"
"Bitmask is the Desktop client application for the LEAP "
- "platform, supporting encrypted internet proxy.<br>"
- # "Secure email is comming soon.<br>"
- "<br>"
+ "platform, supporting Encrypted Internet Proxy "
+ "and <a href='https://bitmask.net/help/email'> "
+ "Encrypted Email</a>.<br><br>"
"LEAP is a non-profit dedicated to giving all internet users "
"access to secure communication. Our focus is on adapting "
"encryption technology to make it easy to use and widely "
diff --git a/src/leap/bitmask/gui/ui/mail_status.ui b/src/leap/bitmask/gui/ui/mail_status.ui
index 6fd63aec..8e8f1848 100644
--- a/src/leap/bitmask/gui/ui/mail_status.ui
+++ b/src/leap/bitmask/gui/ui/mail_status.ui
@@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>79</height>
+ <width>417</width>
+ <height>185</height>
</rect>
</property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -23,9 +23,9 @@
<property name="topMargin">
<number>0</number>
</property>
- <item row="0" column="1" rowspan="2">
+ <item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_3">
- <item row="1" column="1">
+ <item row="0" column="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -38,17 +38,20 @@
</property>
</spacer>
</item>
- <item row="2" column="0" colspan="3">
- <widget class="QLabel" name="lblMailStatus">
- <property name="styleSheet">
- <string notr="true">color: rgb(80, 80, 80);</string>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
<property name="text">
- <string>You must login to use encrypted email.</string>
+ <string>Email</string>
</property>
</widget>
</item>
- <item row="1" column="3">
+ <item row="0" column="4">
<widget class="QLabel" name="lblMailStatusIcon">
<property name="maximumSize">
<size>
@@ -67,47 +70,69 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item row="3" column="1" colspan="2">
+ <widget class="QLabel" name="lblMailReadyHelp">
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: #e0efd8;
+padding: 10px;</string>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
</property>
<property name="text">
- <string>Email</string>
+ <string>Congratulations! You are ready to use Bitmask to encrypt your email. Go to &lt;a href=&quot;https://bitmask.net/en/help/email&quot;&gt;https://bitmask.net/en/help/email&lt;/a&gt; for instructions on how to set up your mail client.</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::AutoText</enum>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="indent">
+ <number>-1</number>
</property>
</widget>
</item>
<item row="0" column="0">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string/>
</property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <property name="pixmap">
+ <pixmap resource="../../../../../data/resources/icons.qrc">:/images/black/32/email.png</pixmap>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>5</height>
- </size>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2">
+ <widget class="QLabel" name="lblMailStatus">
+ <property name="styleSheet">
+ <string notr="true">color: rgb(80, 80, 80);</string>
</property>
- </spacer>
+ <property name="text">
+ <string>You must login to use encrypted email.</string>
+ </property>
+ </widget>
</item>
</layout>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string/>
- </property>
- <property name="pixmap">
- <pixmap resource="../../../../../data/resources/icons.qrc">:/images/black/32/email.png</pixmap>
- </property>
- </widget>
- </item>
</layout>
</widget>
<resources>
diff --git a/src/leap/bitmask/provider/pinned.py b/src/leap/bitmask/provider/pinned.py
index ea1788eb..db46bde6 100644
--- a/src/leap/bitmask/provider/pinned.py
+++ b/src/leap/bitmask/provider/pinned.py
@@ -20,6 +20,7 @@ Pinned Providers
from leap.bitmask.logs.utils import get_logger
from leap.bitmask.provider import pinned_calyx
from leap.bitmask.provider import pinned_demobitmask
+from leap.bitmask.provider import pinned_mailbitmask
from leap.bitmask.provider import pinned_riseup
logger = get_logger()
@@ -46,7 +47,11 @@ class PinnedProviders(object):
pinned_riseup.DOMAIN: {
CONFIG_KEY: pinned_riseup.PROVIDER_JSON,
CACERT_KEY: pinned_riseup.CACERT_PEM,
- }
+ },
+ pinned_mailbitmask.DOMAIN: {
+ CONFIG_KEY: pinned_mailbitmask.PROVIDER_JSON,
+ CACERT_KEY: pinned_mailbitmask.CACERT_PEM,
+ },
}
def __init__(self):
diff --git a/src/leap/bitmask/provider/pinned_mailbitmask.py b/src/leap/bitmask/provider/pinned_mailbitmask.py
new file mode 100644
index 00000000..5adec33e
--- /dev/null
+++ b/src/leap/bitmask/provider/pinned_mailbitmask.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+# pinned_mailbitmask.py
+# Copyright (C) 2015 LEAP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+Pinned provider.json and cacert.pem for mail.bitmask.net
+"""
+
+DOMAIN = "mail.bitmask.net"
+
+PROVIDER_JSON = """
+{
+ "api_uri": "https://api.mail.bitmask.net:4430",
+ "api_version": "1",
+ "ca_cert_fingerprint": "SHA256: 0f17c033115f6b76ff67871872303ff65034efe7dd1b910062ca323eb4da5c7e",
+ "ca_cert_uri": "https://mail.bitmask.net/ca.crt",
+ "default_language": "en",
+ "description": {
+ "el": "Bitmask \u03b5\u03af\u03bd\u03b1\u03b9 \u03ad\u03bd\u03b1 \u03ad\u03c1\u03b3\u03bf \u03c4\u03bf\u03c5 LEAP \u03bc\u03b5 \u03c3\u03ba\u03bf\u03c0\u03cc \u03c4\u03bf\u03bd \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03cc\u03b4\u03bf\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03c2 \u03b1\u03be\u03b9\u03bf\u03c0\u03b9\u03c3\u03c4\u03af\u03b1\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03b9\u03ba\u03bf\u03cd LEAP. Bitmask \u03c4\u03c1\u03ad\u03c7\u03b5\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b9\u03c2 \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 \u03b1\u03b9\u03bc\u03bf\u03c1\u03c1\u03b1\u03b3\u03af\u03b1 \u03ac\u03ba\u03c1\u03bf \u03c4\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 LEAP, \u03ba\u03b1\u03b9 \u03b8\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03c0\u03b9\u03b8\u03b1\u03bd\u03cc\u03c4\u03b1\u03c4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b1\u03b9 \u03bb\u03b9\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03b1\u03be\u03b9\u03bf\u03c0\u03b9\u03c3\u03c4\u03af\u03b1 \u03b1\u03c0\u03cc \u03ac\u03bb\u03bb\u03bf\u03c5\u03c2 \u03c6\u03bf\u03c1\u03b5\u03af\u03c2 \u03c0\u03b1\u03c1\u03bf\u03c7\u03ae\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd.",
+ "en": "Bitmask is a project of LEAP with the purpose to test the performance and reliability of the LEAP software. Bitmask runs on the latest bleeding edge of the LEAP code, and will likely have more features and less reliability than other service providers.",
+ "es": "Bitmask es un proyecto de LEAP con el prop\u00f3sito de probar el rendimiento y la fiabilidad del software LEAP. Bitmask corre la \u00faltima versi\u00f3n del c\u00f3digo LEAP, y es de esperar que tenga m\u00e1s funciones y menos fiabilidad que los proveedores de servicios."
+ },
+ "domain": "mail.bitmask.net",
+ "enrollment_policy": "open",
+ "languages": [
+ "de",
+ "en",
+ "es",
+ "pt"
+ ],
+ "name": {
+ "en": "Bitmask"
+ },
+ "service": {
+ "allow_anonymous": false,
+ "allow_free": true,
+ "allow_limited_bandwidth": false,
+ "allow_paid": false,
+ "allow_registration": true,
+ "allow_unlimited_bandwidth": true,
+ "bandwidth_limit": 102400,
+ "default_service_level": 1,
+ "levels": {
+ "1": {
+ "description": "Please donate.",
+ "name": "free"
+ }
+ }
+ },
+ "services": [
+ "mx"
+ ]
+}
+"""
+
+CACERT_PEM = """-----BEGIN CERTIFICATE-----
+MIIFbzCCA1egAwIBAgIBATANBgkqhkiG9w0BAQ0FADBKMRgwFgYDVQQDDA9CaXRt
+YXNrIFJvb3QgQ0ExEDAOBgNVBAoMB0JpdG1hc2sxHDAaBgNVBAsME2h0dHBzOi8v
+Yml0bWFzay5uZXQwHhcNMTIxMTA2MDAwMDAwWhcNMjIxMTA2MDAwMDAwWjBKMRgw
+FgYDVQQDDA9CaXRtYXNrIFJvb3QgQ0ExEDAOBgNVBAoMB0JpdG1hc2sxHDAaBgNV
+BAsME2h0dHBzOi8vYml0bWFzay5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQC1eV4YvayaU+maJbWrD4OHo3d7S1BtDlcvkIRS1Fw3iYDjsyDkZxai
+dHp4EUasfNQ+EVtXUvtk6170EmLco6Elg8SJBQ27trE6nielPRPCfX3fQzETRfvB
+7tNvGw4Jn2YKiYoMD79kkjgyZjkJ2r/bEHUSevmR09BRp86syHZerdNGpXYhcQ84
+CA1+V+603GFIHnrP+uQDdssW93rgDNYu+exT+Wj6STfnUkugyjmPRPjL7wh0tzy+
+znCeLl4xiV3g9sjPnc7r2EQKd5uaTe3j71sDPF92KRk0SSUndREz+B1+Dbe/RGk4
+MEqGFuOzrtsgEhPIX0hplhb0Tgz/rtug+yTT7oJjBa3u20AAOQ38/M99EfdeJvc4
+lPFF1XBBLh6X9UKF72an2NuANiX6XPySnJgZ7nZ09RiYZqVwu/qt3DfvLfhboq+0
+bQvLUPXrVDr70onv5UDjpmEA/cLmaIqqrduuTkFZOym65/PfAPvpGnt7crQj/Ibl
+DEDYZQmP7AS+6zBjoOzNjUGE5r40zWAR1RSi7zliXTu+yfsjXUIhUAWmYR6J3KxB
+lfsiHBQ+8dn9kC3YrUexWoOqBiqJOAJzZh5Y1tqgzfh+2nmHSB2dsQRs7rDRRlyy
+YMbkpzL9ZsOUO2eTP1mmar6YjCN+rggYjRrX71K2SpBG6b1zZxOG+wIDAQABo2Aw
+XjAdBgNVHQ4EFgQUuYGDLL2sswnYpHHvProt1JU+D48wDgYDVR0PAQH/BAQDAgIE
+MAwGA1UdEwQFMAMBAf8wHwYDVR0jBBgwFoAUuYGDLL2sswnYpHHvProt1JU+D48w
+DQYJKoZIhvcNAQENBQADggIBADeG67vaFcbITGpi51264kHPYPEWaXUa5XYbtmBl
+cXYyB6hY5hv/YNuVGJ1gWsDmdeXEyj0j2icGQjYdHRfwhrbEri+h1EZOm1cSBDuY
+k/P5+ctHyOXx8IE79DBsZ6IL61UKIaKhqZBfLGYcWu17DVV6+LT+AKtHhOrv3TSj
+RnAcKnCbKqXLhUPXpK0eTjPYS2zQGQGIhIy9sQXVXJJJsGrPgMxna1Xw2JikBOCG
+htD/JKwt6xBmNwktH0GI/LVtVgSp82Clbn9C4eZN9E5YbVYjLkIEDhpByeC71QhX
+EIQ0ZR56bFuJA/CwValBqV/G9gscTPQqd+iETp8yrFpAVHOW+YzSFbxjTEkBte1J
+aF0vmbqdMAWLk+LEFPQRptZh0B88igtx6tV5oVd+p5IVRM49poLhuPNJGPvMj99l
+mlZ4+AeRUnbOOeAEuvpLJbel4rhwFzmUiGoeTVoPZyMevWcVFq6BMkS+jRR2w0jK
+G6b0v5XDHlcFYPOgUrtsOBFJVwbutLvxdk6q37kIFnWCd8L3kmES5q4wjyFK47Co
+Ja8zlx64jmMZPg/t3wWqkZgXZ14qnbyG5/lGsj5CwVtfDljrhN0oCWK1FZaUmW3d
+69db12/g4f6phldhxiWuGC/W6fCW5kre7nmhshcltqAJJuU47iX+DarBFiIj816e
+yV8e
+-----END CERTIFICATE-----"""