* 🐛(docker) stop ALL services when running make stop
* ✨(docker) make sure backend is healthy before exiting docker compose up
* 🧑💻 (docker) use default user and not root for healthchecks
* ➖(backend) Remove dockerflow
* ✨(backend) add healthcheck route, and suppress healthcheck access logs
* 🚨(backend) ignore monkey patching
* 🚨(backend) coderabbitai + linter fixes
* 🚚(backend) remove version in healthz route
* 🔨(docker) use python http lib instead of curl and remove curl from dockerfile
The intersection threshold to mark a message as read was 0.95. That means that
95% of the message must be displayed on the screen to trigger the observer so
with long messages or on small viewport, in some cases the message could be not
mark as read.
If auto labelling feature is enabled add a checkbox in the label form
to enable this feature for the given label then when the auto labelling
is enabled, show a description input to allow user to describe the label
purpose.
Co-authored-by: jbpenrath <jb.penrath@gmail.com>
When a message is received, if the auto labelling feature is enabled,
we try to add all relevant labels that are flagged for auto labelling to this
message.
Co-authored-by: jbpenrath <jb.penrath@gmail.com>
Improve openapi schema to pass abilities to frontend properly.
Then through the useAbility hook, hide/disable actions.
It concerns actions to send messages, write messages, share
thread access, crud labels, crud maildomain mailboxes.
There was an error in the openapi schema and we are not aware that
message.draftBody could be null so when it was the case, the frontend
throws an error when rendering the `MessageForm` component.
In the personal mailbox form, we now render extra fields according to the
`SCHEMA_CUSTOM_ATTRIBUTES_USER` got through config endpoint.
Those fields are validated through zod and the schema is generated through
`zod-from-json-schema` package. Then a custom component is in charge to
render the right component according to the schema property `type`.
User and MailDomain have both `custom_attributes` json field. Those fields
aims to store extra data about those models specific to an instance. In order
to fulfill those fields with consistency and without requiring to fork the
project, we add two new settings `SCHEMA_CUSTOM_ATTRIBUTES_*`.
Those 2 settings expects a JSON Schema string defined through env vars.
Then on model save, those schema are used to validate data saved into
custom attributes.
* 🐛(scalingo) add an env var to disable Celery beat scheduling
Deployments on fresh PaaS databases would fail because of this, without
giving the user the ability to create the database through a manual
run command.
* 🐛(nginx) fix error when no env vars configured
* ♻️(services) refactor Services into a single directory
I haven't done AI yet because there are pending patches but once done we'll also have core/services/ai/*.py
I used importer as a name to avoid using a Python keyword
* 🚨(lint) move imports to the top
The OpenAPI Schema does not embedded abilities property.
We fix that and make two serializers for User model in order to get proper
openapi definition for User instance with abilities and without abilities.
Use the drive-sdk package to allow user to pick a file from its drive workspace
if one drive instance has been set up through envvars.
https://github.com/suitenumerique/drive
We want to add ability to Messages to interop with our Drive application.
First, we want to be able to set the Drive base url through environment
variable then pass down Drive configuration to frontend through the config
api endpoint.
https://github.com/suitenumerique/drive
- Load folders for GMAIL and ORANGE
- Fix read issue with Gmail IMAP import (all messages were marked as read)
- Fix IMAP encoding for Gmail import
- Refactor monolithic import_imap_messages_task into smaller, focused functions
- Add IMAPConnectionManager context manager for better resource management
- Extract helper functions with single responsibilities
This refactoring improves code maintainability, readability, and testability
while maintaining backward compatibility with existing API.
- Replace single label lookup with multiple labels filter in ThreadViewSet
- Allow filtering threads by label_slug across multiple mailboxes when user has access
- Expect empty results instead of 403 errors for inaccessible labels
- Add comprehensive tests for identical labels in different mailboxes scenarios
This change enables users with access to multiple mailboxes to filter threads
by label slug across all accessible mailboxes, while maintaining proper
permission checks and supporting mailbox-specific filtering.
- Add pre-calculation of user access roles in MailboxViewSet list/retrieve methods
- Implement get_abilities method on Mailbox model for permission checking
- Add AbilitiesModelSerializer to MailboxSerializer for consistent abilities field
- Optimize database queries by reducing N+1 access lookups
- Add comprehensive test coverage for abilities and optimized queries
This optimization significantly reduces database queries when listing
mailboxes by pre-calculating user roles instead of querying for each
mailbox individually.
* ✨(dns) add admin page for DNS records. Fixes#177
* 👷(dockerflow) add a flag to disable Dockerflow
* 💚(ghactions) fix check-api-update that was missing Orval
* 💚(ci) fix tests that depended on Keycloak
* ♻️(admin) refactor CopyableInput into a separate component
* 🎨(dns) improve code style