Commit graph

12328 commits

Author SHA1 Message Date
map
5293be6a4a
Implement spam training data sync and add TutanotaModelV98
We sync the spam training data encrypted through our server to make
sure that all clients for a specific user behave the same when
classifying mails. Additionally, this enables the spam classification
in the webApp. We compress the training data vectors
(see clientSpamTrainingDatum) before uploading to our server using
SparseVectorCompressor.ts. When a user has the ClientSpamClassification
enabled, the spam training data sync will happen for every mail
received.

ClientSpamTrainingDatum are not stored in the CacheStorage.
No entityEvents are emitted for this type.
However, we retrieve creations and updates for ClientSpamTrainingData
through the modifiedClientSpamTrainingDataIndex.

We calculate a threshold per classifier based on the dataset ham to spam
ratio, we also subsample our training data to cap the ham to spam ratio
within a certain limit.

Co-authored-by: jomapp <17314077+jomapp@users.noreply.github.com>
Co-authored-by: das <das@tutao.de>
Co-authored-by: abp <abp@tutao.de>
Co-authored-by: Kinan <104761667+kibibytium@users.noreply.github.com>
Co-authored-by: sug <sug@tutao.de>
Co-authored-by: nif <nif@tutao.de>
Co-authored-by: map <mpfau@users.noreply.github.com>
2025-11-18 13:56:19 +01:00
das
f8bbd32695
Include header fields as tokens in the anti-spam
Add the header fields(sender, toRecipients, ccRecipients, bccRecipients,
authStatus) to the anti-spam vectors. We also improve some of the
preprocessing steps and add offline migrations by deleting old spam
tables

Co-authored-by: amm@tutao.de
Co-authored-by: jhm <17314077+jomapp@users.noreply.github.com>
2025-11-18 10:37:23 +01:00
vis
21ad4ce2c3 Log and throw authentication errors
This is erroring silently and we don't get enough
information to figure out what is happening.

tuta#2676

Co-authored-by: mab <mab@tutao.de>
2025-11-18 10:31:03 +01:00
vis
685fdb5743
Further separate docker images
FPM is only needed for packaging, and the rest is only needed for building.

tuta#2747
2025-11-17 13:45:55 +01:00
vis
4457636235
Publish desktop app from different container 2025-11-17 13:45:55 +01:00
vis
32745ed071
Fix publish desktop Jenkins job 2025-11-17 13:45:50 +01:00
jenkins build server
0843ce7d8a v314.251117.0 2025-11-17 13:32:33 +01:00
jenkins build server
5774d0f6e5 update translations 2025-11-17 13:31:15 +01:00
ivk
385627015d [ios] Fix resetting badge on app startup
`applicationWillEnterForeground` is not getting called on app
startup, only on transition from background to foreground state.
This means the counter would only get reset when the app would
come foreground from background state.

We did not notice it as notifications are also reset via
NativePushFacade.

We fixed it by using `applicationDidBecomeActive` instead. It it a
different lifecycle event but it also works, perhaps even better.

Close #9922

Co-authored-by: hrb-hub <hrb-hub@users.noreply.github.com>
2025-11-17 13:00:48 +01:00
vis
de685c9314
v314.251114.0 2025-11-14 14:33:18 +01:00
vis
d63a493019
ci: build web and desktop apps with tuta-wasm-tools
Before, the CI depended on precompiled binaries from the emscripten SDK.
Now we use our own package (see tuta-wasm-tools).

Co-authored-by: mab <mab@tutao.de>
2025-11-14 11:18:26 +01:00
ivk
6704f67dca
Remove JS fallback
We can't have the fallback for Rust libraries, which are necessary now,
so there is no point in maintaining them for the C libraries.

Co-authored-by: vis <vis@tutao.de>
Co-authored-by: mab <mab@tutao.de>
2025-11-14 11:18:18 +01:00
ivk
ab13b65d59 Use Github issues forms 2025-11-14 10:50:02 +01:00
ivk
b72a42aa89 Add a form for webapp bug 2025-11-14 10:32:12 +01:00
ivk
7b954d5f69 [build] Switch to version of wasm-pack that builds lazily
We run `npm ci` often but we compile code to wasm with wasm-pack very
rarely.
2025-11-13 11:08:31 +01:00
jenkins build server
df8ca511b5 v314.251111.0 2025-11-11 12:25:15 +01:00
jenkins build server
ae264bda1f update translations 2025-11-11 12:17:33 +01:00
hrb-hub
b7c6af1e1b [ci] Select Xcode v26.0.1 for Github workflows
Co-authored-by: ivk <ivk@tutao.de>
2025-11-11 11:42:18 +01:00
ivk
46ee38271f [build] Enable bulk memory for wasm fallback in Argon2id and Kyber tests 2025-11-11 11:16:39 +01:00
hrb-hub
49585922ec Hide Quick-actions behind feature flag for internal beta
Close #9924

Co-authored-by: bir <bir@tutao.de>
2025-11-10 15:51:54 +01:00
bir
90b305468c Update electron to 39.1.0
close #9917
2025-11-10 15:16:41 +01:00
bir
e28345f5f7 Update socials and messengers dropdown for contacts
Add new labels in `social networks` and `Instant messengers`

Changed to URLs for social IDs are built to avoid creating invalid
links. Also remove forced "www". Add a fallback for export.

Close #8831

Co-authored-by: ivk <ivk@tutao.de>
2025-11-10 15:16:41 +01:00
bir
c77b872fbf [Android]Fix contacts organization outdated issues
Adding any Organization field(Company, Role or Department) will create
new Organization section instead of updating existing section.
Fixed by updating the Organization section instead of creating new one
and removes it entirely when all fields are empty to prevent showing an
empty organization section.

Close #9900
Close #9901

Co-authored-by: hrb-hub <hrb-hub@users.noreply.github.com>
2025-11-10 15:16:41 +01:00
ivk
cf8bdc3795 Fix few settings links in quick actions 2025-11-10 15:16:41 +01:00
ivk
f2a8539d36 Fix highlighting current settings folder when URL has hash 2025-11-10 15:16:41 +01:00
ivk
e83c76c41e Improve mail folder display in quick actions 2025-11-10 15:16:41 +01:00
ivk
5d812a9b22 Improve last run actions handling in QuickActionsModel
Make sure deduplication and updates works correctly for lastRunActions.
2025-11-10 15:16:41 +01:00
wrd
1610c8f974 Add quick actions for Contacts and Calendar 2025-11-10 15:16:41 +01:00
ivk
cdacb48640 Add quick actions for settings, small improvements 2025-11-10 15:16:41 +01:00
ivk
f3ed38985c Improve settings navigation 2025-11-10 15:16:41 +01:00
ivk
faf6c80e0b Improve quick mail actions descriptions 2025-11-10 15:16:41 +01:00
ivk
1763eb828d Add quick settings
Searcheable and keyboard-friendly way to navigate and invoke various
actions in the app

Close #9520
2025-11-10 15:16:41 +01:00
paw
a8d9e33b28 Hide the edit button for Name for non-admins
Users who aren't admins cannot edit their own name as their GroupInfo is
read-only for them.

Note that this is not a new restriction; the edit button was simply
showing up when it should not, and actually editing your name wouldn't
actually work.

Closes #9835
2025-11-10 15:16:41 +01:00
tutao-mac
4fe3bd1f5f [iOS] Add begin and end activity around database calls
This is recommended by Apple for the 0xdead10cc Termination reason

Close #8725
2025-11-10 15:16:41 +01:00
wrd
e6de581b00 Download blobs in batches to not include too many ids in the request url
Close #8854
2025-11-10 15:16:41 +01:00
paw
1b5c20e7e1 Fix computeColor throwing on non-srgb color spaces
This would cause some emails to not render in dark mode.

Basically, MDN claimed that all colors from getComputedStyle will be in
rgb or rgba form. However, they have since updated their page, and it
turns out the getComputedStyle ALSO passes through colors that are in
a given colorspace.

To fix this, we can transmute the color into srgb using the CSS color()
function and extract the RGB/A components using a regular expression.

Co-authored-by: hrb <hrb-hub@users.noreply.github.com>
2025-11-10 15:16:41 +01:00
sas
fd087900c7
Add compatibility test data for AEAD 2025-11-10 12:42:45 +01:00
vaf
9c4f72eb9f
Get rid of duplicate CompatibilityTest code for android
rename EncryptionCompatTest.kt to CompatibilityTest.kt to keep in sync with the class name
Note that the tests are not automatically executed by the ci and have to be run manually.
2025-11-10 12:42:45 +01:00
vaf
e01f3234e9
regenerate CompatibilityTestData.json
necessary to hide non-public functions from AES and use seed instead of IV to reproduce the ciphertext.
prepares for AEAD scheme
2025-11-10 12:42:45 +01:00
abp
06b249952c
use REPLACE when inserting to or removing from ZeroOrOne aggregations
Using REMOVEITEM and ADDITEM when going from aggregate ids don't match
causes invalid association cardinality even though we remove and add,
presumably due to mismatching aggregate ids. This commit fixes the issue
by using REPLACE instead.
2025-11-10 11:32:13 +01:00
das
a903000bed
Fix null in associations for PatchMerger.ts
We are attempting to fix the case where a null value was added to the
association, it has happened that a mail instance in the offline
database ended up with null in the list ([null]) for the 1729
aggregation.

This happened on the parsedInstance level, and for a zeroOrOne
aggregation it should have been just an empty list.
2025-11-07 12:06:40 +01:00
jhm
279744b590
read full instance from UPDATE entityUpdate if available
Usually, entityUpdates with operation UPDATE only have patches
on the entityUpdate instead of the full instance, like e.g. on
entityUpdates with operation CREATE. However, in certain
scenarios we are still / again sending full instances on entityUpdates
with operation UPDATE, and should therefore also correctly process them.
This commit change the processing of UPDATE entityUpdates to be:
-> use entityUpdate.patches
--> if not available use entityUpdate.instance
---> if not available re-load instance from server

This commit fixes issues where instance were re-loaded from the server
even though the instances was available on the entityUpdate.
2025-11-07 12:06:39 +01:00
abp
63c5fdea92
make PatchMerger more robust
We make PatchMerger more robust by:
- Handling patches sent for the newly added attributes (not in the
parsed instance in the offline storage) without needing a reload of the
entire entity from the server.
- Using the session key from the instance we initially read from the
offline storage, as calling mapToInstance on the "intermediate" parsed
instances is not always possible since instances only adhere to
cardinality constraints only after all patches are applied.

Co-authored-by: jomapp <17314077+jomapp@users.noreply.github.com>
2025-11-07 12:05:15 +01:00
das
5e3de4d5e6
Improve loading bar animation refresh rate
By using only integers for progress, we trigger the re-render fewer
times for the component, which implies in less paint events for the
browser to handle. Also lowering the frequency for the error
Compositing failedUnsupported CSS property: width
2025-11-07 12:05:14 +01:00
jenkins build server
452700a96d v314.251030.0 2025-10-30 09:30:29 +01:00
jenkins build server
6d28934f34 update translations 2025-10-30 09:28:12 +01:00
toj
efaf5cb6c4
fix: plan switcher pre-selecting current plan 2025-10-30 09:15:45 +01:00
nig
626e6167d0
use a smarter method for rate-limiting email availability
we have a rate limit on the server, but it's easy to run into and the
resulting suspension will cause a 30s wait.

This new method should limit the request rate (from one client) to just
under the limit the server has, without feeling slow for the vast
majority of users.
2025-10-30 09:15:44 +01:00
nig
c0b830069c
[android] update gradlew
ran ./gradlew wrapper in tuta sdk and android-app
2025-10-30 09:15:34 +01:00
abp
57fa6fd9e8
run clearExcludedData after entityUpdates sync is done
When mails before the cutoff were updated and a user received
entityUpdates for these mails, after prefetching, these mails were
immediately deleted from the offline storage again by the
MailOfflineCleaner. However, the MailIndex re-downloads these very same
mails afterward again. To fix this issue, we move the execution of the
MailOfflineCleaner after the MailIndexer.

Co-authored-by: das <das@tutao.de>
Co-authored-by: jomapp <17314077+jomapp@users.noreply.github.com>
2025-10-29 17:22:43 +01:00