Files
proton-bridge/Changelog.md

1017 lines
43 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ProtonMail Bridge Changelog
Changelog [format](http://keepachangelog.com/en/1.0.0/)
## [IE 1.1.2] Danube (beta 2020-09-xx)
### Fixed
* GODT-770 Better handling of extraneous end-of-mail indicator.
### Changed
* Bump crypto version to v0.0.0-20200818122824-ed5d25e28db8
## [Bridge 1.4.4] Forth
### Fixed
* GODT-798 Replace, don't add, transfer encoding when making body 7-bit clean.
* Move/Copy duplicate for emails with References in Outlook
* CSB-247 Cannot update from 1.4.0
## [Bridge 1.4.3] Forth
### Changed
* Reverted sending IMAP updates to be not blocking again.
### Fixed
* GODT-783 Settings flags by FLAGS (not using +/-FLAGS) do not change spam state.
## [Bridge 1.4.2] Forth
### Changed
* GODT-761 Use label.Path instead of Name to partially support subfolders for webapp beta release.
* GODT-765 Improve speed of checking whether message is deleted.
## [IE 1.1.1] Danube (beta 2020-09-xx) [Bridge 1.4.1] Forth (beta 2020-09-xx)
### Fixed
* GODT-752 Parsing message with empty addresses.
* GODT-752 Parsing non-utf8 multipart/alternative message.
* GODT-752 Parsing message with duplicate charset parameter.
## [IE 1.1.0] Danube
### Fixed
* GODT-703 Import-Export showed always at least one total message.
* GODT-738 Fix for mbox files with long lines.
## [Bridge 1.4.0] Forth
### Added
* GODT-682 Persistent anonymous API cookies for Import-Export.
* GODT-357 Use go-message to make a better message parser.
* GODT-720 Time measurement of progress for Import-Export.
### Changed
* GODT-511 User agent format changed.
* Unsilent errors reading mbox files.
* GODT-692 QA build with option to change API URL by ENV variable.
* GODT-704 User agent detected by fake IMAP extension instead of AUTH callback (some clients use LOGIN instead of AUTH).
* GODT-695 Parallel upload for ProtonMail target.
### Removed
* GODT-519 Unused AUTH scope parsing methods.
### Fixed
* GODT-698 Use correct package type for signed PGP/Inline messages.
* Generic bug report window title.
* Fix missing check for unencrypted recipients during sending.
* Version checking for catalina.
* GODT-730 Limit maximal TLS version for Yahoo IMAP server.
## [IE 1.0.x] Congo (v1.0.0 live 2020-09-08)
### Added
* GODT-633 Persistent anonymous API cookies for better load balancing and abuse detection.
* GODT-461 Add support for `\Deleted` flag.
### Changed
* GODT-462 Pausing event loop while FETCHing to prevent EXPUNGE
* Wait for unilateral response to be delivered
* GODT-409 Set flags have to replace all flags.
* GODT-531 Better way to add trusted certificate in macOS.
* Bumped golangci-lint to v1.29.0
* GODT-549 Check log file size more often to prevent huge log files.
* Bumped various dependencies:
* andybalholm/cascadia v1.1.0 -> v1.2.0
* emersion/go-imap-specialuse 20161227184202-ba031ced6a62 -> 20200722111535-598ff00e4075
* emersion/go-sasl 20191210011802-430746ea8b9b -> 20200509203442-7bfe0ed36a21
* github.com/go-resty/resty/v2 v2.2.0 -> v2.3.0
* github.com/golang/mock v1.4.3 -> v1.4.4
* github.com/google/go-cmp v0.4.0 -> v0.5.1
* github.com/hashicorp/go-multierror v1.0.0 -> v1.1.0
* github.com/jaytaylor/html2text 20200220170450-61d9dc4d7195 -> 20200412013138-3577fbdbcff7
* github.com/jhillyerd/enmime v0.8.0 -> v0.8.1
* github.com/keybase/go-keychain 20200218013740-86d4642e4ce2 -> 20200502122510-cda31fe0c86d
* github.com/logrusorgru/aurora 20200102142835-e9ef32dff381 -> v2.0.3+incompatible
* github.com/miekg/dns v1.1.29 -> v1.1.30
* github.com/nsf/jsondiff 20190712045011-8443391ee9b6 -> 20200515183724-f29ed568f4ce
* github.com/sirupsen/logrus v1.4.2 -> v1.6.0
* github.com/stretchr/testify v1.5.1 -> v1.6.1
* github.com/therecipe/qt 20200126204426-5074eb6d8c41 -> 20200701200531-7f61353ee73e
* github.com/urfave/cli v1.22.3 -> v1.22.4
* golang.org/x/net 20200301022130-244492dfa37a -> 20200707034311-ab3426394381
* golang.org/x/text v0.3.2 -> v0.3.3
* Set first-start to false in bridge, not in frontend.
* GODT-400 Refactor sendingInfo.
* GODT-513 Update routes to API v4.
* GODT-551 Do not ignore errors during message flagging.
* GODT-380 Adding IE GUI to Bridge repo and building
* BR: extend functionality of PopupDialog
* BR: makefile APP_VERSION instead of BRIDGE_VERSION
* BR: use common logs function for Qt
* BR: change `go.progressDescription` to `string`
* IE: Rounded button has fa-icon
* IE: `Upgrade``Update`
* IE: Moving `AccountModel` to `qt-common`
* IE: Added `ReportBug` to `internal/importexport`
* IE: Added event watch in GUI
* IE: Removed `onLoginFinished`
* Structure for transfer rules in QML
* GODT-213 Convert panics from message parser to error.
* GODT-585 Do not allow deleting messages from All Mail.
### Fixed
* GODT-655 Fix date picker with automatic Windows DST
* GODT-454 Fix send on closed channel when receiving unencrypted send confirmation from GUI.
* GODT-597 Duplicate sending when draft creation takes too long
* GODT-634 Hover on links in popups.
## [v1.3.x] Emma (v1.3.2 beta 2020-08-04, v1.3.3 beta 2020-08-06, v1.3.3 live 2020-08-12)
### Added
* GODT-554 Detect and notify about "bad certificate" IMAP TLS error.
* IMAP mailbox info update when new mailbox is created.
* GODT-72 Use ISO-8859-1 encoding if charset is not specified and it isn't UTF-8.
### Changed
* GODT-360 Detect charset embedded in html/xml.
* GODT-354 Do not label/unlabel messsages from `All Mail` folder.
* GODT-388 Support for both bridge and import/export credentials by package users.
* GODT-387 Store factory to make store optional.
* GODT-386 Renamed bridge to general users and keep bridge only for bridge stuff.
* GODT-312 Validate recipient emails in send before asking for their public keys.
* GODT-368 Bump docker-credential-helpers version.
* GODT-394 Don't check SMTP message send time in integration tests.
* GODT-280 Migrate to gopenpgp v2.
* `Unlock()` call on pmapi-client unlocks both User keys and Address keys.
* Salt is available via `AuthSalt()` method.
* GODT-308 Better user error message when request is canceled.
* GODT-162 User Agent does not contain bridge version, only client in format `client name/client version (os)`.
* GODT-258 Update go-imap to v1.
* Fix UNSEEN to return sequence number of first unseen message and not count of unseen messages.
* INBOX name is never quoted.
* GODT-204 `ClientManager`.
* `Client` is now an interface; `client` is the concrete type.
* `Client`s are only created by `ClientManager`.
* Only one `Client` per userID exists at any given time; clients are reused.
* Tokens are managed by `ClientManager` (`TokenManager` is removed).
* `expiresAt` is no longer part of `Client`; token expiry and refreshing is handled by `ClientManager`.
* Auths generated by clients during Auth/AuthRefresh are handled by `ClientManager` (which forwards them to `Bridge`).
* `ClientManager` is the "one source of truth" for the host URL for all `Client`s.
* Alternative Routing is enabled/disabled by `ClientManager`.
* Logging out of `Clients` is handled/retried asynchronously by `ClientManager`.
* GODT-265 Alternative Routing v2 (more resiliant to short term connection drops).
* GODT-310 Alternative parsing of `References` header (old parsing probably malformed message IDs).
* GODT-320 Only report the same TLS issue once every 24 hours.
* GODT-468 Bump go-imap version to get fix for NIL client delimiter.
* GODT-465 Bump go-imap version to get fix for SELECT function.
* GODT-456 Bump bbolt version from 1.3.3 to 1.3.5 to get fixes for unsafe operations.
### Removed
* Dead code from `pkg/message`.
### Fixed
* GODT-356 Fix crash when removing account while mail client is fetching messages (regression from GODT-204).
* GODT-358 Bad timeouts with Alternative Routing.
* GODT-363 Drafts are not deleted when already created on webapp.
* GODT-390 Don't logout user if AuthRefresh fails because internet was off.
* GODT-341 Fixed flaky unittest for Store synchronization cooldown.
* Crash when failing to match necessary html element.
* Crash in message.combineParts when copying nil slice.
* Handle double charset better by using local ParseMediaType instead of mime.ParseMediaType.
* Don't remove log dir.
* GODT-422 Fix element not found (avoid listing credentials, prefer getting).
* GODT-404 Don't keep connections to proxy servers alive if user disables DoH.
* Ensure DoH is used at startup to load users for the initial auth.
* Issue causing deadlock when reloading users keys due to double-locking of a mutex.
* Correctly handle failure to unlock single key.
* GODT-479 Fix flaky integration tests.
* GODT-484 Fix infinite loop when decoding invalid 2231 charset
* GODT-267 Correctly detect if a message is a draft even if does not have DraftLabel.
* GODT-308 Reduce minimum read speed threshold to avoid issues with flaky internet.
* GODT-321 Changing address ordering would cause all messages to disappear in combined mode.
* GODT-129 Fix custom message PGP by using template.
* GODT-280 Don't assume contact keys are stored armored.
* GODT-427 Fix race condition in auth refresh that could cause user to be logged out.
## [v1.2.8] Donghai-fix-append (beta 2020-06-XXX)
### Changed
* GODT-396 reduce number of EXISTS calls.
* GODT-143 Allow appending to Sent folder when sender matches account address.
### Fixed
* GODT-502 Fixed crash when unable to parse a message header.
## [v1.2.7] Donghai-fix-sync - (beta 2020-05-07 live 2020-04-20)
### Added
* IMAP extension MOVE with UIDPLUS support.
* IMAP extension Unselect.
* More logs about event loop activity.
### Changed
* GODT-313 Reduce number of synchronizations.
* Do not trigger sync by counts.
* Cooldown timer for sync retries.
* Poll interval randomization.
* GODT-225 Do not send an EXISTS reposnse after EXPUNGE or when nothing changed (fixes rebuild of mailboxes in Outlook for Mac).
* GODT-165 Optimization of RebuildMailboxes.
* GODT-282 Completely delete old draft instead moving to trash when user updates draft.
* Adding DSN Sentry as build time parameter.
* GODT-124 Bump go-appdir from v1.0.0 to v1.1.0.
* CSB-72 Skip processing message update event if http statuscode is 422.
### Fixed
* Use correct binary name when finding location of addcert.scpt.
## [v1.2.6] Donghai - beta (2020-03-31)
### Added
* GODT-145 Support drafts.
* GODT-211,GODT-231 fix updating subject and other fields.
* GODT-220 Fix deleting drafts.
* GODT-224 Fix creating draft from outlook without sender.
* GODT-230,GODT-232 fix constructing sender address for drafts.
* Sync already synced draft to newly created drafts mailbox.
* Add Subject to EventMessageUpdated in pmapi.
* GODT-37 Add body and TLS handshake timeouts.
* GODT-90 Implement DOH (DNS over HTTPS) proxy.
* Noninteractive mode.
### Changed
* Bump version go-1.14.
* Bump dependencies:
| Repo | Old Version | New Version |
| github.com/0xAX/notificator | v0.0.0-20161214074916-82e921414e03 | v0.0.0-20191016112426-3962a5ea8da1 |
| github.com/ProtonMail/go-autostart | v0.0.0-20171017232241-85d98b097aae | v0.0.0-20181114175602-c5272053443a |
| github.com/abiosoft/ishell | v0.0.0-20171224170712-50251d04cb42 | v2.0.0+incompatible |
| github.com/emersion/go-sasl | v0.0.0-20161116183048-7e096a0a6197 | v0.0.0-20191210011802-430746ea8b9b |
| github.com/fatih/color | v1.7.0 | v1.9.0 |
| github.com/golang/mock | v1.4.2 | v1.4.3 |
| github.com/google/go-cmp | v0.3.1 | v0.4.0 |
| github.com/jaytaylor/html2text | v0.0.0-20190408195923-01ec452cbe43 | v0.0.0-20200220170450-61d9dc4d7195 |
| github.com/jhillyerd/enmime | v0.7.0 | v0.8.0 |
| github.com/logrusorgru/aurora | v0.0.0-20190803045625-94edacc10f9b | v0.0.0-20200102142835-e9ef32dff381 |
| github.com/skratchdot/open-golang | v0.0.0-20160302144031-75fb7ed4208c | v0.0.0-20200116055534-eef842397966 |
| github.com/stretchr/testify | v1.4.0 | v1.5.1 |
| github.com/therecipe/qt | v0.0.0-20191022233421-590f404884c9 | v0.0.0-20200126204426-5074eb6d8c41 |
| github.com/urfave/cli | v1.19.1 | v1.22.3 |
* Pkg/updates: closing File reader to avoid too many opened files during update.
* Created monorepo with bridge, pmapi, bridge utils, mime and srp.
* One lint config for all packages and lint fixes in the code.
* Fix tests for bridge utils to work on MacOS.
* All tests use testify framework.
* Processed TODOs or created issues.
* Cleanup up comments.
* GODT-169 Reduce the number of keyring unlocks.
* CSB-40 return error instead of panic in credential store.
* #577 Avoid multiple send.
* GODT-39 Sync is paging per message ID with ability to continue after interrupted sync.
* Panic handler used in store for event loop and sync.
* GODT-109 Merge only 50 events into one.
* Use v1.0.16 of pmapi.
* GODT-236 Requests to /messages/{read,unread,delete,undelete,label,unlabel} are paged with up to 100 message IDs.
### Fixed
* GODT-227 Mitigate potential crash due to using a logged out pmapi client (proper fix to come in emma release).
* UserIDs were not checked when importing to Sent folder (affects copying from account1/sent to account2/sent).
## [v1.2.5] Charles - live (2020-03-11) beta (from 2020-02-10)
### Hotfix
* CSB-40 panic in credential store.
* Keyring unlocking locker.
* No panic on failed html parse.
* Too many open files.
### Added
* GODT-112 Migration of preferences from c10 to c11.
* GODT-100 Test for external internal ID when appending to Sent folder to return APPEND UID otherwise skip with no error.
* GODT-43 Connection troubleshooting modal.
* GODT-55 Uid support in fake api.
* GODT-88 Increase uid validity on switch mode.
* #951 Implementation of IMAP extension UIDPLUS.
* #964 New store package, see Changed section.
### Removed
* MOVE IMAP extension due to missing interaction with UIDPLUS.
### Changed
* GODT-88 Run mbox sync in parallel when switch password mode (re-init not user).
* GODT-95 Do not throw error when trying to create new mailbox in IMAP root.
* GODT-75 Do not fail on unlabel inside delete.
* #1095 always delete IMAP USER including wrong pasword.
* Unique pmapi client userID (including #1098).
* Using go.enmime@v0.6.1 snapshot.
* Better detection of non-auth-error.
* Reset `hasAuthChannel` during logout for proper login functionality (set up auth channel and unlock keys).
* Allow `APPEND` messages without parsable email address in sender field.
* #1060 avoid `Append` after internal message ID was found and message was copyed to mailbox using `MessageLabel`.
* #1049 Basic usage of store in SMTP package to poll event loop during sending message.
* #1050 pollNow waits for events to be processed.
* #1047 Fix fetch of empty mailbox.
* #1046 Fix removing mailbox counts.
* #1048 For any message build error return custom message.
* When event loop exits with error it logs out user from Bridge.
* #953 #984 First label messages before unlabeling when moving messages.
* Fixes after refactor:
* Slight memory optimization.
* #1043 do not stuck in loop for updating message which does not exist anywhere anymore.
* #1034 fix UID dynamic range for empty list.
* Fix of sequence number in IMAP IDLE expunge during deleting messages.
* #1030 #1028 Fix some crashes and bad auths.
* #953 #984 label messages first during moving them.
* #964 (and #769,#899,#918,#930,#931,#949) refactor of IMAP.
* Fix of sequence number in IMAP IDLE expunge during deleting messages.
* Fix not-returning empty result for UID dynamic range as said in RFC.
* Separated IMAP to store and IMAP.
* Store is responsible for everything about db and calls to pmapi, including event loop, sync, address mode.
* IMAP is responsible only for IMAP interfaces.
* Event loop is only one per ProtonMail account (instead of one per alias)
* It also means only one database per account (instead of one per address)
* Changing address mode is not destroying database, only buckets with IDs mapping (keeping metadata for account)
* Before first sync we set event ID so we will not miss changes happening during sync.
* Thanks to previous point we are not starting new sync when we finish first one because of unprocessed events.
* Sync is not blocking event loop (user can get new messages even during sync)
* Sync is not blocking reading operations (user can list mailboxes even before first sync is done)
* Sync is not blocking writing operations such as mark messages read/unread and so on.
* Most operations have to be passed to API and only event loop is writing them to the database.
* Avoid relying on counts API endpoint; use event counts as much as possible.
* Separate function for storing message content type and header into database.
* Sequence number optimised for last item in mailbox.
* Allow sending IMAP idle update to timeout to avoid blocking bridge.
* Synchronisation will create a label if not yet present.
* Labels and Folders (including system folders) are stored in DB together with their counts for offline read-out.
* AddressIDs for all user addresses are stored in DB.
* IMAP updates channel is set when an IMAP client connects (and IMAP updates are dropped until then)
* DB keeps track of address mode (split/combined)
* Event loop starts as soon as user is initialised (i.e. logged in), not just when imap is connected.
* Use pmapi v1.0.13.
* Logout user if initialisation fails.
* Send UserRefreshEvent on user login and logout.
* Use godog v0.8.0 under new name 'cucumber' (instead of DATA-DOG).
### Fixed
* #1057 Logging in to an already logged in user would display unrelated error "invalid mailbox password".
* #1056 Changing mailbox password sometimes didn't log out user.
* #1066 Split address mode can not work when credentials store is cleared.
* #1071 Bridge can think it is in combined mode when actually it's in split mode.
* Missing `enmime` dependency.
* Issue where a failed sync was not attempted again.
* Removing an address would crash bridge.
* #1087 Accounts with capital letters could not be added.
* #1087 Inactive addresses were not filtered out of the store.
* #1087 Unlock with correct key if message is sent to alias and not primary (aka original) address.
* #1109 Receiving an event referencing an address that isn't present could crash bridge.
* Avoid concurrent map writes in imap backend.
* GODT-103 User keys were not unlocked later if they were not unlocked during startup.
## [v1.2.4] Brooklyn beta (2019-12-16)
### Added
* #976: fix slow authentication.
* Server security setting in info (GUI, CLI).
* Default SSL for SMTP based on Mac version.
* GUI/CLI items to controls SMTP security setup.
* Set new security and restart.
### Changed
* #961 Timeouts for go-pmapi client with http.Transport.
* Event poll with no change will hang forever. Using separate goroutine and timeout instead of proper fix (will be in refactor).
* Fixed an issue where entering an in-use port multiple times via the CLI would make bridge use it.
* Update therecipe/qt and Qt to 5.13.
## [v1.2.3] Akashi - live (2019-11-05) beta (2019-10-22)
### Added
* #963 report first-start metric with bridge version.
* #941 report new-login metric, report daily heartbeat.
* #921 remote key lookup via Web Key Directory (WKD).
* #919 TLS issue notification in CLI.
### Changed
* #769 #930 #931 #949 Syncing messages and fetching message and attachments in parallel with five workers.
* #956 #741 update keychain.
* Re-download and re-unlock user keyring when addresses are changed.
* #944 Ugrade go-pmapi dependency to v1.0.4 to support phase one of the key migration.
* #683 Password rehides each time password entry screen is shown.
* Import-Export#219 fix double parameter definition.
* Upgrade go-pm-bridge-utils dependency to v1.0.1.
* #935 Fix wrong download link for linux updates.
* #952 fix error when sending mail with only BCC recipients (use empty slice instead of nil slice).
* Refactor `generateSendingInfo` to simplify logic; add test for this method.
* Generate code-coverage report with `make code-coverage`.
* #942 fix focus window with logout message when trying to connect from the client.
* Do not use panic for second instance.
* #928 do not hide 'no keychain' dialog when upgrade is needed.
* Sending `NO` for errors while `FETCH`.
* #899 Upgrade from Bolt to BBolt.
* Upgrade to gopenpgp.
* Bridge utils in own repository.
* Code made compatible with name changes in go-pmapi.
## [v1.2.2] - beta and live 2019-09-06
### Changed
* User compare case insensitive.
## [v1.2.1] - beta and live 2019-09-05
### Changed
* #924 fix start of bridge without internet connection.
## [v1.2.0] - beta 2019-08-22
### Added
* #903 added http.Client timeout to not hang out forever.
* Closing body after checking internet connection.
* Pedantic lint for bridgeUtils.
* Selected events are buffered and emited again when frontend loop is ready.
* #890 implemented 2FA endpoint (auth split).
* #888 TLS Cert.
* Error bar and modal with explanation in GUI.
* Signal to show error.
* Add pinning to bridge (only for live API builds).
* #887 #883:
* Wait before clearing data.
* Configer which provides pmapi.ClientConfig and app directories.
* #861 restart after clear data.
* Panic handler for all goroutines.
* CD for linux.
* #798.
* Check counts after sync.
* Update counts in all mailboxes after sync.
* `db.Mailbox.RemoveMissing`, `db.Mailbox.PutMany`.
* `util.NotImplemented`.
* Tests for sync.
* Bridge core tests:
* Introduced interfaces: `pmapiClienterFactory`, `pmapiClienter`, `credentialStorer`.
* Automatic mock generation for `listener.Listener`, `bridge.pmapiClienter`, `bridge.credentialStorer`.
* #818 REFACTOR: see doc/code-structure.md.
* Tests for bridge core & utils.
* Update user before `GetQuota`.
* Http bridge API.
* Bridge core tests:
* Introduced interfaces: `pmapiClienterFactory`, `pmapiClienter`, `credentialStorer`.
* Automatic mock generation for `listener.Listener`, `bridge.pmapiClienter`, `bridge.credentialStorer`.
* #774 start initialization with sync immediately after login.
### Removed
* Using `PutMeta` for DB to not rewrite header and size.
* `Timeout` for connection (keep only `DialTimeout`).
* #798 `imapMailbox.sync`.
* #818 REFACTOR: see doc/code-structure.md.
* Bridge global functions `GetAuth`, `GetAuthInfo`, `GetUserSettings` (using member functions of `pmapi.Client` instead).
* `backend.setCache`: not used.
* IMAP extension for `XSTOP` and `XFOCUS`.
* Keychain `Disconnected` is not used, deleting directly (not using hide).
* `apiIdFrom(uid bool, id uint32)`, `apiIdRangeFromSeq(uid bool, seq imap.Seq)`: not used.
* `server/dial.go` not used.
* Util `CustomMessage`, `StartTicker` not used.
### Changed
* Check before first even sync.
* Do sync in parallel from events.
* Closing event loop by CloseConnectionEvent.
* Allow client to log in with address only.
* Fix IMAP users lock.
* #646 download headers when needed for first time.
* #895 fix of parsing address list.
* #844 do not spam GUI with logout events & sleep after bad login attempt from the client.
* #887 #883 #898 #902 logout account from API and all IMAP connections before clearing cache for account.
* #882 unassign PMAPI client after logout and force to run garbage collector.
* #880, #884, #885, #886 fix of informing user about outgoing non-encrypted e-mail.
* #838 `Sirupsen` -> `sirupsen`.
* #893 save panic report file everytime.
* #880 fix of informing user about outgoing non-encrypted e-mail.
* Fix aliases in split mode.
* Fix decrypted data in log notification.
* #471 fix of using font awesome in regular text.
* `SearchMessage` all IDs from DB not depends on `totalOnAPI`.
* #798 populate efficiently.
* Improved `imap.db.mailbox.Counts()`.
* `mbox.total,unread` -> `mbox.totalOnAPI,unreadOnAPI`.
* Always show DB status (even for `IDLE` updates).
* `imapUser.sync` now takes `labelID` as parameter.
* Split population by 1000 messages.
* `db.User.put(msgs,keepCache)` is used in sync to not overwrite `msg.Size` and `msg.Header` in DB.
* Separate sync function from `backend.labelMailbox` class.
* `UidNext` uses bolt sequence value instead of cursor position.
* `util.tests.go` moved to `bridgeUtils`.
* #471 fix of using font awesome in regular text.
* #818 REFACTOR: see doc/code-structure.md.
* No global states/variables anymore.
* Code separated from one big package into smaller packages (bridge core, utils, IMAP, SMTP, API).
* Bridge core completely refactored - core should be API over credentials store and PMAPI.
* Configuration and preferences are on one place; passed as dependency to all packages.
* Bridge utils separated from the rest of the bridge code to be used in Import/Export.
* Many channels converted into one listener which can register listeners and emit events to them.
* Each package is ready to be used with interfaces for possibility of mocking.
* Removed IMAP extension XFOCUS, used bridge local API instead.
* Removed IMAP extension XSTOP.
* Sentry is not used in dev environment.
* Logs are not cleared after start, clearing is triggered by `watchLogFileSize()` instead.
* Log path changed one folder level up i.e. from `.../protonmail/bridge/c10` to `.../protonmail/bridge`.
* Always cleared malformed keychain records.
* Set credentials version on each `Put`.
* `util.WriteHeader` -> `imap.writeHeader`.
* Save `message.ExternalID` for every client not just AppleMail.
* Server errors reported to frontend by common event listener.
* Handle logout in event loop.
## [v1.1.6] - 2019-07-09 (beta 2019-07-01)
### Added
* #841 assume text/plain during sending e-mails when missing content type.
* #805 list the new package links in upgrade dialog for linux.
* #802 report the list errors to sentry.
* #508 content related header fields for mail are saved in DB inside `msg.Header`.
* #508 `doNotCacheError` to decide whether to rebuild message.
* CI with lint check.
* Build flag `nogui`.
* Dummy html interface.
### Removed
* #508 content type rewrite on `GetHeader`.
* #508 content type on custom message.
### Changed
* #854 avoid `nil` header and bodystructure on fail (as regression of #508).
* Sanitize version in json file.
* #850 keep correct main and body headers for import (as regression of #508).
* #841 choose parent ID only when there is exactly one message with external ID.
* #811 #proton/backend-communication#11 go-pmapi!57 uid fixed.
* Update Qt 5.11.3 to 5.12.0.
* Using gomodules instead of glide.
* #508 use MIMEType and attachments to choose correct `Content-Type`.
* #508 custom message replaces body before header is created.
* #508 main header has `Content-Type` only after message was fully fetched.
* #770 ignore empty key from data card and support multiple keys for contacts.
* Build tags for simpler build of beta and QA builds.
* Lint corrections.
## [v1.1.5] - 2019-05-23 (beta 2019-05-23, 2019-05-16)
### Changed
* Fix custom message format.
* #802 acumulated long lines while parsing body structure.
* Process `AddressEvent` before `MessageEvent`.
* #791 updated crypto: fix wrong signature format.
* #793 fix returning size.
* #706 improved internet connection checking.
* #771 updated raven, crypto, pmapi.
* #792 use `INFO` as basic log level.
* Only one crash from second instance.
* During event `MessageID` in log as field.
## [v1.1.4 live] - 2019-04-10 (beta 2019-04-05, 2019-03-27)
### Added
* Address with port to IMAP debug.
* #750 `backend/events.Manager.LastEvent`.
* #750 `backend.user.areAllEventsProcessed`.
* #750 Wait with message events until all related mailboxes are synchronized.
* Restart limit to 10.
* Release string to raven.
### Changed
* #748 when charset missing assume utf8 and check the validity.
* #750 before sync check that events are uptodate, if not poll events instead of sync.
* Use pmapi with support of decrypted access token.
* #750 Status is using DB status instead of API.
* Format panic error as string instead of struct dump.
* Validity of local certificate to increased to 20 years.
### Removed
* #750 Synchronization after 450 messages.
## [v1.1.3] - 2019-03-04
### Added
* Sentry crash reporting in main.
* Program arguments to turn of CPU and memory profiling.
* Full version of program visible on release notes.
### Changed
* #720 only one concurent DB sync.
* #720 sync every 3 pages.
* #512 extending list of charsets go-pm-mime!4.
## [v1.1.2] - beta only 2019-02-21
### Changed
* #512 fail on unknown charset.
* #729 #733 visitor for MIME parsing.
## [v1.1.1] - 2019-02-11
### Added
* #671 include `name` param in attachment `Content-Type` (in addition to `Content-Disposition` param `filename`).
* #671 do not include content headers for section requests e.g. `BODY.PEEK[2]`.
* Version info checks for newer version (do not show dialog when older is online).
* #592 new header `X-Pm-ConversationID-Id` and also added to `References`.
* #666 invoke `panic` while adding account `jakubqa+crash@protonmail.com`.
* #592 new header fields `X-Pm-Date` storing m.Time and `X-Pm-External-Id` storing m.ExternalID.
* #484 search criteria `Unkeyword` support.
### Changed
* Fix srp modulus issue with new `ProtonMail/crypto`.
* Generate version files from main file.
* Be able to set update set on build.
* #597 check on start that certificat will be still valid after one month and generate new cert if not.
* #597 extended certificate validity to 2 years.
* Copyright 2019.
* Exclude `protontech` repos from credits.
* Refactor of `go-pmapi`, `go-pm-crypto`, `go-pm-mime` and `go-srp`.
* Re-signed pubkey key.
* Version, revision and build time is set in main.
* #666 use `bytes.Reader` instead of `bytes.Buffer`.
* #666 clear unused buffers in body structure map.
* No API request for fetch `body[header]`.
* Added crash file counter to pass log tests.
* #484 search fully relies on DB information (no need to reach API).
* #592 `parsingHeader` allows negative time (before 1.1.1970).
* #592 add original header first and then rewrite.
* #592 `Message-Id` rewritten only if not present.
* #592 rename `X-Internal-Id` to `X-Pm-Internal-Id`.
* #592 internal references are added only when not present already.
* #592 field `Date` changed to m.Time only when wrong format or missing `Date`.
* #645 pmapi#26 `Message.Flags` instead of `IsEncrypted`, `Type`, `IsReplied`, `IsRepliedAll`, `IsForwarded`.
* DB: do not allow to put Body or Attachements to db.
* #574 SMTP: can now send more than one email.
* #671 Verbosity levels: `debug` (only bridge), `debug-client` (bridge and client communication), `debug-server` (bridge, whole SMTP/IMAP communication).
* #644 Return rfc.size 0 or correct size of fetched body (stored in DB).
* #671 API requests URI in debug logs.
* #625 Fix search results for Flagged and Unflagged.
* Draft optimization fetch header.
* #656 Fix sending of calendar invite on Outlook on MacOS.
* #46 Allowed to run multiple instances, once per user.
### Removed
* Makefile clean up old deploy code.
### Release notes
* Support multiple Bridge instances running in parallel (one per user).
### Fixed bugs
* SMTP stays authenticated after sent message.
* Reduce memory, processor and number of API calls.
## [v1.1.0] - 2018-10-22
### Removed
* `go-pmapi.Config.ClientSecret`.
* `go-pmapi.PublicKey.Send`.
* Program argument `main`.
* `backend.getMIMEMessageBodySection` (use `message.BodySection`).
* `backend.getSize` (use `message.BodySection`).
### Added
* IMAP server: more info when write/send/flush error occurs #648.
* Linux package paths inside version-json.
* Draggable popup windows for outgoing non-encrypted message #519.
* Pmapi able to receive plain accessToken go-pmapi#23 #604.
* DB debug switch.
* Clearing message cache when db is cleared.
* Debug string to tests.
* Mime tree section parsing and test.
* Start ticker.
* Dump DB status.
* `backend.ApplicationOutdated()` mechanism: once triggered logout all email clients. On try to login say _application outdated_.
* Force upgrade event (send from event loop).
* New systray with error symbol (used in mac for force update).
* Test for upgrade.
* GUI for upgrade.
* Add native upgrade to updates.
* Dial timeout client.
* Custom `copyRecursively` function.
* When there is fresh version on start show release notes.
* Keychain helper using GNU pass.
* Error message on missing keychain.
### Changed
* Imap `SEARCH` loops until all messages are listed #581.
* Cached message timestamp is renewed on load.
* Message cache ID is userID+messageID.
* Private cache and added bodystructure.
* Remove addresses from `m.ToList` that were not requested in SMTP `TO`.
* IsFirstStart setup before loading Gui. Set it to false right after (don't wait till quit).
* Check `eventMessage` not nil before address check.
* `util.EventChannel` refactor: `SendEvent`->`Send` and new `SendEvent(EventCode)`.
* Information bar keeps on once app is outdated.
* Error dialog for upgrade has option for force upgrade.
* IsFirstStart setup before loading Gui. Set false right after (don't wait till quit).
* Pmapi: access token decrypted only if needed.
* Move `updates` from `frontend` to `util`.
* Move `CheckInternetConnection()` to `util`.
* Makefile clean up and change scripts for building.
* Reorganized updates.
* Start with new versioning.
1.1.0
| | `--- bug fix number (internal, irregular, beta relases)
| `----- minor version (features, release once per month, live release, milestones)
`------- major version (big changes, once per year, breaking changes, api force upgrade)
* Upgrade restart option in qt-frontend.
* GOOS save functions.
* Windows update procedure.
* Darwin update procedure.
* `zip` replaced by `tgz`.
* Using move instead of write truncated.
* Linux dependencies (pass and gnome-keychain optional).
* `Store.helper` -> `Store.secrets`.
### Release notes
* New self-update procedure.
* Changed restarting mechanism.
* Support for GNU pass for linux.
* Various GUI improvements.
### Fixed bugs
* RFC complaint SEARCH and FETCH responses.
* Additional synchronization of mail database.
## [v1.0.6 silent] - 2018-08-23
### Added
* New svg icon in linux package.
## [v1.0.6] - 2018-08-09
### Added
* `backend.GetUserSettings()`.
### Changed
* Related to Desktop-Bridge#561.
* Api flag to build scripts.
* `BodyKey` and `AttachmentKey` contains `Key` and `Algorithm`.
* `event.User.Addresses` -> `event.Addresses`.
* `user.Addresses` -> `client.Addresses()`.
* Typos and fixes.
* Pmapi update.
* `backend.configClient` -> `backend.authClient`.
* `auth.Uid` -> `auth.Uid()`.
* `keyRingForAddress()` -> `Client.KeyRingForAddressID()`.
* `Message.IsRead` -> `Message.Unread`.
* `pmapi.User.Unlock()` -> `pmapi.Client.UnlockAddresses()`.
* `TwoFactor` -> `HasTwoFactor()` and `PasswordMode` -> `HasMailboxPassword()`.
* Icon to match ImportExport.
### Release notes
* Removed deprecated API routes.
### Fixed bugs
* Frequent Thunderbird timeout.
* SMTP requests not case-sensitive.
## [v1.0.5] - 2018-07-12
### Added
* UpdateCurrentAgent from lastMailClient.
* Current OS.
* Use Qt to set nice OS with version.
* All `client.Do` errors are interpreted as connection issue.
* Moved to internal gitlab.
* Typo `frontend-qml`.
* Better message for case when server is not reacheable.
* Setting 1min timeout to IMAP connection.
### Changed
* Password: click2show, click2hide.
* Notification in bug report window.
* Less frequent version check.
* Closing ticker.
### Removed
* Sockets and unused libraries.
### Release notes
* Improved response of IMAP server.
* Sending requests with client information.
* Less frequent notification about new version.
### Fixed bugs
* Support of Outlook calendar event format.
* Too many opened file descriptors issue.
* Fixed 7bit MIME issue while sending.
## [v1.0.4] - 2018-05-15
### Changed
* Version files available at both download and static.
* MIME `text/calendar` are parsed as attachment.
* UserID as identifier in keychain and pmapi token.
* Keychain format and function refactor.
* Create crash file on panic with full trace.
* Clear old data only in main process (no double keychain typing).
* Create label udpate API route.
* Selectable text in release notes.
### Added
* Support sending to external PGP recipients.
* Return error codes: `0: Ok`, `2: Frontend crashed`, `3: Bridge already running`, `4: Uknown argument`, `42: Restart application`.
### Release notes
* Support of encryption to external PGP recipients using contacts created on beta.protonmail.com (see https://protonmail.com/blog/pgp-vulnerability-efail/ to understand the vulnerabilities that may be associated with sending to other PGP clients).
* Notification that outgoing email will be delivered as non-encrypted.
* NOTE: Due to a change of the keychain format, you will need to add your account(s) to the Bridge after installing this version.
### Bugs fixed
* Support accounts with same user names.
* Support sending vCalendar event.
## [v1.0.3] - 2018-03-26
* All from silent updates plus following.
### Changed
* Okay -> "Remind me later".
* Imported message with `text/html` body was imported as `text/plain`.
* Reload cache when labeling Seen/Unseen.
* Merge with Import-Export branch.
* Inheritable Bug report window.
* Common functions: WriteHeader (parse PM mail) and CustomMessage (when incorrect keys).
* Updates refactor.
* Bug report window.
* Checkbox and with label (only I/E).
* Error dialog and Info tooltip (only I/E).
* Add user modal formating (colors, text).
* Account view style.
* Input box style (used in bug report).
* Input field style (used in add account and change port).
* Added style variables for I/E.
* Tab button style.
* Window bar style and functionality (closing / minimize window).
### Release notes
* Improved responsiveness in the UI.
### Fixed bugs
* Fixed some formatting issues with imports.
* Fixed port changing via CLI.
## Silent update - 2018-03-13
### Changed
* Remove firewall error message.
## [v1.0.2] - 2018-03-12
* All from silent updates plus following.
### Added
* UTF-7 support.
* Message when communication between bridge and email client is blocked by firewall (Windows only).
### Changed
* Added gnome-keyring dejavu fonts into linux dependency.
* Corrected parentID when reply/forward: taken from `protonmail.internalid` reference.
* Update user object in backend after unlock to apply address changes.
### Release notes
* UTF7 encoding support for older imported emails.
### Fixed bugs
* Fixed issues with conversation threading.
* Support for multiple "ReplyTo" addresses.
* Fixed issue where some address updates would not register immediately.
## [v1.0.1-4 (linux only)] Silent deploy - 2018-02-28
### Changed
* More similar look of window title bar to Windows 10 style.
* Qt 5.10 Button Controls 2 conflict (`icon`->`iconText`).
### Added
* Linux default font.
* Multiple reply-to addresses support (also API).
* Command line interface.
* Credits are generated automatically from glide.lock.
* Created script to build linux packages (dep,rpm,PKGBUILD).
* Correct config folders with env variable `$XDG_CONFIG_HOME`.
### Fixed bugs
* Clearing global cache.
* Default linux font problems.
* Support Reply-To multiple addresses.
### Release notes
* Improved visual appearance for win and linux.
## [v1.0.1] Silent deploy - 2017-12-30
### Changed
* Fixed bug with parsing address list (CC became BCC).
## [v1.0.1] - 2017-12-20
### Added
* When current log file is more than 10MB open new one, checked every 15min.
* Keep only last three log files including current one, triggered every start and when switching log files.
* Translation context.
* Accessibility objects for button and static text.
* All objects are accessible including focus scope for modals and messages.
* Automatically fill the email client in bug report form.
* Catch corrupted MacOS keychain error and show the link to FAQ.
* Unlabel message.
* Update emptying and filtering routes.
* Parse the address comment as defined in RFC.
### Changed
* Default log level set to Warning.
* Info logs during adding account and connecting client promoted to warning level.
* Log only when email client was changed (previously logged on every assign).
* Force upgrade bubble notification only when requested by API.
* Don't show warning systray icon when "You have then newest version!" bubble message is showed.
* Header date format RFC822Z -> RFC1123Z.
* IMAP ID and QUOTA responses forced to use quoted strings (fixing SparkMail issue).
* Avoid AddressChanged bubble when no address was changed.
### Release notes
* Reduced log file size and log file history.
* Accessibility support for MacOS VoiceOver and Windows Narrator.
* Improved notification system.
* Supported imports with older address format.
## [v1.0.0] - 2017-12-06
### Added
* Encoding support of message body, title items, attachment name, for all standard charsets.
* Force update API message handled as new version event.
### Changed
* Refactor `bridge-qtfronted` -> `frontend`.
* Only one main file and basic support of CLI (not finished).
* Common QML package `ProtonUI`, which is used by `BridgeUI` and `ImportExportUI`.
* ChangedUser signal contain address and event type to distinguish between logout, internet off/on, address_change.
* API address changed event handled gracefully (if not possible, logout).
* Update mac keychain (should resolve problem with adding new account to bridge, NOT CONFIRMED).
* Solved hanging GUI on keychain error (should solve all win-7, no-gui errors).
* New systray icons for Mac (black and white no background).
* GUI cosmetics:
* "Click here to start" triangle position.
* Wrong cursor type on link.
* Create main window before notification.
### Release notes
* Better notification when new version is needed or when account address is changed.
* Encoding support for the standard charsets.
* Improved visual appearance.
### Fixed bugs
* Fixed missing GUI for Windows with empty keychain.
## Changelog format
* Changelog [format](http://keepachangelog.com/en/1.0.0/).
### Guiding Principles
* Changelogs are for humans, not machines.
* There should be an entry for every single version.
* The same types of changes should be grouped.
* Versions and sections should be linkable.
* The latest version comes first.
* The release date of each version is displayed.
* Mention whether you follow Semantic Versioning.
### Types of changes
* `Added` for new features.
* `Changed` for changes in existing functionality.
* `Deprecated` for soon-to-be removed features.
* `Removed` for now removed features.
* `Fixed` for any bug fixes.
* `Security` in case of vulnerabilities.
* Additional for in app release notes.
* `Release notes` in case of vulnerabilities.
* `Fixed bugs` in case of vulnerabilities.