├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md └── workflows │ └── update-james-submodule.yml ├── .gitignore ├── .gitmodules ├── .scalafix.conf ├── CHANGELOG.md ├── Jenkinsfile ├── LICENSE ├── NOTICE.txt ├── README.md ├── checkstyle-suppressions.xml ├── checkstyle.xml ├── demo ├── README.md ├── dev.sh ├── docker-compose.yml ├── ldap │ └── populate.ldif ├── lemonldap │ └── lmConf-1.json ├── lsc │ ├── domain-contact-sync │ │ ├── logback.xml │ │ └── lsc.xml │ └── identity-sync │ │ ├── logback.xml │ │ └── lsc.xml ├── media │ └── OIDC-flow.mp4 ├── test.sh ├── testOIDC └── tmail │ ├── .env │ ├── app_dashboard.json │ ├── domainlist.xml │ ├── extensions-jars │ └── tmail-ai-bot-jar-with-dependencies.jar │ ├── icon │ └── lemonldap-ng-logo.png │ ├── jmap.properties │ ├── jwt_privatekey │ ├── jwt_publickey │ ├── mailetcontainer.xml │ ├── smtpserver.xml │ └── usersrepository.xml ├── dockerfiles └── jenkins-runner │ ├── Dockerfile │ └── Jenkinsfile ├── docs ├── README.md ├── antora-playbook-local.yml ├── antora.yml ├── modules │ └── ROOT │ │ ├── assets │ │ └── images │ │ │ ├── contribute.png │ │ │ ├── education.jpg │ │ │ ├── forward.png │ │ │ ├── governance.jpeg │ │ │ ├── lock.png │ │ │ ├── logo.png │ │ │ ├── mobile-screen.jpg │ │ │ ├── open-source.png │ │ │ ├── open-standards.jpeg │ │ │ ├── pillars.png │ │ │ ├── planet.png │ │ │ ├── tablet.png │ │ │ └── team-mailbox.jpg │ │ ├── nav.adoc │ │ └── pages │ │ ├── contribute.adoc │ │ ├── ethic.adoc │ │ ├── index.adoc │ │ ├── join-us.adoc │ │ ├── roadmap.adoc │ │ ├── security.adoc │ │ ├── tmail-backend │ │ ├── configure │ │ │ ├── blob-store.adoc │ │ │ ├── cassandra.adoc │ │ │ ├── deleted-message-vault.adoc │ │ │ ├── ecosystem-discovery.adoc │ │ │ ├── encrypted-mailbox.adoc │ │ │ ├── fcm.adoc │ │ │ ├── index.adoc │ │ │ ├── jmap.adoc │ │ │ ├── jvm.adoc │ │ │ ├── ldap-mailing-list.adoc │ │ │ ├── openpaas.adoc │ │ │ ├── opensearch.adoc │ │ │ ├── queue.adoc │ │ │ ├── rabbitmq.adoc │ │ │ ├── rate-limiting.adoc │ │ │ ├── redis.adoc │ │ │ ├── standalone-calendar.adoc │ │ │ ├── structured-logging.adoc │ │ │ ├── team-mailboxes.adoc │ │ │ ├── users-repository.adoc │ │ │ └── welcome-message.adoc │ │ ├── features │ │ │ ├── contactAutocomplete.adoc │ │ │ ├── encrypted-mailbox.adoc │ │ │ ├── index.adoc │ │ │ ├── ldapMailingLists.adoc │ │ │ ├── openpaas-integration.adoc │ │ │ ├── teamMailboxes.adoc │ │ │ └── tmailRateLimiting.adoc │ │ ├── imap-extensions │ │ │ ├── imapAuthDelegationExtension.adoc │ │ │ └── index.adoc │ │ ├── index.adoc │ │ ├── jmap-extensions │ │ │ ├── calendarEventParsing.adoc │ │ │ ├── calendarEventReply.adoc │ │ │ ├── contactAutocomplete.adoc │ │ │ ├── contactSupport.adoc │ │ │ ├── deletedMessagesVault.adoc │ │ │ ├── downloadAll.adoc │ │ │ ├── forwards.adoc │ │ │ ├── index.adoc │ │ │ ├── jmapFilters.adoc │ │ │ ├── jmapGpgExtension.adoc │ │ │ ├── jmapLabels.adoc │ │ │ ├── jmapSettings.adoc │ │ │ ├── jmapTeamMailboxMembers.adoc │ │ │ ├── mailboxClear.adoc │ │ │ ├── oidcAuthentication.adoc │ │ │ ├── publicAssets.adoc │ │ │ ├── pushWithFirebase.adoc │ │ │ ├── teamMailboxRevokeAccess.adoc │ │ │ └── ticketAuthentication.adoc │ │ ├── run.adoc │ │ ├── smtp-extensions │ │ │ ├── index.adoc │ │ │ ├── smtpAuthDelegationExtension.adoc │ │ │ └── tmailValidRcptHandler.adoc │ │ ├── test.adoc │ │ └── webadmin.adoc │ │ └── tmail-mobile │ │ └── index.adoc └── ui-overrides │ ├── img │ └── tmail.svg │ └── partials │ └── header-content.hbs ├── logback-contrib ├── README.md ├── checkstyle.xml ├── jackson │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── ch │ │ └── qos │ │ └── logback │ │ └── contrib │ │ └── jackson │ │ └── JacksonJsonFormatter.java ├── json │ ├── access │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── ch │ │ │ │ └── qos │ │ │ │ └── logback │ │ │ │ └── contrib │ │ │ │ └── json │ │ │ │ └── access │ │ │ │ └── JsonLayout.java │ │ │ └── test │ │ │ ├── input │ │ │ └── json │ │ │ │ └── jsonLayout.xml │ │ │ └── java │ │ │ └── ch │ │ │ └── qos │ │ │ └── logback │ │ │ └── contrib │ │ │ └── json │ │ │ └── access │ │ │ └── JsonLayoutTest.java │ ├── classic │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── ch │ │ │ │ └── qos │ │ │ │ └── logback │ │ │ │ └── contrib │ │ │ │ └── json │ │ │ │ └── classic │ │ │ │ └── JsonLayout.java │ │ │ └── test │ │ │ ├── input │ │ │ └── json │ │ │ │ └── jsonLayout.xml │ │ │ └── java │ │ │ └── ch │ │ │ └── qos │ │ │ └── logback │ │ │ └── contrib │ │ │ └── json │ │ │ └── classic │ │ │ └── JsonLayoutTest.java │ ├── core │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── ch │ │ │ └── qos │ │ │ └── logback │ │ │ └── contrib │ │ │ └── json │ │ │ ├── JsonFormatter.java │ │ │ └── JsonLayoutBase.java │ └── pom.xml ├── license-template.txt └── pom.xml ├── pom.xml ├── security.md ├── tmail-backend ├── apps │ ├── distributed │ │ ├── README.md │ │ ├── docker-compose.yml │ │ ├── docker-configuration │ │ │ └── redis.properties │ │ ├── monitor_health.sh │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── conf │ │ │ │ ├── batchsizes.properties │ │ │ │ ├── blob.properties │ │ │ │ ├── cassandra-driver.conf │ │ │ │ ├── cassandra.properties │ │ │ │ ├── deletedMessageVault.properties │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── droplists.properties │ │ │ │ ├── extensions.properties │ │ │ │ ├── healthcheck.properties │ │ │ │ ├── imapserver.xml │ │ │ │ ├── jmap.properties │ │ │ │ ├── jmx.properties │ │ │ │ ├── jvm.properties │ │ │ │ ├── keystore │ │ │ │ ├── linagora-ecosystem.properties │ │ │ │ ├── listeners.xml │ │ │ │ ├── logback-cli.xml │ │ │ │ ├── logback.xml │ │ │ │ ├── mailbox.properties │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── opensearch.properties │ │ │ │ ├── queue.properties │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── recipientrewritetable.xml │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── tika.properties │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ │ ├── eml-template │ │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ │ ├── calendar_reply_declined-en.eml │ │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ │ └── calendar_reply_tentative-fr.eml │ │ │ ├── extensions-jars │ │ │ │ └── README.md │ │ │ ├── glowroot │ │ │ │ ├── admin.json │ │ │ │ └── plugins │ │ │ │ │ ├── blobstore.json │ │ │ │ │ ├── imap.json │ │ │ │ │ ├── mailboxListener.json │ │ │ │ │ ├── smtp.json │ │ │ │ │ ├── spooler.json │ │ │ │ │ └── task.json │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── app │ │ │ │ │ ├── DistributedEmailAddressContactEventDeadLettersModule.java │ │ │ │ │ ├── DistributedJamesConfiguration.java │ │ │ │ │ ├── DistributedServer.java │ │ │ │ │ ├── EventBusKeysChoice.java │ │ │ │ │ └── TMailEventDeadLettersModule.java │ │ │ └── scripts │ │ │ │ └── james-cli │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── app │ │ │ │ ├── AwsS3BlobStoreExtension.java │ │ │ │ ├── CassandraExtension.java │ │ │ │ ├── CombinedIdentityJamesServerTest.java │ │ │ │ ├── DeletedMessageVaultWorkQueueProbe.java │ │ │ │ ├── DistributedServerWithOpenPaasConfiguredTest.java │ │ │ │ ├── DistributedServerWithPureRabbitMQEventBusTest.java │ │ │ │ ├── DistributedServerWithRedisEventBusKeysTest.java │ │ │ │ ├── DistributedServerWithoutDeletedMessageVaultTest.java │ │ │ │ ├── DockerCassandraRule.java │ │ │ │ ├── EncryptedDistributedServerTest.java │ │ │ │ ├── RabbitMQAndRedisEventBusProbe.java │ │ │ │ ├── ScheduledReconnectionHandlerProbe.java │ │ │ │ └── SchedulerReconnectionHandlerIntegrationTest.java │ │ │ └── resources │ │ │ ├── batchsizes.properties │ │ │ ├── blob.properties │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── eml │ │ │ └── htmlMail.eml │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── ldif-files │ │ │ └── populate.ldif │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── pop3server.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── smtpserver.xml │ │ │ └── webadmin.properties │ ├── memory │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── conf │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── droplists.properties │ │ │ │ ├── extensions.properties │ │ │ │ ├── healthcheck.properties │ │ │ │ ├── imapserver.xml │ │ │ │ ├── jmap.properties │ │ │ │ ├── jmx.properties │ │ │ │ ├── jvm.properties │ │ │ │ ├── keystore │ │ │ │ ├── linagora-ecosystem.properties │ │ │ │ ├── listeners.xml │ │ │ │ ├── logback-cli.xml │ │ │ │ ├── logback.xml │ │ │ │ ├── mailbox.properties │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── recipientrewritetable.xml │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ │ ├── eml-template │ │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ │ ├── calendar_reply_declined-en.eml │ │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ │ └── calendar_reply_tentative-fr.eml │ │ │ ├── extensions-jars │ │ │ │ └── README.md │ │ │ ├── glowroot │ │ │ │ ├── admin.json │ │ │ │ └── plugins │ │ │ │ │ ├── blobstore.json │ │ │ │ │ ├── imap.json │ │ │ │ │ ├── mailboxListener.json │ │ │ │ │ ├── smtp.json │ │ │ │ │ ├── spooler.json │ │ │ │ │ └── task.json │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── app │ │ │ │ │ ├── MemoryConfiguration.java │ │ │ │ │ ├── MemoryServer.java │ │ │ │ │ └── modules │ │ │ │ │ └── jmap │ │ │ │ │ ├── MemoryDownloadAllModule.java │ │ │ │ │ ├── MemoryEmailAddressContactModule.java │ │ │ │ │ ├── MemoryFirebaseSubscriptionRepositoryModule.java │ │ │ │ │ ├── MemoryJmapSettingsRepositoryModule.java │ │ │ │ │ ├── MemoryLabelRepositoryModule.java │ │ │ │ │ └── PublicAssetsMemoryModule.java │ │ │ ├── provisioning │ │ │ │ ├── eml │ │ │ │ │ ├── 0.eml │ │ │ │ │ ├── 1.eml │ │ │ │ │ ├── 10.eml │ │ │ │ │ ├── 11.eml │ │ │ │ │ ├── 12.eml │ │ │ │ │ ├── 13.eml │ │ │ │ │ ├── 14.eml │ │ │ │ │ ├── 15.eml │ │ │ │ │ ├── 16.eml │ │ │ │ │ ├── 17.eml │ │ │ │ │ ├── 18.eml │ │ │ │ │ ├── 19.eml │ │ │ │ │ ├── 2.eml │ │ │ │ │ ├── 20.eml │ │ │ │ │ ├── 21.eml │ │ │ │ │ ├── 22.eml │ │ │ │ │ ├── 23.eml │ │ │ │ │ ├── 24.eml │ │ │ │ │ ├── 25.eml │ │ │ │ │ ├── 26.eml │ │ │ │ │ ├── 27.eml │ │ │ │ │ ├── 28.eml │ │ │ │ │ ├── 29.eml │ │ │ │ │ ├── 3.eml │ │ │ │ │ ├── 30.eml │ │ │ │ │ ├── 31.eml │ │ │ │ │ ├── 32.eml │ │ │ │ │ ├── 33.eml │ │ │ │ │ ├── 34.eml │ │ │ │ │ ├── 35.eml │ │ │ │ │ ├── 36.eml │ │ │ │ │ ├── 37.eml │ │ │ │ │ ├── 38.eml │ │ │ │ │ ├── 39.eml │ │ │ │ │ ├── 4.eml │ │ │ │ │ ├── 40.eml │ │ │ │ │ ├── 41.eml │ │ │ │ │ ├── 5.eml │ │ │ │ │ ├── 6.eml │ │ │ │ │ ├── 7.eml │ │ │ │ │ ├── 8.eml │ │ │ │ │ └── 9.eml │ │ │ │ └── provisioning.sh │ │ │ └── scripts │ │ │ │ └── james-cli │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── app │ │ │ │ ├── EncryptedMemoryServerTest.java │ │ │ │ ├── JamesServerConcreteContract.java │ │ │ │ ├── MemoryServerTest.java │ │ │ │ └── MemoryServerWithOpenPaasConfiguredTest.java │ │ │ └── resources │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── eml │ │ │ └── htmlMail.eml │ │ │ ├── extensions.properties │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── pop3server.xml │ │ │ ├── smtpserver.xml │ │ │ └── usersrepository.xml │ ├── pom.xml │ └── postgres │ │ ├── README.md │ │ ├── clean_up_data_tmail.sql │ │ ├── docker-compose-distributed.yml │ │ ├── docker-compose.yml │ │ ├── imap_smtp_test.sh │ │ ├── pom.xml │ │ ├── sample-configuration │ │ ├── batchsizes.properties │ │ ├── blob.properties │ │ ├── distributed │ │ │ ├── blob.properties │ │ │ ├── opensearch.properties │ │ │ └── rabbitmq.properties │ │ ├── dnsservice.xml │ │ ├── domainlist.xml │ │ ├── imapserver.xml │ │ ├── jmap.properties │ │ ├── jmx.properties │ │ ├── jvm.properties │ │ ├── listeners.xml │ │ ├── logback-cli.xml │ │ ├── logback.xml │ │ ├── mailbox.properties │ │ ├── mailetcontainer.xml │ │ ├── mailrepositorystore.xml │ │ ├── postgres.properties │ │ ├── recipientrewritetable.xml │ │ ├── search.properties │ │ ├── smtpserver.xml │ │ ├── usersrepository.xml │ │ └── webadmin.properties │ │ └── src │ │ ├── main │ │ ├── eml-template │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ ├── calendar_reply_declined-en.eml │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ └── calendar_reply_tentative-fr.eml │ │ ├── extensions-jars │ │ │ └── README.md │ │ ├── glowroot │ │ │ ├── admin.json │ │ │ └── plugins │ │ │ │ ├── blobstore.json │ │ │ │ ├── imap.json │ │ │ │ ├── mailboxListener.json │ │ │ │ ├── smtp.json │ │ │ │ ├── spooler.json │ │ │ │ └── task.json │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── app │ │ │ │ ├── PostgresEmailAddressContactEventDeadLettersModule.java │ │ │ │ ├── PostgresTmailConfiguration.java │ │ │ │ └── PostgresTmailServer.java │ │ └── scripts │ │ │ └── james-cli │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── app │ │ │ ├── CombinedIdentityTmailServerTest.java │ │ │ ├── DistributedPostgresTmailServerTest.java │ │ │ ├── EncryptedPostgresTmailServerTest.java │ │ │ └── PostgresTmailServerTest.java │ │ └── resources │ │ ├── batchsizes.properties │ │ ├── blob.properties │ │ ├── dnsservice.xml │ │ ├── domainlist.xml │ │ ├── imapserver.xml │ │ ├── keystore │ │ ├── listeners.xml │ │ ├── mailetcontainer.xml │ │ ├── mailrepositorystore.xml │ │ ├── rabbitmq.properties │ │ ├── smtpserver.xml │ │ └── webadmin.properties ├── blob │ ├── blobid-list │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── blob │ │ │ │ │ └── blobid │ │ │ │ │ └── list │ │ │ │ │ ├── BlobIdList.scala │ │ │ │ │ ├── CassandraSingleSaveBlobStoreModule.java │ │ │ │ │ ├── SingleSaveBlobStoreDAO.java │ │ │ │ │ └── cassandra │ │ │ │ │ ├── BlobIdListTable.scala │ │ │ │ │ ├── CassandraBlobIdList.scala │ │ │ │ │ ├── CassandraBlobIdListDAO.scala │ │ │ │ │ └── CassandraBlobIdListModule.scala │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── blob │ │ │ │ └── blobid │ │ │ │ └── list │ │ │ │ └── postgres │ │ │ │ ├── PostgresBlobIdList.scala │ │ │ │ ├── PostgresBlobIdListDAO.scala │ │ │ │ ├── PostgresBlobIdListModule.scala │ │ │ │ └── PostgresSingleSaveBlobStoreModule.scala │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── blob │ │ │ └── blobid │ │ │ └── list │ │ │ ├── SingleSaveBlobStoreContract.scala │ │ │ ├── SingleSaveBlobStoreTest.java │ │ │ └── postgres │ │ │ └── PostgresSingleSaveBlobStoreTest.java │ └── secondary-blob-store │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── blob │ │ │ └── secondaryblobstore │ │ │ ├── FailedBlobEvents.java │ │ │ ├── FailedBlobOperationListener.java │ │ │ ├── ObjectStorageIdentity.java │ │ │ └── SecondaryBlobStoreDAO.java │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── blob │ │ └── secondaryblobstore │ │ ├── SecondaryBlobStoreDAOTest.java │ │ └── SecondaryBlobStoreDAOWithEmptySuffixTest.java ├── combined-identity │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── combined │ │ │ └── identity │ │ │ ├── CombinedUserDAO.java │ │ │ ├── CombinedUsersRepository.java │ │ │ ├── CombinedUsersRepositoryModule.java │ │ │ └── UsersRepositoryClassProbe.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── combined │ │ │ └── identity │ │ │ ├── CombinedUsersRepositoryContract.java │ │ │ ├── CombinedUsersRepositoryTest.java │ │ │ └── LdapExtension.java │ │ └── resources │ │ └── ldif-files │ │ └── populate.ldif ├── data │ └── data-rabbitmq │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ ├── DisconnectorRequestSerializer.java │ │ │ ├── RabbitMQDisconnectorConsumer.java │ │ │ ├── RabbitMQDisconnectorNotifier.java │ │ │ └── RabbitMQDisconnectorOperator.java │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ ├── DisconnectorRequestSerializerTest.java │ │ └── RabbitMQDisconnectorConsumerTest.java ├── deployment-tests │ ├── common │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── deployment │ │ │ │ ├── CliContract.java │ │ │ │ ├── ImapAndSmtpContract.java │ │ │ │ ├── JmapContract.java │ │ │ │ ├── JmxCredentialsFixture.java │ │ │ │ ├── TMailDeploymentValidation.java │ │ │ │ ├── TestContainerWaitStrategy.java │ │ │ │ └── ThirdPartyContainers.java │ │ │ └── resources │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── deployment │ │ │ └── scripts │ │ │ ├── SelectThenFetchWithExistingMessages.test │ │ │ └── ValidateDeployment.test │ ├── distributed-ldap │ │ ├── pom.xml │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── deployment │ │ │ │ ├── DistributedLdapCliTest.java │ │ │ │ ├── DistributedLdapImapAndSmtpTest.java │ │ │ │ ├── DistributedLdapJmapTest.java │ │ │ │ └── TmailDistributedLdapExtension.java │ │ │ └── resources │ │ │ ├── james-conf │ │ │ ├── imapserver.xml │ │ │ ├── jmxremote.password │ │ │ ├── jwt_privatekey │ │ │ ├── jwt_publickey │ │ │ ├── queue.properties │ │ │ ├── redis.properties │ │ │ └── usersrepository.xml │ │ │ └── prepopulated-ldap │ │ │ ├── Dockerfile │ │ │ └── populate.ldif │ ├── distributed │ │ ├── pom.xml │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── deployment │ │ │ │ ├── DistributedCliTest.java │ │ │ │ ├── DistributedImapAndSmtpTest.java │ │ │ │ ├── DistributedJmapTest.java │ │ │ │ └── TmailDistributedExtension.java │ │ │ └── resources │ │ │ └── james-conf │ │ │ ├── imapserver.xml │ │ │ ├── jmxremote.password │ │ │ ├── jwt_privatekey │ │ │ ├── jwt_publickey │ │ │ ├── queue.properties │ │ │ └── redis.properties │ ├── memory │ │ ├── pom.xml │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── deployment │ │ │ │ ├── MemoryCliTest.java │ │ │ │ ├── MemoryImapAndSmtpTest.java │ │ │ │ ├── MemoryJmapTest.java │ │ │ │ └── TmailMemoryExtension.java │ │ │ └── resources │ │ │ └── james-conf │ │ │ ├── imapserver.xml │ │ │ ├── jmxremote.password │ │ │ ├── jwt_privatekey │ │ │ └── jwt_publickey │ ├── pom.xml │ └── postgres │ │ ├── pom.xml │ │ └── src │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── deployment │ │ │ ├── PostgresImapAndSmtpTest.java │ │ │ ├── PostgresLdapImapAndSmtpTest.java │ │ │ ├── TmailLdapPostgresExtension.java │ │ │ └── TmailPostgresExtension.java │ │ └── resources │ │ ├── james-conf │ │ ├── blob.properties │ │ ├── imapserver.xml │ │ ├── jmxremote.password │ │ ├── jwt_privatekey │ │ ├── jwt_publickey │ │ ├── keystore │ │ ├── opensearch.properties │ │ ├── rabbitmq.properties │ │ └── usersrepository.xml │ │ └── prepopulated-ldap │ │ ├── Dockerfile │ │ └── populate.ldif ├── event-bus-redis │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── apache │ │ │ │ └── james │ │ │ │ └── events │ │ │ │ ├── CleanRedisEventBusService.java │ │ │ │ ├── KeyChannelMessage.java │ │ │ │ ├── RabbitMQAndRedisEventBus.java │ │ │ │ ├── RedisEventBusConfiguration.java │ │ │ │ ├── RedisKeyRegistrationBinder.java │ │ │ │ ├── RedisKeyRegistrationHandler.java │ │ │ │ ├── TMailEventDispatcher.java │ │ │ │ └── TmailGroupRegistrationHandler.java │ │ └── scala │ │ │ └── org │ │ │ └── apache │ │ │ └── james │ │ │ └── events │ │ │ └── RedisEventBusClientFactory.scala │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── apache │ │ │ └── james │ │ │ └── events │ │ │ ├── CleanRedisEventBusServiceTest.java │ │ │ ├── KeyChannelMessageTest.java │ │ │ ├── RabbitMQAndRedisEventBusContractTest.java │ │ │ ├── RabbitMQAndRedisEventBusTest.java │ │ │ ├── RabbitMQAndRedisEventBusWithKvrocksSentinelTest.java │ │ │ ├── RabbitMQAndRedisEventBusWithKvrocksTest.java │ │ │ ├── RabbitMQAndRedisEventBusWithRedisSentinelTest.java │ │ │ ├── RedisEventBusServiceSentinelTest.java │ │ │ ├── RedisEventBusServiceTest.java │ │ │ └── RedisPlaygroundTest.java │ │ └── resources │ │ ├── keystore.p12 │ │ └── redis_cluster.conf ├── guice │ ├── blob-guice │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── blob │ │ │ │ └── guice │ │ │ │ ├── BlobStoreCacheModulesChooser.java │ │ │ │ ├── BlobStoreConfiguration.java │ │ │ │ ├── BlobStoreConfigurationValidationStartUpCheck.java │ │ │ │ ├── BlobStoreModulesChooser.java │ │ │ │ ├── SecondaryAwsS3ConfigurationReader.java │ │ │ │ ├── SecondaryS3BlobStoreConfiguration.java │ │ │ │ └── SecondaryS3BlobStoreConfigurationReader.java │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── blob │ │ │ └── guice │ │ │ ├── BlobStoreCacheModulesChooserTest.java │ │ │ ├── BlobStoreConfigurationTest.java │ │ │ ├── BlobStoreConfigurationValidationStartUpCheckTest.java │ │ │ └── BlobStoreModulesChooserTest.java │ ├── common │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ ├── DatabaseCombinedUserRequireModule.java │ │ │ ├── ExtensionModuleProvider.java │ │ │ ├── NoopGuiceLoader.java │ │ │ └── UsersRepositoryModuleChooser.java │ ├── distributed │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ ├── RabbitMQDisconnectorModule.java │ │ │ │ ├── ScheduledReconnectionHandler.java │ │ │ │ ├── event │ │ │ │ ├── DistributedEmailAddressContactEventModule.java │ │ │ │ ├── EmailAddressContactRabbitMQEventBusModule.java │ │ │ │ ├── RabbitMQAndRedisEventBusModule.java │ │ │ │ ├── TMailJMAPListenerModule.java │ │ │ │ ├── TmailEventModule.java │ │ │ │ └── TmailEventSerializer.java │ │ │ │ ├── james │ │ │ │ ├── app │ │ │ │ │ ├── DisabledEmailAddressContactSearchEngine.java │ │ │ │ │ ├── DisabledEmailAddressContactSearchEngineModule.java │ │ │ │ │ └── FakeMessageSearchIndex.java │ │ │ │ └── jmap │ │ │ │ │ ├── contact │ │ │ │ │ └── RabbitMQEmailAddressContactModule.java │ │ │ │ │ └── oidc │ │ │ │ │ └── OidcTokenCacheModuleChooser.java │ │ │ │ └── rspamd │ │ │ │ └── RspamdModule.java │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ ├── event │ │ │ └── BlobEventSerializationTest.java │ │ │ ├── james │ │ │ └── app │ │ │ │ ├── DockerOpenSearchExtension.java │ │ │ │ ├── RabbitMQExtension.java │ │ │ │ └── TestRabbitMQModule.java │ │ │ └── rspamd │ │ │ └── RspamdExtensionModule.java │ ├── encrypted-mailbox │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── encrypted │ │ │ ├── MailboxConfiguration.java │ │ │ └── MailboxManagerClassProbe.java │ ├── protocols │ │ └── jmap │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── module │ │ │ └── LinagoraTestJMAPServerModule.java │ └── team-mailboxes │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── team │ │ └── TeamMailboxModule.java ├── healthcheck │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── healthcheck │ │ │ ├── TasksHealthCheckConfiguration.java │ │ │ ├── TasksHeathCheck.java │ │ │ └── TasksHeathCheckModule.java │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── healthcheck │ │ ├── TasksHealthCheckConfigurationTest.java │ │ └── TasksHeathCheckTest.java ├── imap-extensions │ ├── docker-compose.yml │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── imap │ │ │ ├── TMailAuthenticateProcessor.java │ │ │ ├── TMailFullDomainPathConverter.java │ │ │ ├── TMailIMAPModule.java │ │ │ ├── TMailImapAuthPackage.java │ │ │ ├── TMailImapPackage.java │ │ │ ├── TMailLoginProcessor.java │ │ │ ├── TMailNamespaceSupplier.java │ │ │ ├── TMailPathConverter.java │ │ │ └── TMailPathConverterFactory.java │ │ └── test │ │ └── java │ │ ├── com │ │ └── linagora │ │ │ └── tmail │ │ │ └── imap │ │ │ └── TMailPathConverterFactoryTest.java │ │ └── org │ │ └── apache │ │ └── james │ │ └── imap │ │ └── main │ │ ├── TMailFullDomainPathConverterTest.java │ │ ├── TMailPathConverterTest.java │ │ ├── TeamMailboxFullDomainPathConverterContract.java │ │ └── TeamMailboxPathConverterContract.java ├── integration-tests │ ├── healthcheck │ │ ├── distributed-healthcheck-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── integration │ │ │ │ │ └── distributed │ │ │ │ │ └── DistributedTMailHealthCheckIntegrationTests.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── redis.properties │ │ │ │ ├── rspamd.properties │ │ │ │ ├── smtpserver.xml │ │ │ │ └── webadmin.properties │ │ ├── healthcheck-integration-tests-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── integration │ │ │ │ └── TMailHealthCheckIntegrationTests.java │ │ └── postgres-healthcheck-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── integration │ │ │ │ └── postgres │ │ │ │ └── PostgresTMailHealthCheckIntegrationTests.java │ │ │ └── resources │ │ │ ├── batchsizes.properties │ │ │ ├── blob.properties │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── redis.properties │ │ │ ├── rspamd.properties │ │ │ ├── smtpserver.xml │ │ │ └── webadmin.properties │ ├── imap │ │ └── memory-imap-integration-tests │ │ │ ├── docker-compose-sample │ │ │ ├── conf │ │ │ │ ├── imapserver.xml │ │ │ │ └── smtpserver.xml │ │ │ └── script_create_sample_data_for_docker_compose.sh │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── imap │ │ │ │ ├── IMAPTeamMailboxIntegrationTest.java │ │ │ │ ├── TMailAuthenticateProcessorIntegrationTest.java │ │ │ │ └── TMailLoginProcessorIntegrationTest.java │ │ │ └── resources │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── pop3server.xml │ │ │ ├── smtpserver.xml │ │ │ └── usersrepository.xml │ ├── jmap │ │ ├── distributed-jmap-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ ├── DistributedDownloadAllRouteTest.java │ │ │ │ │ ├── DistributedEmailGetMethodTest.java │ │ │ │ │ ├── DistributedEmailQueryMethodNoViewTest.java │ │ │ │ │ ├── DistributedEmailQueryMethodTest.java │ │ │ │ │ ├── DistributedEmailSetMethodTest.java │ │ │ │ │ ├── DistributedFirebasePushContractTest.java │ │ │ │ │ ├── DistributedFirebaseSubscriptionGetMethodTest.java │ │ │ │ │ ├── DistributedFirebaseSubscriptionSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraCalendarEventAcceptMethodTest.java │ │ │ │ │ ├── DistributedLinagoraCalendarEventMaybeMethodTest.java │ │ │ │ │ ├── DistributedLinagoraCalendarEventParseMethodTest.java │ │ │ │ │ ├── DistributedLinagoraCalendarEventRejectMethodTest.java │ │ │ │ │ ├── DistributedLinagoraContactAutoCompleteMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEchoMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEmailRecoveryActionGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEmailRecoveryActionIntegrationTest.java │ │ │ │ │ ├── DistributedLinagoraEmailRecoveryActionSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEmailSendMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEncryptedEmailDetailedViewGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraEncryptedEmailFastViewGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraFilterGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraFilterSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraFilterStateChangeTest.java │ │ │ │ │ ├── DistributedLinagoraForwardGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraForwardSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraJmapSettingsGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraJmapSettingsSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraKeystoreGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraKeystoreSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraLabelChangesMethodTest.java │ │ │ │ │ ├── DistributedLinagoraLabelGetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraLabelSetMethodTest.java │ │ │ │ │ ├── DistributedLinagoraRedisFailureTest.java │ │ │ │ │ ├── DistributedLinagoraSecondaryBlobStoreTest.java │ │ │ │ │ ├── DistributedMailboxClearMethodTest.java │ │ │ │ │ ├── DistributedMailboxGetMethodTest.java │ │ │ │ │ ├── DistributedMailboxQueryMethodTest.java │ │ │ │ │ ├── DistributedMailboxSetMethodTest.java │ │ │ │ │ ├── DistributedOidcAuthenticationTest.java │ │ │ │ │ ├── DistributedPublicAssetGetMethodTest.java │ │ │ │ │ ├── DistributedPublicAssetSetSetMethodTest.java │ │ │ │ │ ├── DistributedTeamMailboxMemberGetMethodTest.java │ │ │ │ │ ├── DistributedTeamMailboxMemberSetMethodTest.java │ │ │ │ │ ├── DistributedTeamMailboxRevokeAccessTest.java │ │ │ │ │ ├── DistributedTeamMailboxesQuotaExtensionsTest.java │ │ │ │ │ ├── DistributedTeamMailboxesTest.java │ │ │ │ │ ├── DistributedTicketRoutesTest.java │ │ │ │ │ ├── TMailDistributedWebSocketTest.java │ │ │ │ │ ├── module │ │ │ │ │ └── CassandraAttachmentProbeModule.java │ │ │ │ │ ├── openpaas │ │ │ │ │ ├── DistributedOpenPaaSCalendarEventAcceptMethodTest.java │ │ │ │ │ ├── DistributedOpenPaaSCalendarEventMaybeMethodTest.java │ │ │ │ │ ├── DistributedOpenPaaSCalendarEventRejectMethodTest.java │ │ │ │ │ └── OpenpaasTestUtils.java │ │ │ │ │ └── probe │ │ │ │ │ └── CassandraAttachmentProbe.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── eml │ │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ │ ├── calendar_reply_declined-en.eml │ │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ │ └── calendar_reply_tentative-fr.eml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── firebase.properties │ │ │ │ ├── imapserver.xml │ │ │ │ ├── jmap.properties │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailetcontainer_openpaas_dav.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── smtpserver.xml │ │ │ │ └── webadmin.properties │ │ ├── jmap-integration-tests-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── common │ │ │ │ │ ├── OidcAuthenticationContract.java │ │ │ │ │ └── TemporaryTmailServerUtils.java │ │ │ │ ├── resources │ │ │ │ ├── emailWithAliceInviteBobIcsAttachment.eml │ │ │ │ ├── emailWithAndreInviteBobIcsAttachment.eml │ │ │ │ ├── emailWithIcsMissingAttendee.eml │ │ │ │ ├── emailWithIcsMissingMethod.eml │ │ │ │ ├── emailWithIcsMissingOrginizer.eml │ │ │ │ ├── emailWithIcsMissingVEVENT.eml │ │ │ │ ├── emailWithTextAttachment.eml │ │ │ │ ├── emailWithTwoInvalidIcsAttachments.eml │ │ │ │ ├── eml │ │ │ │ │ └── mixed-inline-and-normal-attachments.eml │ │ │ │ ├── ics │ │ │ │ │ ├── aliceInviteBob.ics │ │ │ │ │ ├── invalid_STATUS.ics │ │ │ │ │ ├── invalid_TRANSP.ics │ │ │ │ │ ├── meeting.ics │ │ │ │ │ ├── meeting2.ics │ │ │ │ │ ├── meeting_minimize.ics │ │ │ │ │ ├── missingMethod.ics │ │ │ │ │ ├── missing_attendee.ics │ │ │ │ │ ├── missing_organizer.ics │ │ │ │ │ ├── missing_vevent.ics │ │ │ │ │ ├── multipleEvents.ics │ │ │ │ │ └── window_timezone.ics │ │ │ │ ├── mockito-extensions │ │ │ │ │ └── org.mockito.plugins.MockMaker │ │ │ │ ├── publicasset │ │ │ │ │ └── tmail-logo.png │ │ │ │ └── template │ │ │ │ │ ├── emailWithAliceInviteBobIcsAttachment.eml.mustache │ │ │ │ │ ├── emailWithIcsMissingAttendee.eml.mustache │ │ │ │ │ ├── emailWithIcsMissingMethod.eml.mustache │ │ │ │ │ ├── emailWithIcsMissingOrginizer.eml.mustache │ │ │ │ │ ├── emailWithIcsMissingVEVENT.eml.mustache │ │ │ │ │ ├── emailWithTwoInvalidIcsAttachments.eml.mustache │ │ │ │ │ └── ics │ │ │ │ │ ├── aliceInviteBob.ics.mustache │ │ │ │ │ ├── invalid_STATUS.ics.mustache │ │ │ │ │ ├── invalid_TRANSP.ics.mustache │ │ │ │ │ ├── missingMethod.ics.mustache │ │ │ │ │ ├── missingVEVENT.ics.mustache │ │ │ │ │ ├── missing_attendee.ics.mustache │ │ │ │ │ └── missing_organizer.ics.mustache │ │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── common │ │ │ │ ├── CalendarEventCounterAcceptMethodContract.scala │ │ │ │ ├── CalendarEventSupportCapabilityContract.scala │ │ │ │ ├── DownloadAllContract.scala │ │ │ │ ├── EmailRecoveryActionGetMethodContract.scala │ │ │ │ ├── EmailRecoveryActionIntegrationTest.scala │ │ │ │ ├── EmailRecoveryActionSetMethodContract.scala │ │ │ │ ├── EncryptHelper.scala │ │ │ │ ├── FirebasePushContract.scala │ │ │ │ ├── FirebaseSubscriptionGetMethodContract.scala │ │ │ │ ├── FirebaseSubscriptionSetMethodContract.scala │ │ │ │ ├── JmapSettingsGetMethodContract.scala │ │ │ │ ├── JmapSettingsSetMethodContract.scala │ │ │ │ ├── LabelChangesMethodContract.scala │ │ │ │ ├── LabelGetMethodContract.scala │ │ │ │ ├── LabelSetMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventAcceptMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventAttendanceGetMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventMaybeMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventMethodContractUtilities.scala │ │ │ │ ├── LinagoraCalendarEventParseMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventRejectMethodContract.scala │ │ │ │ ├── LinagoraCalendarEventReplyWithAMQPWorkflowContract.scala │ │ │ │ ├── LinagoraContactAutocompleteMethodContract.scala │ │ │ │ ├── LinagoraContactSupportCapabilityContract.scala │ │ │ │ ├── LinagoraEchoMethodContract.scala │ │ │ │ ├── LinagoraEmailSendMethodContract.scala │ │ │ │ ├── LinagoraEncryptedEmailDetailedViewGetMethodContract.scala │ │ │ │ ├── LinagoraEncryptedEmailFastViewGetMethodContract.scala │ │ │ │ ├── LinagoraFilterGetMethodContract.scala │ │ │ │ ├── LinagoraFilterSetMethodContract.scala │ │ │ │ ├── LinagoraFilterStateChangeTest.scala │ │ │ │ ├── LinagoraForwardGetMethodContract.scala │ │ │ │ ├── LinagoraForwardSetMethodContract.scala │ │ │ │ ├── LinagoraKeystoreGetMethodContract.scala │ │ │ │ ├── LinagoraKeystoreSetMethodContract.scala │ │ │ │ ├── LinagoraServicesDiscoveryRoutesContract.scala │ │ │ │ ├── LinagoraTicketAuthenticationContract.scala │ │ │ │ ├── MailboxClearContract.scala │ │ │ │ ├── MemoryMessageVaultCapabilityContract.scala │ │ │ │ ├── PublicAssetGetMethodContract.scala │ │ │ │ ├── PublicAssetRouteContract.scala │ │ │ │ ├── PublicAssetSetMethodContract.scala │ │ │ │ ├── TeamMailboxMemberGetMethodContract.scala │ │ │ │ ├── TeamMailboxMemberSetMethodContract.scala │ │ │ │ ├── TeamMailboxRevokeAccessMethodContract.scala │ │ │ │ ├── TeamMailboxesContract.scala │ │ │ │ ├── TeamMailboxesQuotaExtensionsContract.scala │ │ │ │ ├── WebFingerRoutesContract.scala │ │ │ │ ├── module │ │ │ │ ├── JmapGuiceContactAutocompleteModule.java │ │ │ │ ├── JmapGuiceCustomModule.java │ │ │ │ ├── JmapGuiceKeystoreManagerModule.java │ │ │ │ ├── JmapGuiceLabelModule.java │ │ │ │ └── JmapGuicePublicAssetModule.java │ │ │ │ ├── package.scala │ │ │ │ └── probe │ │ │ │ ├── JmapGuiceContactAutocompleteProbe.java │ │ │ │ ├── JmapGuiceCustomProbe.java │ │ │ │ ├── JmapGuiceEncryptedEmailContentStoreProbe.java │ │ │ │ ├── JmapGuiceKeystoreManagerProbe.java │ │ │ │ ├── JmapGuiceLabelProbe.java │ │ │ │ ├── JmapGuicePublicAssetProbe.java │ │ │ │ ├── JmapSettingsProbe.scala │ │ │ │ ├── MessageFastViewProjectionProbe.java │ │ │ │ ├── MessageIdManagerProbe.java │ │ │ │ └── PublicAssetProbe.scala │ │ ├── memory-jmap-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ ├── MemoryCalendarEventCounterAcceptMethodTest.java │ │ │ │ │ ├── MemoryCalendarEventReplyWithAMQPWorkflowTest.java │ │ │ │ │ ├── MemoryCalendarEventSupportCapabilityTest.java │ │ │ │ │ ├── MemoryDownloadAllRouteTest.java │ │ │ │ │ ├── MemoryEmailGetMethodTest.java │ │ │ │ │ ├── MemoryEmailQueryMethodNoViewTest.java │ │ │ │ │ ├── MemoryEmailQueryMethodTest.java │ │ │ │ │ ├── MemoryEmailRecoveryActionGetMethodTest.java │ │ │ │ │ ├── MemoryEmailRecoveryActionIntegrationTest.java │ │ │ │ │ ├── MemoryEmailRecoveryActionSetMethodTest.java │ │ │ │ │ ├── MemoryEmailSetMethodTest.java │ │ │ │ │ ├── MemoryFirebasePushContractTest.java │ │ │ │ │ ├── MemoryFirebaseSubscriptionGetMethodTest.java │ │ │ │ │ ├── MemoryFirebaseSubscriptionSetMethodTest.java │ │ │ │ │ ├── MemoryJmapSettingsGetMethodTest.java │ │ │ │ │ ├── MemoryJmapSettingsSetMethodTest.java │ │ │ │ │ ├── MemoryLabelSetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraCalendarEventAcceptMethodTest.java │ │ │ │ │ ├── MemoryLinagoraCalendarEventAttendanceGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraCalendarEventMaybeMethodTest.java │ │ │ │ │ ├── MemoryLinagoraCalendarEventParseMethodTest.java │ │ │ │ │ ├── MemoryLinagoraCalendarEventRejectMethodTest.java │ │ │ │ │ ├── MemoryLinagoraContactAutocompleteMethodTest.java │ │ │ │ │ ├── MemoryLinagoraContactSupportCapabilityTest.java │ │ │ │ │ ├── MemoryLinagoraEchoMethodTest.java │ │ │ │ │ ├── MemoryLinagoraEmailSendMethodTest.java │ │ │ │ │ ├── MemoryLinagoraEncryptedEmailDetailedViewGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraEncryptedEmailFastViewGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraFilterGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraFilterSetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraFilterStateChangeTest.java │ │ │ │ │ ├── MemoryLinagoraForwardGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraForwardSetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraKeystoreGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraKeystoreSetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraLabelChangesMethodTest.java │ │ │ │ │ ├── MemoryLinagoraLabelGetMethodTest.java │ │ │ │ │ ├── MemoryLinagoraServicesDiscoveryTest.java │ │ │ │ │ ├── MemoryMailboxClearMethodTest.java │ │ │ │ │ ├── MemoryMailboxGetMethodTest.java │ │ │ │ │ ├── MemoryMailboxQueryMethodTest.java │ │ │ │ │ ├── MemoryMailboxSetMethodTest.java │ │ │ │ │ ├── MemoryMessageVaultCapabilityTest.java │ │ │ │ │ ├── MemoryOidcAuthenticationTest.java │ │ │ │ │ ├── MemoryPublicAssetGetMethodTest.java │ │ │ │ │ ├── MemoryPublicAssetRouteTest.java │ │ │ │ │ ├── MemoryPublicAssetSetSetMethodTest.java │ │ │ │ │ ├── MemoryTeamMailboxMemberGetMethodTest.java │ │ │ │ │ ├── MemoryTeamMailboxMemberSetMethodTest.java │ │ │ │ │ ├── MemoryTeamMailboxRevokeAccessTest.java │ │ │ │ │ ├── MemoryTeamMailboxesQuotaExtensionsTest.java │ │ │ │ │ ├── MemoryTeamMailboxesTest.java │ │ │ │ │ ├── MemoryTicketAuthenticationTest.java │ │ │ │ │ ├── MemoryWebFingerTest.java │ │ │ │ │ └── openpaas │ │ │ │ │ └── OpenpaasTestUtils.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── eml │ │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ │ ├── calendar_reply_declined-en.eml │ │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ │ └── calendar_reply_tentative-fr.eml │ │ │ │ ├── firebase.properties │ │ │ │ ├── imapserver.xml │ │ │ │ ├── jmap.properties │ │ │ │ ├── keystore │ │ │ │ ├── linagora-ecosystem.properties │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailetcontainer_with_amqpforward_openpass.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ └── postgres-jmap-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ ├── PostgresEmailGetMethodTest.java │ │ │ │ ├── PostgresEmailQueryMethodTest.java │ │ │ │ ├── PostgresEmailSetMethodTest.java │ │ │ │ ├── PostgresFirebasePushTest.java │ │ │ │ ├── PostgresFirebaseSubscriptionGetMethodTest.java │ │ │ │ ├── PostgresFirebaseSubscriptionSetMethodTest.java │ │ │ │ ├── PostgresLinagoraCalendarEventAcceptMethodTest.java │ │ │ │ ├── PostgresLinagoraCalendarEventMaybeMethodTest.java │ │ │ │ ├── PostgresLinagoraCalendarEventParseMethodTest.java │ │ │ │ ├── PostgresLinagoraCalendarEventRejectMethodTest.java │ │ │ │ ├── PostgresLinagoraContactAutoCompleteMethodTest.java │ │ │ │ ├── PostgresLinagoraEchoMethodTest.java │ │ │ │ ├── PostgresLinagoraEmailRecoveryActionGetMethodTest.java │ │ │ │ ├── PostgresLinagoraEmailRecoveryActionIntegrationTest.java │ │ │ │ ├── PostgresLinagoraEmailRecoveryActionSetMethodTest.java │ │ │ │ ├── PostgresLinagoraEmailSendMethodTest.java │ │ │ │ ├── PostgresLinagoraEncryptedEmailDetailedViewGetMethodTest.java │ │ │ │ ├── PostgresLinagoraEncryptedEmailFastViewGetMethodTest.java │ │ │ │ ├── PostgresLinagoraFilterGetMethodTest.java │ │ │ │ ├── PostgresLinagoraFilterSetMethodTest.java │ │ │ │ ├── PostgresLinagoraFilterStateChangeTest.java │ │ │ │ ├── PostgresLinagoraForwardGetMethodTest.java │ │ │ │ ├── PostgresLinagoraForwardSetMethodTest.java │ │ │ │ ├── PostgresLinagoraJmapSettingsGetMethodTest.java │ │ │ │ ├── PostgresLinagoraJmapSettingsSetMethodTest.java │ │ │ │ ├── PostgresLinagoraKeystoreGetMethodTest.java │ │ │ │ ├── PostgresLinagoraKeystoreSetMethodTest.java │ │ │ │ ├── PostgresLinagoraLabelChangesMethodTest.java │ │ │ │ ├── PostgresLinagoraLabelGetMethodTest.java │ │ │ │ ├── PostgresLinagoraLabelSetMethodTest.java │ │ │ │ ├── PostgresMailboxClearMethodTest.java │ │ │ │ ├── PostgresMailboxGetMethodTest.java │ │ │ │ ├── PostgresMailboxQueryMethodTest.java │ │ │ │ ├── PostgresMailboxSetMethodTest.java │ │ │ │ ├── PostgresOidcAuthenticationTest.java │ │ │ │ ├── PostgresTeamMailboxRevokeAccessTest.java │ │ │ │ ├── PostgresTeamMailboxesQuotaExtensionsTest.java │ │ │ │ ├── PostgresTeamMailboxesTest.java │ │ │ │ ├── PostgresTicketRoutesTest.java │ │ │ │ └── TmailJmapBase.java │ │ │ └── resources │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── eml │ │ │ ├── calendar_reply_accepted-en.eml │ │ │ ├── calendar_reply_accepted-fr.eml │ │ │ ├── calendar_reply_declined-en.eml │ │ │ ├── calendar_reply_declined-fr.eml │ │ │ ├── calendar_reply_tentative-en.eml │ │ │ └── calendar_reply_tentative-fr.eml │ │ │ ├── firebase.properties │ │ │ ├── imapserver.xml │ │ │ ├── jmap.properties │ │ │ ├── keystore │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── managesieveserver.xml │ │ │ ├── pop3server.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── smtpserver.xml │ │ │ ├── usersrepository.xml │ │ │ └── webadmin.properties │ ├── pom.xml │ ├── rate-limiter │ │ ├── distributed-rate-limiter-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── integration │ │ │ │ │ └── distributed │ │ │ │ │ └── DistributedRateLimitingPlanIntegrationTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── smtpserver.xml │ │ │ │ └── webadmin.properties │ │ ├── postgres-rate-limiter-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── integration │ │ │ │ │ └── postgres │ │ │ │ │ └── PostgresRateLimitingPlanIntegrationTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── managesieveserver.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ └── rate-limiter-integration-tests-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── main │ │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── integration │ │ │ └── RateLimitingPlanIntegrationContract.scala │ ├── rspamd │ │ ├── distributed-rspamd-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── integration │ │ │ │ │ └── distributed │ │ │ │ │ └── DistributedRspamdScannerIntegrationTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── rspamd-config │ │ │ │ └── actions.conf │ │ │ │ ├── smtpserver.xml │ │ │ │ └── webadmin.properties │ │ ├── postgres-rspamd-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── integration │ │ │ │ │ └── postgres │ │ │ │ │ └── PostgresRspamdScannerIntegrationTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── jmap.properties │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── managesieveserver.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── rspamd-config │ │ │ │ └── actions.conf │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ └── rspamd-integration-tests-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── integration │ │ │ │ └── RspamdScannerIntegrationContract.java │ │ │ └── resources │ │ │ └── spam8.eml │ ├── smtp │ │ ├── distributed-smtp-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── DistributedTeamMailboxSmtpTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ └── smtpserver.xml │ │ ├── memory-smtp-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ ├── MemoryTeamMailboxSmtpTest.java │ │ │ │ │ └── TMailAuthenticateIntegrationTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── smtpserver.xml │ │ │ │ └── usersrepository.xml │ │ ├── postgres-smtp-integration-tests │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── PostgresTeamMailboxSmtpTest.java │ │ │ │ └── resources │ │ │ │ ├── dnsservice.xml │ │ │ │ ├── domainlist.xml │ │ │ │ ├── fakemailrepositorystore.xml │ │ │ │ ├── imapserver.xml │ │ │ │ ├── keystore │ │ │ │ ├── listeners.xml │ │ │ │ ├── mailetcontainer.xml │ │ │ │ ├── mailrepositorystore.xml │ │ │ │ ├── managesieveserver.xml │ │ │ │ ├── pop3server.xml │ │ │ │ ├── rabbitmq.properties │ │ │ │ ├── smtpserver.xml │ │ │ │ ├── usersrepository.xml │ │ │ │ └── webadmin.properties │ │ └── smtp-integration-tests-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── common │ │ │ └── TeamMailboxSmtpContract.java │ └── webadmin │ │ ├── distributed-webadmin-integration-tests │ │ ├── pom.xml │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── integration │ │ │ │ └── distributed │ │ │ │ ├── DistributedCleanupIntegrationTest.java │ │ │ │ ├── DistributedContactIndexingIntegrationTest.java │ │ │ │ ├── DistributedInboxArchivalIntegrationTest.java │ │ │ │ ├── DistributedJmapUploadCleanRouteIntegrationTest.java │ │ │ │ ├── DistributedOpenpaasContactIndexingIntegrationTest.java │ │ │ │ ├── DistributedProtocolServerIntegrationTest.java │ │ │ │ ├── DistributedRecomputeQuotaTeamMailboxesRouteIntegrationTest.java │ │ │ │ ├── DistributedRspamdFeedMessageRouteIntegrationTest.java │ │ │ │ ├── DistributedUserDeletionIntegrationTest.java │ │ │ │ └── DistributedUsernameChangeIntegrationTest.java │ │ │ └── resources │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── fakemailrepositorystore.xml │ │ │ ├── firebase.properties │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── pop3server.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── rspamd.properties │ │ │ ├── smtpserver.xml │ │ │ └── webadmin.properties │ │ ├── postgres-webadmin-integration-tests │ │ ├── pom.xml │ │ └── src │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── integration │ │ │ │ └── postgres │ │ │ │ ├── PostgresCleanupIntegrationContract.java │ │ │ │ ├── PostgresInboxArchivalIntegrationTest.java │ │ │ │ ├── PostgresJmapUploadCleanRouteIntegrationTest.java │ │ │ │ ├── PostgresRecomputeQuotaTeamMailboxesRouteIntegrationTest.java │ │ │ │ ├── PostgresRspamdFeedMessageRouteIntegrationTest.java │ │ │ │ ├── PostgresUserDeletionIntegrationTest.java │ │ │ │ ├── PostgresUsernameChangeIntegrationTest.java │ │ │ │ └── PostgresWebAdminBase.java │ │ │ └── resources │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── imapserver.xml │ │ │ ├── jmap.properties │ │ │ ├── keystore │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── managesieveserver.xml │ │ │ ├── pop3server.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── rspamd.properties │ │ │ ├── smtpserver.xml │ │ │ ├── usersrepository.xml │ │ │ └── webadmin.properties │ │ └── webadmin-integration-tests-common │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── integration │ │ ├── CleanupIntegrationContract.java │ │ ├── ContactIndexingIntegrationContract.java │ │ ├── InboxArchivalIntegrationContract.java │ │ ├── JmapUploadCleanRouteIntegrationContract.java │ │ ├── RecomputeQuotaTeamMailboxesRouteIntegrationContract.java │ │ ├── RspamdFeedMessageRouteIntegrationContract.java │ │ ├── TestFixture.java │ │ ├── UserDeletionIntegrationContract.java │ │ ├── UsernameChangeIntegrationContract.java │ │ └── probe │ │ └── RateLimitingProbe.java ├── jmap │ ├── extensions-api │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── jmap │ │ │ │ │ ├── AttendanceStatus.java │ │ │ │ │ ├── CalendarComponentNotFoundException.java │ │ │ │ │ ├── CalendarEventNotFoundException.java │ │ │ │ │ ├── CalendarEventRepository.java │ │ │ │ │ ├── CalendarPropertyNotFoundException.java │ │ │ │ │ ├── EmailAddressContactInjectKeys.java │ │ │ │ │ ├── EventAttendanceRepository.java │ │ │ │ │ ├── MessagePartBlobId.java │ │ │ │ │ ├── OutdatedCalendarUpdateException.java │ │ │ │ │ ├── RecurringCalendarEventNotFoundException.java │ │ │ │ │ ├── contact │ │ │ │ │ └── ContactAddIndexingProcessor.java │ │ │ │ │ └── firebase │ │ │ │ │ ├── FirebaseSubscriptionHelper.java │ │ │ │ │ ├── FirebaseSubscriptionRepository.java │ │ │ │ │ ├── FirebaseSubscriptionUserDeletionTaskStep.java │ │ │ │ │ └── MemoryFirebaseSubscriptionRepository.java │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── PublicAssetTotalSizeLimit.scala │ │ │ │ ├── calendar │ │ │ │ ├── CalendarEventModifier.scala │ │ │ │ └── CalendarResolver.scala │ │ │ │ ├── contact │ │ │ │ ├── ContactUserDeletionTaskStep.scala │ │ │ │ ├── ContactUsernameChangeTaskStep.scala │ │ │ │ ├── EmailAddressContact.scala │ │ │ │ ├── EmailAddressContactListener.scala │ │ │ │ ├── EmailAddressContactMessage.scala │ │ │ │ └── EmailAddressContactMessageHandler.scala │ │ │ │ ├── label │ │ │ │ ├── LabelChangeRepository.scala │ │ │ │ ├── LabelRepository.scala │ │ │ │ ├── LabelUserDeletionTaskStep.scala │ │ │ │ ├── LabelUsernameChangeTaskStep.scala │ │ │ │ ├── MemoryLabelChangeRepository.scala │ │ │ │ └── MemoryLabelRepository.scala │ │ │ │ ├── model │ │ │ │ ├── CalendarEventAttendanceResults.scala │ │ │ │ ├── CalendarEventParse.scala │ │ │ │ ├── CalendarEventReplyResults.scala │ │ │ │ ├── FirebaseSubscription.scala │ │ │ │ ├── Label.scala │ │ │ │ ├── LabelChange.scala │ │ │ │ └── LanguageLocation.scala │ │ │ │ ├── publicAsset │ │ │ │ ├── MemoryPublicAssetRepository.scala │ │ │ │ ├── PublicAssetRepository.scala │ │ │ │ ├── PublicAssetRequest.scala │ │ │ │ └── PublicAssetSetService.scala │ │ │ │ ├── settings │ │ │ │ ├── JmapSettings.scala │ │ │ │ ├── JmapSettingsRepository.scala │ │ │ │ ├── JmapSettingsUserDeletionTaskStep.scala │ │ │ │ ├── JmapSettingsUsernameChangeTaskStep.scala │ │ │ │ └── MemoryJmapSettingsRepository.scala │ │ │ │ └── ticket │ │ │ │ ├── ForbiddenException.scala │ │ │ │ ├── MemoryTicketStore.scala │ │ │ │ ├── Ticket.scala │ │ │ │ ├── TicketStore.scala │ │ │ │ └── TicketValue.scala │ │ │ └── test │ │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ ├── calendar │ │ │ ├── CalendarEventHelper.scala │ │ │ └── CalendarEventModifierTest.scala │ │ │ ├── contact │ │ │ ├── EmailAddressContactSearchEngineContract.scala │ │ │ ├── MemoryEmailAddressContactSearchEngineTest.scala │ │ │ └── QueryType.scala │ │ │ ├── firebase │ │ │ ├── FirebaseSubscriptionRepositoryContract.scala │ │ │ └── MemoryFirebaseSubscriptionRepositoryTest.scala │ │ │ ├── label │ │ │ ├── LabelChangeRepositoryContract.scala │ │ │ ├── LabelRepositoryContract.scala │ │ │ ├── MemoryLabelChangeRepositoryTest.scala │ │ │ └── MemoryLabelRepositoryTest.scala │ │ │ ├── publicAsset │ │ │ ├── MemoryPublicAssetRepositoryTest.scala │ │ │ ├── MemoryPublicAssetServiceTest.scala │ │ │ ├── PublicAssetRepositoryContract.scala │ │ │ └── PublicAssetServiceContract.scala │ │ │ ├── settings │ │ │ ├── JmapSettingsRepositoryContract.scala │ │ │ └── MemoryJmapSettingsRepositoryTest.scala │ │ │ └── ticket │ │ │ ├── MemoryTicketStoreTest.scala │ │ │ └── TicketStoreContract.scala │ ├── extensions-cassandra │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── firebase │ │ │ │ ├── CassandraFirebaseSubscriptionDAO.scala │ │ │ │ └── CassandraFirebaseSubscriptionRepository.scala │ │ │ │ ├── label │ │ │ │ ├── CassandraLabelChangeDAO.scala │ │ │ │ ├── CassandraLabelChangeRepository.scala │ │ │ │ ├── CassandraLabelChangesConfiguration.scala │ │ │ │ ├── CassandraLabelDAO.scala │ │ │ │ └── CassandraLabelRepository.scala │ │ │ │ ├── publicAsset │ │ │ │ ├── CassandraPublicAssetDAO.scala │ │ │ │ └── CassandraPublicAssetRepository.scala │ │ │ │ ├── settings │ │ │ │ ├── CassandraJmapSettingsDAO.scala │ │ │ │ └── CassandraJmapSettingsRepository.scala │ │ │ │ └── ticket │ │ │ │ └── CassandraTicketStore.scala │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ ├── firebase │ │ │ └── CassandraFirebaseSubscriptionRepositoryTest.java │ │ │ ├── label │ │ │ ├── CassandraLabelChangeRepositoryTest.java │ │ │ ├── CassandraLabelChangesConfigurationTest.java │ │ │ └── CassandraLabelRepositoryTest.java │ │ │ ├── publicAsset │ │ │ ├── CassandraPublicAssetRepositoryTest.java │ │ │ └── CassandraPublicAssetServiceTest.java │ │ │ ├── settings │ │ │ └── CassandraJmapSettingsRepositoryTest.java │ │ │ └── ticket │ │ │ └── CassandraTicketStoreTest.java │ ├── extensions-opensearch │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── ContactMappingFactory.java │ │ │ │ ├── OSEmailAddressContactSearchEngine.java │ │ │ │ ├── OpenSearchContactConfiguration.java │ │ │ │ ├── dto │ │ │ │ ├── DomainContactDocument.java │ │ │ │ └── UserContactDocument.java │ │ │ │ └── module │ │ │ │ ├── ContactIndexCreationUtil.java │ │ │ │ └── OSContactAutoCompleteModule.java │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora.tmail.james.jmap.model │ │ │ └── OSEmailAddressContactSearchTest.java │ ├── extensions-postgres │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── jmap │ │ │ │ │ ├── firebase │ │ │ │ │ ├── PostgresFirebaseModule.java │ │ │ │ │ ├── PostgresFirebaseRepositoryModule.java │ │ │ │ │ ├── PostgresFirebaseSubscriptionDAO.java │ │ │ │ │ └── PostgresFirebaseSubscriptionRepository.java │ │ │ │ │ ├── label │ │ │ │ │ ├── PostgresLabelChangeDAO.java │ │ │ │ │ ├── PostgresLabelChangeRepository.java │ │ │ │ │ ├── PostgresLabelDAO.java │ │ │ │ │ ├── PostgresLabelModule.java │ │ │ │ │ ├── PostgresLabelRepository.java │ │ │ │ │ └── PostgresLabelRepositoryModule.java │ │ │ │ │ └── settings │ │ │ │ │ ├── PostgresJmapSettingsDAO.java │ │ │ │ │ ├── PostgresJmapSettingsModule.java │ │ │ │ │ ├── PostgresJmapSettingsRepository.java │ │ │ │ │ └── PostgresJmapSettingsRepositoryModule.java │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── label │ │ │ │ └── PostgresLabelDAOUtils.scala │ │ │ │ ├── publicAsset │ │ │ │ ├── PostgresPublicAssetDAO.scala │ │ │ │ └── PostgresPublicAssetRepository.scala │ │ │ │ └── ticket │ │ │ │ └── PostgresTicketStore.scala │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ ├── firebase │ │ │ └── PostgresFirebaseSubscriptionRepositoryTest.java │ │ │ ├── label │ │ │ ├── PostgresLabelChangeRepositoryTest.java │ │ │ └── PostgresLabelRepositoryTest.java │ │ │ ├── publicAsset │ │ │ └── PostgresPublicAssetRepositoryTest.java │ │ │ ├── settings │ │ │ └── PostgresJmapSettingsRepositoryTest.java │ │ │ └── ticket │ │ │ └── PostgresTicketStoreTest.java │ ├── extensions-rabbitmq │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── jmap │ │ │ │ │ ├── RabbitMQEmailAddressContactConfiguration.java │ │ │ │ │ └── RabbitMQEmailAddressContactSubscriber.java │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ └── json │ │ │ │ └── EmailAddressContactMessageSerializer.scala │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── RabbitMQEmailAddressContactConfigurationTest.java │ │ │ │ └── RabbitMQEmailAddressContactSubscriberTest.java │ │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ └── json │ │ │ └── EmailAddressContactMessageSerializerTest.scala │ ├── extensions-redis │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── james │ │ │ │ │ └── jmap │ │ │ │ │ └── oidc │ │ │ │ │ ├── RedisOidcTokenCache.java │ │ │ │ │ ├── RedisOidcTokenCacheModule.java │ │ │ │ │ └── RedisTokenCacheCommands.java │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ └── oidc │ │ │ │ └── RedisConfigurationUtils.scala │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ └── oidc │ │ │ ├── RedisClusterOidcTokenCacheTest.java │ │ │ ├── RedisOidcTokenCacheContract.java │ │ │ ├── RedisSentinelOidcTokenCacheTest.java │ │ │ └── RedisStandaloneOidcTokenCacheTest.java │ └── extensions │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── james │ │ │ │ └── jmap │ │ │ │ ├── StandaloneEventRepository.java │ │ │ │ ├── ZipUtil.java │ │ │ │ ├── firebase │ │ │ │ ├── FirebaseCommonModule.java │ │ │ │ ├── FirebaseConfiguration.java │ │ │ │ ├── FirebaseModuleChooserConfiguration.java │ │ │ │ ├── FirebasePushClient.java │ │ │ │ ├── FirebasePushRequest.java │ │ │ │ ├── FirebasePushUrgency.java │ │ │ │ └── FirebaseSubscriptionDisconnector.java │ │ │ │ ├── oidc │ │ │ │ ├── Aud.java │ │ │ │ ├── CaffeineOidcTokenCache.java │ │ │ │ ├── CaffeineOidcTokenCacheModule.java │ │ │ │ ├── JMAPOidcConfiguration.java │ │ │ │ ├── JMAPOidcModule.java │ │ │ │ ├── OidcAuthenticationStrategy.java │ │ │ │ ├── OidcEndpointsInfoResolver.java │ │ │ │ ├── OidcTokenCache.java │ │ │ │ ├── OidcTokenCacheConfiguration.java │ │ │ │ ├── Sid.java │ │ │ │ ├── Token.java │ │ │ │ ├── TokenInfo.java │ │ │ │ └── TokenInfoResolver.java │ │ │ │ └── perfs │ │ │ │ ├── TMailCleverAttachmentIdAssignationStrategy.java │ │ │ │ └── TMailCleverBlobResolverModule.java │ │ ├── resources │ │ │ └── eml │ │ │ │ └── multipart_simple_with_duplicated_attachment_name.eml │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ ├── ContactSupportCapabilitiesModule.scala │ │ │ ├── JMAPExtensionConfiguration.scala │ │ │ ├── TMailJMAPModule.scala │ │ │ ├── contact │ │ │ └── TmailJmapEventSerializer.scala │ │ │ ├── firebase │ │ │ ├── FirebasePushEnableSetting.scala │ │ │ └── FirebasePushListener.scala │ │ │ ├── json │ │ │ ├── CalendarEventAttendanceSerializer.scala │ │ │ ├── CalendarEventCounterSerializer.scala │ │ │ ├── CalendarEventReplySerializer.scala │ │ │ ├── CalendarEventSerializer.scala │ │ │ ├── ContactSerializer.scala │ │ │ ├── EmailRecoveryActionSerializer.scala │ │ │ ├── EmailSendSerializer.scala │ │ │ ├── EncryptedEmailSerializer.scala │ │ │ ├── FilterSerializer.scala │ │ │ ├── FirebaseSubscriptionSerializer.scala │ │ │ ├── ForwardSerializer.scala │ │ │ ├── JmapSettingsSerializer.scala │ │ │ ├── KeystoreSerializer.scala │ │ │ ├── LabelChangesSerializer.scala │ │ │ ├── LabelSerializer.scala │ │ │ ├── MailboxClearSerializer.scala │ │ │ ├── PublicAssetSerializer.scala │ │ │ ├── TeamMailboxMemberSerializer.scala │ │ │ ├── TeamMailboxRevokeAccessSerializer.scala │ │ │ ├── TicketSerializer.scala │ │ │ └── json.scala │ │ │ ├── label │ │ │ └── LabelChangesPopulate.scala │ │ │ ├── mail │ │ │ ├── Mailbox.scala │ │ │ └── TMailMailboxSortOrderProviderModule.scala │ │ │ ├── method │ │ │ ├── CalendarEventAcceptMethod.scala │ │ │ ├── CalendarEventAttendanceGetMethod.scala │ │ │ ├── CalendarEventAttendanceStatusPerformer.scala │ │ │ ├── CalendarEventCounterAcceptMethod.scala │ │ │ ├── CalendarEventCounterPerformer.scala │ │ │ ├── CalendarEventMaybeMethod.scala │ │ │ ├── CalendarEventParseMethod.scala │ │ │ ├── CalendarEventRejectMethod.scala │ │ │ ├── CalendarEventReplyMailProcessor.scala │ │ │ ├── ContactAutocompleteMethod.scala │ │ │ ├── CustomMethod.scala │ │ │ ├── EmailRecoveryActionGetMethod.scala │ │ │ ├── EmailRecoveryActionSetMethod.scala │ │ │ ├── EmailSendMethod.scala │ │ │ ├── EncryptedAttachmentBlobResolver.scala │ │ │ ├── EncryptedEmailDetailedViewGetMethod.scala │ │ │ ├── EncryptedEmailFastViewGetMethod.scala │ │ │ ├── FilterGetMethod.scala │ │ │ ├── FilterSetMethod.scala │ │ │ ├── FirebaseCapability.scala │ │ │ ├── FirebaseSubscriptionGetMethod.scala │ │ │ ├── FirebaseSubscriptionSetCreatePerformer.scala │ │ │ ├── FirebaseSubscriptionSetDeletePerformer.scala │ │ │ ├── FirebaseSubscriptionSetMethod.scala │ │ │ ├── FirebaseSubscriptionSetUpdatePerformer.scala │ │ │ ├── ForwardGetMethod.scala │ │ │ ├── ForwardSetMethod.scala │ │ │ ├── JmapSettingsGetMethod.scala │ │ │ ├── JmapSettingsSetMethod.scala │ │ │ ├── KeystoreGetMethod.scala │ │ │ ├── KeystoreSetCreatePerformer.scala │ │ │ ├── KeystoreSetDestroyPerformer.scala │ │ │ ├── KeystoreSetMethod.scala │ │ │ ├── LabelChangesMethod.scala │ │ │ ├── LabelGetMethod.scala │ │ │ ├── LabelSetCreatePerformer.scala │ │ │ ├── LabelSetDeletePerformer.scala │ │ │ ├── LabelSetMethod.scala │ │ │ ├── LabelSetUpdatePerformer.scala │ │ │ ├── MailboxClearMethod.scala │ │ │ ├── MessageVaultCapability.scala │ │ │ ├── PublicAssetGetMethod.scala │ │ │ ├── PublicAssetSetMethod.scala │ │ │ ├── PublicAssetsCapability.scala │ │ │ ├── TeamMailboxMemberGetMethod.scala │ │ │ ├── TeamMailboxMemberSetMethod.scala │ │ │ ├── TeamMailboxRevokeAccessMethod.scala │ │ │ └── package.scala │ │ │ ├── model │ │ │ ├── CalendarEventCounter.scala │ │ │ ├── CalendarEventParseRequest.scala │ │ │ ├── CalendarEventParseResponse.scala │ │ │ ├── CalendarEventParseResults.scala │ │ │ ├── CalendarEventReply.scala │ │ │ ├── CalendarEventReplyGenerator.scala │ │ │ ├── ContactAutocomplete.scala │ │ │ ├── EmailRecoveryAction.scala │ │ │ ├── EmailSend.scala │ │ │ ├── EmailSubmissionHelper.scala │ │ │ ├── EncryptedEmailGet.scala │ │ │ ├── FilterGet.scala │ │ │ ├── FilterSet.scala │ │ │ ├── FirebaseSubscription.scala │ │ │ ├── ForwardGet.scala │ │ │ ├── ForwardSet.scala │ │ │ ├── JmapSettingsGet.scala │ │ │ ├── JmapSettingsSet.scala │ │ │ ├── KeystoreGet.scala │ │ │ ├── KeystoreSet.scala │ │ │ ├── Label.scala │ │ │ ├── LabelChange.scala │ │ │ ├── LabelSet.scala │ │ │ ├── MailboxClear.scala │ │ │ ├── PublicAssetGetRequest.scala │ │ │ ├── TeamMailbox.scala │ │ │ ├── TeamMailboxMemberGetRequest.scala │ │ │ └── TeamMailboxMemberSetRequest.scala │ │ │ ├── oidc │ │ │ └── WebFingerRoutes.scala │ │ │ ├── perfs │ │ │ ├── TMailCleverBlobResolver.scala │ │ │ └── TMailCleverMessageParser.scala │ │ │ ├── publicAsset │ │ │ ├── PublicAssetBlobReferenceSource.scala │ │ │ ├── PublicAssetDeletionTaskStep.scala │ │ │ ├── PublicAssetRoutes.scala │ │ │ ├── PublicAssetSetRequest.scala │ │ │ └── PublicAssetsModule.scala │ │ │ ├── routes │ │ │ └── DownloadAllRoutes.scala │ │ │ ├── service │ │ │ └── discovery │ │ │ │ ├── LinagoraServicesDiscoveryConfiguration.scala │ │ │ │ ├── LinagoraServicesDiscoveryModuleChooserConfiguration.scala │ │ │ │ └── LinagoraServicesDiscoveryRoutes.scala │ │ │ ├── team │ │ │ └── mailboxes │ │ │ │ ├── TMailNamespaceFactory.scala │ │ │ │ ├── TeamMailboxAutocompleteCallback.scala │ │ │ │ ├── TeamMailboxJmapModule.scala │ │ │ │ └── TeamMailboxesCapability.scala │ │ │ └── ticket │ │ │ ├── TicketAuthenticationStrategy.scala │ │ │ ├── TicketManager.scala │ │ │ └── TicketRoutes.scala │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── james │ │ │ └── jmap │ │ │ ├── UpdateEntryNameTest.java │ │ │ ├── firebase │ │ │ └── FirebaseClientTest.java │ │ │ ├── oidc │ │ │ ├── CaffeineOidcTokenCacheTest.java │ │ │ └── OidcTokenCacheContract.java │ │ │ └── service │ │ │ └── discovery │ │ │ └── LinagoraServicesDiscoveryConfigurationTest.java │ │ ├── resources │ │ ├── eml │ │ │ └── calendar_reply │ │ │ │ ├── multipart.eml │ │ │ │ ├── multipart_html.eml │ │ │ │ ├── mustache_show.eml │ │ │ │ ├── single.eml │ │ │ │ └── singlepart_html.eml │ │ ├── invalid-firebase-private-key.json │ │ ├── mockito-extensions │ │ │ └── org.mockito.plugins.MockMaker │ │ └── valid-firebase-private-key.json │ │ └── scala │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── james │ │ └── jmap │ │ ├── JMAPExtensionConfigurationTest.scala │ │ ├── StandaloneEventRepositoryTest.scala │ │ ├── calendar │ │ ├── CalendarEventMailReplyGeneratorTest.scala │ │ ├── CalendarEventParsedTest.scala │ │ ├── CalendarEventReplyGeneratorTest.scala │ │ └── I18NCalendarEventReplyMessageGeneratorTest.scala │ │ ├── contact │ │ ├── ContactUserDeletionTaskStepTest.scala │ │ ├── ContactUsernameChangeTaskStepTest.scala │ │ └── EmailAddressContactListenerIntegrationTest.scala │ │ ├── firebase │ │ ├── FirebasePushEnableSettingParserTest.scala │ │ ├── FirebasePushListenerTest.scala │ │ └── FirebaseSubscriptionUserDeletionTaskStepTest.scala │ │ ├── json │ │ ├── CalendarEventCounterSerializerTest.scala │ │ ├── CalendarEventReplySerializerTest.scala │ │ ├── EmailRecoveryActionSerializerTest.scala │ │ ├── EmailSendSerializerTest.scala │ │ ├── EncryptedEmailSerializerTest.scala │ │ ├── Fixture.scala │ │ ├── ForwardSetSerializerTest.scala │ │ ├── JmapSettingsSerializerTest.scala │ │ ├── LabelChangesSerializerTest.scala │ │ ├── LabelSerializerTest.scala │ │ ├── LinagoraServicesDiscoveryConfigurationSerializeTest.scala │ │ ├── MailboxClearSerializerTest.scala │ │ └── PublicAssetSerializerTest.scala │ │ ├── label │ │ ├── LabelUserDeletionTaskStepTest.scala │ │ └── LabelUsernameChangeTaskStepTest.scala │ │ ├── publicAsset │ │ ├── PublicAssetDeletionTaskStepTest.scala │ │ └── PublicAssetURITest.scala │ │ ├── settings │ │ ├── JmapSettingsRepositoryJavaUtils.scala │ │ ├── JmapSettingsTest.scala │ │ ├── JmapSettingsUserDeletionTaskStepTest.scala │ │ └── JmapSettingsUsernameChangeTaskStepTest.scala │ │ └── ticket │ │ └── TicketManagerTest.scala ├── mailbox │ ├── encrypted │ │ ├── api │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ └── scala │ │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── encrypted │ │ │ │ │ ├── AttachmentMetaDataSerializer.scala │ │ │ │ │ ├── ClearEmailContent.scala │ │ │ │ │ ├── EncryptedEmailContent.scala │ │ │ │ │ ├── EncryptedEmailContentStore.scala │ │ │ │ │ ├── EncryptedMailboxManager.scala │ │ │ │ │ ├── EncryptedMessageManager.scala │ │ │ │ │ ├── KeystoreManager.scala │ │ │ │ │ ├── MailboxReactorUtils.java │ │ │ │ │ ├── PGPKeysUserDeletionTaskStep.scala │ │ │ │ │ └── PGPKeysUsernameChangeTaskStep.scala │ │ │ │ └── test │ │ │ │ ├── resources │ │ │ │ ├── gpg.private │ │ │ │ └── gpg.pub │ │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── encrypted │ │ │ │ ├── AttachmentMetaDataSerializerTest.scala │ │ │ │ ├── ClearEmailContentTest.scala │ │ │ │ ├── EncryptedEmailContentStoreContract.scala │ │ │ │ ├── EncryptedEmailContentTest.scala │ │ │ │ ├── KeystoreManagerContract.scala │ │ │ │ ├── PGPKeysUserDeletionTaskStepContract.scala │ │ │ │ └── PGPKeysUsernameChangeTaskStepContract.scala │ │ ├── cassandra │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ └── java │ │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── encrypted │ │ │ │ │ └── cassandra │ │ │ │ │ ├── CassandraEncryptedEmailContentStore.scala │ │ │ │ │ ├── CassandraEncryptedEmailDAO.scala │ │ │ │ │ ├── CassandraKeystoreDAO.scala │ │ │ │ │ ├── CassandraKeystoreManager.scala │ │ │ │ │ ├── DeleteEncryptedProjectionHook.java │ │ │ │ │ └── table │ │ │ │ │ ├── CassandraEncryptedEmailStoreModule.scala │ │ │ │ │ ├── CassandraKeystoreModule.scala │ │ │ │ │ ├── EncryptedEmailTable.scala │ │ │ │ │ └── KeyStoreTable.scala │ │ │ │ └── test │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── encrypted │ │ │ │ └── cassandra │ │ │ │ ├── CassandraEncryptedEmailContentStoreTest.java │ │ │ │ ├── CassandraKeystoreManagerTest.java │ │ │ │ └── DeleteEncryptedProjectionHookTest.java │ │ ├── mailbox-encrypted-postgres │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ └── java │ │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── encrypted │ │ │ │ │ └── postgres │ │ │ │ │ ├── PostgresEncryptedEmailBlobReferenceSource.java │ │ │ │ │ ├── PostgresEncryptedEmailContentStore.java │ │ │ │ │ ├── PostgresEncryptedEmailContentStoreModule.java │ │ │ │ │ ├── PostgresEncryptedEmailStoreDAO.java │ │ │ │ │ ├── PostgresEncryptedMailboxModule.java │ │ │ │ │ ├── PostgresKeystoreDAO.java │ │ │ │ │ ├── PostgresKeystoreManager.java │ │ │ │ │ ├── PostgresKeystoreModule.java │ │ │ │ │ └── table │ │ │ │ │ ├── PostgresEncryptedEmailStoreModule.java │ │ │ │ │ └── PostgresKeystoreModule.java │ │ │ │ └── test │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── encrypted │ │ │ │ └── postgres │ │ │ │ ├── PostgresEncryptedEmailContentStoreTest.java │ │ │ │ └── PostgresKeystoreManagerTest.java │ │ ├── memory │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ └── java │ │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── encrypted │ │ │ │ │ ├── InMemoryEncryptedEmailContentStore.scala │ │ │ │ │ └── InMemoryKeystoreManager.scala │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── encrypted │ │ │ │ │ ├── InMemoryEncryptedEmailContentStoreTest.java │ │ │ │ │ ├── InMemoryEncryptedMessageManagerTest.java │ │ │ │ │ ├── InMemoryKeystoreManagerTest.java │ │ │ │ │ ├── MemoryPGPKeysUserDeletionTaskStepTest.java │ │ │ │ │ └── MemoryPGPKeysUsernameChangeTaskStepTest.java │ │ │ │ └── resources │ │ │ │ ├── emailEncrypted.eml │ │ │ │ └── emailWithTextAttachment.eml │ │ ├── pgp-utils │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ └── java │ │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── pgp │ │ │ │ │ └── Encrypter.java │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── pgp │ │ │ │ │ ├── Decrypter.java │ │ │ │ │ └── EncrypterTest.java │ │ │ │ └── resources │ │ │ │ ├── README.md │ │ │ │ ├── gpg.private │ │ │ │ ├── gpg.pub │ │ │ │ ├── gpg2.private │ │ │ │ └── gpg2.pub │ │ └── pom.xml │ ├── listeners │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── event │ │ │ │ └── ComputePreviewMessageIndexer.java │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── event │ │ │ └── TMailComputeMessageFastViewProjectionListenerTest.java │ ├── plugin │ │ └── welcome-listener │ │ │ ├── pom.xml │ │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── mailbox │ │ │ │ └── WelcomeListener.java │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── mailbox │ │ │ │ └── WelcomeListenerTest.java │ │ │ └── resources │ │ │ └── file.eml │ └── team-mailboxes │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── team │ │ │ ├── PropagateDeleteRightTeamMailboxListener.scala │ │ │ ├── TMailCanSendFrom.scala │ │ │ ├── TMailQuotaRootResolver.scala │ │ │ ├── TMailQuotaUsernameSupplier.java │ │ │ ├── TMailScanningQuotaSearcher.scala │ │ │ ├── TeamMailbox.scala │ │ │ ├── TeamMailboxCallback.scala │ │ │ ├── TeamMailboxProbe.scala │ │ │ ├── TeamMailboxRepository.scala │ │ │ └── TeamMailboxUserEntityValidator.scala │ │ └── test │ │ └── scala │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── team │ │ ├── PropagateDeleteRightTeamMailboxListenerTest.scala │ │ ├── TMailCanSendFromTest.scala │ │ ├── TMailQuotaRootResolverTest.scala │ │ ├── TeamMailboxRepositoryContract.scala │ │ └── TeamMailboxTest.scala ├── mailets │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── mailet │ │ │ │ ├── IsALDAPMailingList.java │ │ │ │ ├── LDAPMailingList.java │ │ │ │ ├── SenderICALToJsonAttribute.java │ │ │ │ ├── TmailLocalResources.java │ │ │ │ └── TmailLocalResourcesModule.java │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── mailets │ │ │ ├── EnforceRateLimitingPlan.scala │ │ │ ├── IndexContacts.java │ │ │ ├── IsTeamMailbox.scala │ │ │ ├── TMailMailboxAppender.scala │ │ │ ├── TmailLocalDelivery.scala │ │ │ └── TmailPlanRateLimiter.scala │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── mailet │ │ │ ├── IndexContactsTest.java │ │ │ ├── IsALDAPMailingListTest.java │ │ │ ├── LDAPMailingListTest.java │ │ │ ├── LinagoraMailetContextTest.java │ │ │ └── SenderICALToJsonAttributeTest.java │ │ ├── resources │ │ ├── ics │ │ │ ├── ics_with_error.ics │ │ │ ├── meeting.ics │ │ │ ├── meeting_2.ics │ │ │ ├── meeting_without_dtstamp.ics │ │ │ ├── meeting_without_method.ics │ │ │ ├── meeting_without_sequence.ics │ │ │ ├── meeting_without_uid.ics │ │ │ └── no_event.ics │ │ ├── ics_in_header.eml │ │ └── ldif-files │ │ │ └── populate.ldif │ │ └── scala │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── mailets │ │ ├── EnforceRateLimitingPlanTest.scala │ │ ├── IsTeamMailboxTest.scala │ │ └── TMailMailboxAppenderTest.scala ├── plugins │ ├── mail-reporting │ │ ├── README.md │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── sample_conf │ │ │ ├── extensions.properties │ │ │ ├── jwt_privatekey │ │ │ ├── jwt_publickey │ │ │ ├── mailetcontainer.xml │ │ │ ├── queue.properties │ │ │ └── webadmin.properties │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ ├── MailReportModule.java │ │ │ │ │ ├── api │ │ │ │ │ ├── MailReportEntry.java │ │ │ │ │ └── MailReportGenerator.java │ │ │ │ │ ├── cassandra │ │ │ │ │ └── CassandraMailReportGenerator.java │ │ │ │ │ ├── mailet │ │ │ │ │ └── MailReportRecorder.java │ │ │ │ │ └── route │ │ │ │ │ └── MailReportsRoute.java │ │ │ └── resources │ │ │ │ └── webadmin.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ ├── api │ │ │ │ └── MailReportGeneratorContract.java │ │ │ │ ├── cassandra │ │ │ │ └── CassandraMailReportGeneratorTest.java │ │ │ │ └── route │ │ │ │ └── TMailReportsIntegrationTest.java │ │ │ └── resources │ │ │ ├── dnsservice.xml │ │ │ ├── domainlist.xml │ │ │ ├── extensions.properties │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── listeners.xml │ │ │ ├── mailetcontainer.xml │ │ │ ├── mailrepositorystore.xml │ │ │ ├── pop3server.xml │ │ │ ├── rabbitmq.properties │ │ │ ├── smtpserver.xml │ │ │ └── webadmin.properties │ └── pom.xml ├── pom.xml ├── rate-limiter │ ├── rate-limiter-api │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── rate │ │ │ │ └── limiter │ │ │ │ └── api │ │ │ │ ├── CacheRateLimitingPlan.scala │ │ │ │ ├── RateLimitation.scala │ │ │ │ ├── RateLimitingPlanRepository.scala │ │ │ │ ├── RateLimitingPlanUserRepository.scala │ │ │ │ ├── RateLimitingPlanUsernameChangeTaskStep.scala │ │ │ │ └── memory │ │ │ │ ├── MemoryRateLimitingModule.scala │ │ │ │ └── MemoryRateLimitingPlanUserRepository.scala │ │ │ └── test │ │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── rate │ │ │ └── limiter │ │ │ └── api │ │ │ ├── CacheInMemoryRateLimitingPlanRepositoryTest.scala │ │ │ ├── RateLimitingPlanRepositoryContract.scala │ │ │ ├── RateLimitingPlanUserRepositoryContract.scala │ │ │ ├── RateLimitingPlanUsernameChangeTaskStepTest.scala │ │ │ └── memory │ │ │ └── MemoryRateLimitingPlanUserRepositoryTest.scala │ ├── rate-limiter-cassandra │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── rate │ │ │ │ └── limiter │ │ │ │ └── api │ │ │ │ └── cassandra │ │ │ │ ├── CassandraRateLimitingPlanRepository.scala │ │ │ │ ├── CassandraRateLimitingPlanUserRepository.scala │ │ │ │ ├── dao │ │ │ │ ├── CassandraRateLimitPlanDAO.scala │ │ │ │ └── CassandraRateLimitPlanUserDAO.scala │ │ │ │ ├── module │ │ │ │ └── CassandraRateLimitingModule.scala │ │ │ │ └── table │ │ │ │ ├── CassandraRateLimitPlanTable.scala │ │ │ │ └── CassandraRateLimitPlanUserTable.scala │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── rate │ │ │ └── limiter │ │ │ └── api │ │ │ └── cassandra │ │ │ ├── CacheCassandraRateLimitingPlanRepositoryTest.java │ │ │ ├── CassandraRateLimitingPlanRepositoryTest.java │ │ │ └── CassandraRateLimitingPlanUserRepositoryTest.java │ └── rate-limiter-postgres │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── rate │ │ │ │ └── limiter │ │ │ │ └── api │ │ │ │ └── postgres │ │ │ │ ├── PostgresRateLimitingPlanRepository.java │ │ │ │ ├── RateLimitingPlanEntry.java │ │ │ │ ├── dao │ │ │ │ └── PostgresRateLimitingPlanDAO.java │ │ │ │ └── table │ │ │ │ └── PostgresRateLimitPlanModule.java │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── rate │ │ │ └── limiter │ │ │ └── api │ │ │ └── postgres │ │ │ ├── dao │ │ │ ├── PostgresRateLimitPlanUserDAO.scala │ │ │ └── PostgresRateLimitingDAOUtils.scala │ │ │ ├── module │ │ │ └── PostgresRateLimitingModule.scala │ │ │ ├── repository │ │ │ └── PostgresRateLimitingPlanUserRepository.scala │ │ │ └── table │ │ │ └── PostgresRateLimitPlanUserTable.scala │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── rate │ │ └── limiter │ │ └── api │ │ └── postgres │ │ ├── PostgresRateLimitingPlanRepositoryTest.java │ │ └── PostgresRateLimitingPlanUserRepositoryTest.java ├── smtp-extensions │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── smtp │ │ │ ├── NaiveTMailWithMailingListsValidRcptHandler.java │ │ │ ├── TMailCmdHandlerLoader.java │ │ │ ├── TMailUsersRepositoryAuthHook.java │ │ │ ├── TMailValidRcptHandler.java │ │ │ └── TMailWithMailingListValidRcptHandler.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── smtp │ │ │ ├── NaiveTMailWithMailingListsValidRcptHandlerTest.java │ │ │ ├── TMailValidRcptHandlerTest.java │ │ │ └── TMailWithMailingListValidRcptHandlerTest.java │ │ └── resources │ │ └── ldif-files │ │ └── populate.ldif ├── tmail-third-party │ ├── ai-bot │ │ ├── AIBotMailet.adoc │ │ ├── README.md │ │ ├── RecipientsContain.adoc │ │ ├── pom.xml │ │ ├── sample_conf │ │ │ ├── ai.properties │ │ │ ├── extensions.properties │ │ │ ├── jwt_privatekey │ │ │ ├── jwt_publickey │ │ │ └── mailetcontainer.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── linagora │ │ │ │ │ └── tmail │ │ │ │ │ └── mailet │ │ │ │ │ ├── AIBotConfig.java │ │ │ │ │ ├── AIBotMailet.java │ │ │ │ │ ├── AIRedactionalHelper.java │ │ │ │ │ ├── AIRedactionalHelperForTest.java │ │ │ │ │ ├── LangchainAIRedactionalHelper.java │ │ │ │ │ ├── LlmModel.java │ │ │ │ │ ├── RecipientsContain.java │ │ │ │ │ ├── StreamChatLanguageModelFactory.java │ │ │ │ │ └── conf │ │ │ │ │ └── AIBotModule.java │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── jmap │ │ │ │ └── aibot │ │ │ │ ├── AiBotCapability.scala │ │ │ │ ├── AiBotSuggestReplyRequest.scala │ │ │ │ ├── AiBotSuggestionMethod.scala │ │ │ │ └── json │ │ │ │ ├── AiBotSerialization.scala │ │ │ │ └── package.scala │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── mailet │ │ │ │ ├── AIBotConfigTest.java │ │ │ │ ├── AIBotIntegrationTest.java │ │ │ │ ├── AIBotMailetTest.java │ │ │ │ ├── AIRedactionalHelperTest.java │ │ │ │ └── AiBotSuggestionMethodTest.java │ │ │ ├── resources │ │ │ ├── ai.properties │ │ │ ├── extensions.properties │ │ │ ├── imapserver.xml │ │ │ ├── keystore │ │ │ ├── mailetcontainer.xml │ │ │ ├── pop3server.xml │ │ │ └── smtpserver.xml │ │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── AiBotSerializerTest.scala │ ├── openpaas │ │ ├── docker-compose-carddav-sample.yml │ │ ├── pom.xml │ │ ├── sample_conf │ │ │ ├── jwt_privatekey │ │ │ ├── jwt_publickey │ │ │ ├── mailetcontainer.xml │ │ │ └── openpaas.properties │ │ ├── script_create_sample_data_for_docker_compose.sh │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ ├── AmqpUri.java │ │ │ │ ├── AmqpUserInfo.java │ │ │ │ ├── Exchange.java │ │ │ │ ├── HttpUtils.java │ │ │ │ ├── OpenPaasContactsConsumerModule.java │ │ │ │ ├── OpenPaasModule.java │ │ │ │ ├── OpenPaasModuleChooserConfiguration.java │ │ │ │ ├── api │ │ │ │ ├── OpenPaasRestClient.java │ │ │ │ ├── OpenPaasRestClientException.java │ │ │ │ └── OpenPaasUserResponse.java │ │ │ │ ├── configuration │ │ │ │ ├── DavConfiguration.java │ │ │ │ └── OpenPaasConfiguration.java │ │ │ │ ├── contact │ │ │ │ ├── SabreContactMessage.java │ │ │ │ ├── SabreContactsConsumer.java │ │ │ │ ├── SabreContactsOperator.java │ │ │ │ └── UserSearchResponse.java │ │ │ │ ├── dav │ │ │ │ ├── CalDavEventRepository.java │ │ │ │ ├── CardDavAddContactProcessor.java │ │ │ │ ├── CardDavUtils.java │ │ │ │ ├── DavCalendarObject.java │ │ │ │ ├── DavClient.java │ │ │ │ ├── DavClientException.java │ │ │ │ ├── DavUser.java │ │ │ │ ├── DavUserProvider.java │ │ │ │ ├── EventUid.java │ │ │ │ ├── OpenPaasDavUserProvider.java │ │ │ │ ├── RetriableDavClientException.java │ │ │ │ ├── cal │ │ │ │ │ ├── FreeBusyRequest.java │ │ │ │ │ ├── FreeBusyResponse.java │ │ │ │ │ └── FreeBusySerializer.java │ │ │ │ ├── request │ │ │ │ │ ├── CardDavCreationObjectRequest.java │ │ │ │ │ └── GetCalendarByEventIdRequestBody.java │ │ │ │ └── xml │ │ │ │ │ ├── CalendarData.java │ │ │ │ │ ├── DavGetETag.java │ │ │ │ │ ├── DavHref.java │ │ │ │ │ ├── DavMultistatus.java │ │ │ │ │ ├── DavProp.java │ │ │ │ │ ├── DavPropstat.java │ │ │ │ │ ├── DavResourceType.java │ │ │ │ │ ├── DavResponse.java │ │ │ │ │ ├── DavStatus.java │ │ │ │ │ ├── XMLUtil.java │ │ │ │ │ └── resourcetypes │ │ │ │ │ ├── CalCalendar.java │ │ │ │ │ ├── DavCollection.java │ │ │ │ │ └── IResourceType.java │ │ │ │ └── mailet │ │ │ │ ├── CalDavCollect.java │ │ │ │ ├── CardDavCollectedContact.java │ │ │ │ ├── OpenPaasAmqpForwardAttribute.java │ │ │ │ └── OpenPaasAmqpForwardAttributeConfig.java │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ ├── AmqpUriTest.java │ │ │ │ ├── CalDavCollectIntegrationTest.java │ │ │ │ ├── CalDavEventRepositoryTest.java │ │ │ │ ├── CardDavCollectedContactIntegrationTest.java │ │ │ │ ├── DockerOpenPaasExtension.java │ │ │ │ ├── DockerOpenPaasExtensionTest.java │ │ │ │ ├── DockerOpenPaasSetup.java │ │ │ │ ├── OpenPaaSProvisioningService.java │ │ │ │ ├── OpenPaasAmqpForwardAttributeIntegrationTest.java │ │ │ │ ├── OpenPaasTestModule.java │ │ │ │ ├── OpenPaasUser.java │ │ │ │ ├── api │ │ │ │ └── OpenPaasRestClientTest.java │ │ │ │ ├── configuration │ │ │ │ ├── DavConfigurationTest.java │ │ │ │ └── OpenPaasConfigurationTest.java │ │ │ │ ├── contact │ │ │ │ ├── SabreContactMessageParseTest.java │ │ │ │ ├── SabreContactsConsumerTest.java │ │ │ │ └── UserSearchResponseDeserializerTest.java │ │ │ │ ├── dav │ │ │ │ ├── CardDavCreationObjectRequestTest.java │ │ │ │ ├── DavClientTest.java │ │ │ │ ├── DavServerExtension.java │ │ │ │ ├── WireMockOpenPaaSServerExtension.java │ │ │ │ └── cal │ │ │ │ │ └── FreeBusySerializerTest.java │ │ │ │ └── mailet │ │ │ │ └── OpenPaasAmqpForwardAttributeConfigTest.java │ │ │ └── resources │ │ │ ├── ALICE_PROPFIND_CALENDARS_RESPONSE.xml │ │ │ ├── ALICE_VEVENT1_RESPONSE.xml │ │ │ ├── BOB_PROPFIND_CALENDARS_RESPONSE.xml │ │ │ ├── CALENDARS_CONTAINING_ONLY_INBOX_OUTBOX.xml │ │ │ ├── CALENDARS_WITH_ONE_INVALID_HREF.xml │ │ │ ├── EMPTY_MULTISTATUS_RESPONSE.xml │ │ │ ├── VCALENDAR1.ics │ │ │ ├── aliceInviteBob.ics │ │ │ ├── docker-openpaas-setup.yml │ │ │ ├── emailWithAliceCancelEventIcsAttachment.eml │ │ │ ├── emailWithAliceInviteBobIcsAttachment.eml │ │ │ └── template │ │ │ ├── emailWithAliceInviteBob.eml.mustache │ │ │ ├── emailWithRecurrenceId.eml.mustache │ │ │ └── ics │ │ │ ├── aliceInviteBob.ics.mustache │ │ │ └── recurrenceId.ics.mustache │ └── pom.xml └── webadmin │ ├── webadmin-email-address-contact │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── webadmin │ │ │ ├── EmailAddressContactRoutes.java │ │ │ ├── EmailAddressContactRoutesModule.java │ │ │ └── model │ │ │ ├── ContactNameUpdateDTO.java │ │ │ ├── EmailAddressContactDTO.java │ │ │ ├── EmailAddressContactIdResponse.java │ │ │ └── EmailAddressContactResponse.java │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── webadmin │ │ └── EmailAddressContactRoutesTest.java │ ├── webadmin-mailbox │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── webadmin │ │ │ ├── archival │ │ │ ├── InboxArchivalService.java │ │ │ ├── InboxArchivalTask.java │ │ │ ├── InboxArchivalTaskAdditionalInformationDTO.java │ │ │ ├── InboxArchivalTaskDTO.java │ │ │ ├── InboxArchivalTaskModule.java │ │ │ └── InboxArchivalTaskRegistration.java │ │ │ ├── cleanup │ │ │ ├── CleanupContext.java │ │ │ ├── CleanupService.java │ │ │ ├── CleanupSpamTask.java │ │ │ ├── CleanupSpamTaskAdditionalInformationDTO.java │ │ │ ├── CleanupSpamTaskDTO.java │ │ │ ├── CleanupSpamTaskDetails.java │ │ │ ├── CleanupSpamTaskRegistration.java │ │ │ ├── CleanupTrashTask.java │ │ │ ├── CleanupTrashTaskAdditionalInformationDTO.java │ │ │ ├── CleanupTrashTaskDTO.java │ │ │ ├── CleanupTrashTaskDetails.java │ │ │ ├── CleanupTrashTaskRegistration.java │ │ │ ├── MailboxesCleanupModule.java │ │ │ ├── RunningOptions.java │ │ │ └── RunningOptionsDTO.java │ │ │ └── contact │ │ │ └── aucomplete │ │ │ ├── ContactIndexingContext.java │ │ │ ├── ContactIndexingModule.java │ │ │ ├── ContactIndexingService.java │ │ │ ├── ContactIndexingTask.java │ │ │ ├── ContactIndexingTaskAdditionalInformationDTO.java │ │ │ ├── ContactIndexingTaskDTO.java │ │ │ └── ContactIndexingTaskRegistration.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── webadmin │ │ │ ├── archival │ │ │ ├── InboxArchivalTaskAdditionalInformationDTOTest.java │ │ │ ├── InboxArchivalTaskSerializationTest.java │ │ │ └── InboxArchivalTaskTest.java │ │ │ ├── cleanup │ │ │ ├── CleanupServiceTest.java │ │ │ ├── CleanupSpamTaskSerializationTest.java │ │ │ └── CleanupTrashTaskSerializationTest.java │ │ │ └── contact │ │ │ └── autocomplete │ │ │ ├── ContactIndexingServiceTest.java │ │ │ ├── ContactIndexingTaskAdditionalInformationDTOTest.java │ │ │ └── ContactIndexingTaskSerializationTest.java │ │ └── resources │ │ └── json │ │ └── inboxArchivalTask.additionalInformation.json │ ├── webadmin-oidc-backchannel │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── webadmin │ │ │ ├── OidcBackchannelLogoutRoutes.java │ │ │ └── OidcBackchannelLogoutRoutesModule.java │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── webadmin │ │ └── OidcBackchannelLogoutRoutesTest.java │ ├── webadmin-protocols │ ├── pom.xml │ └── src │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ ├── DisconnectionRouteTest.java │ │ └── TestConnectionDisconnector.java │ ├── webadmin-rate-limit │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── linagora │ │ │ │ └── tmail │ │ │ │ └── webadmin │ │ │ │ ├── RateLimitPlanRoutesModule.java │ │ │ │ ├── RateLimitPlanUserRoutes.java │ │ │ │ └── model │ │ │ │ ├── GetAllRateLimitPlanResponseDTO.java │ │ │ │ ├── OperationLimitationsDTO.java │ │ │ │ ├── RateLimitationDTO.java │ │ │ │ ├── RateLimitingPlanCreateRequestDTO.java │ │ │ │ ├── RateLimitingPlanDTO.java │ │ │ │ ├── RateLimitingPlanIdResponse.java │ │ │ │ └── RateLimitingPlanResetRequestDTO.java │ │ └── scala │ │ │ └── com │ │ │ └── linagora │ │ │ └── tmail │ │ │ └── webadmin │ │ │ └── RateLimitPlanManagementRoutes.scala │ │ └── test │ │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── webadmin │ │ ├── RateLimitPlanManagementRoutesTest.java │ │ └── RateLimitPlanUsersRoutesTest.java │ └── webadmin-team-mailboxes │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── com │ │ └── linagora │ │ └── tmail │ │ └── webadmin │ │ ├── TeamMailboxManagementRoutes.java │ │ ├── TeamMailboxQuotaDetailsDTO.java │ │ ├── TeamMailboxQuotaRoutes.java │ │ ├── TeamMailboxQuotaService.java │ │ ├── TeamMailboxRoutesModule.java │ │ ├── UserTeamMailboxRoutes.java │ │ └── quota │ │ └── recompute │ │ ├── RecomputeQuotaTeamMailboxesRoutes.java │ │ ├── RecomputeQuotaTeamMailboxesService.java │ │ ├── RecomputeQuotaTeamMailboxesTask.java │ │ ├── RecomputeQuotaTeamMailboxesTaskAdditionalInformationDTO.java │ │ └── RecomputeQuotaTeamMailboxesTaskDTO.java │ └── test │ ├── java │ └── com │ │ └── linagora │ │ └── tmail │ │ └── webadmin │ │ ├── RecomputeQuotaTeamMailboxesRoutesTest.java │ │ ├── TeamMailboxFixture.java │ │ ├── TeamMailboxManagementRoutesTest.java │ │ ├── TeamMailboxQuotaRoutesTest.java │ │ ├── UserTeamMailboxRoutesTest.java │ │ └── quota │ │ └── recompute │ │ ├── RecomputeQuotaTeamMailboxesTaskAdditionalInformationDTOTest.java │ │ └── RecomputeQuotaTeamMailboxesTaskSerializationTest.java │ └── resources │ └── json │ ├── recompute_quota_team_mailboxes.additionalInformation.json │ └── recompute_quota_team_mailboxes.task.json └── upgrade-instructions.md /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Description of the bug 11 | 12 | ### Reproduction Steps 13 | 14 | ### Expected result 15 | 16 | ### Context 17 | 18 | OS, environment, ... 19 | 20 | ### Additional information 21 | 22 | frequency, log files, screenshots, videos, ... 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | docs/build/ -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "james-project"] 2 | path = james-project 3 | url = https://github.com/apache/james-project 4 | branch = master 5 | -------------------------------------------------------------------------------- /.scalafix.conf: -------------------------------------------------------------------------------- 1 | rules = [ 2 | DisableSyntax, 3 | ProcedureSyntax, 4 | NoValInForComprehension, 5 | LeakingImplicitClassVal, 6 | SortImports 7 | ] 8 | 9 | SortImports.blocks = [ 10 | "re:java?\\.", 11 | "*", 12 | "scala.", 13 | ] 14 | 15 | RemoveUnused.imports = true 16 | RemoveUnused.privates = false 17 | RemoveUnused.locals = true 18 | RemoveUnused.patternvars = false 19 | RemoveUnused.implicits = false 20 | 21 | DisableSyntax.noVars = false 22 | DisableSyntax.noThrows = false 23 | DisableSyntax.noNulls = false 24 | DisableSyntax.noReturns = false 25 | DisableSyntax.noWhileLoops = false 26 | DisableSyntax.noAsInstanceOf = false 27 | DisableSyntax.noIsInstanceOf = false 28 | DisableSyntax.noXml = false 29 | DisableSyntax.noDefaultArgs = false 30 | DisableSyntax.noFinalVal = true 31 | DisableSyntax.noFinalize = true 32 | DisableSyntax.noValPatterns = false 33 | DisableSyntax.noUniversalEquality = false 34 | DisableSyntax.regex = [ 35 | { 36 | pattern = ".prettyPeek()" 37 | message = "Found a debug code" 38 | } 39 | ] -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 5 | 6 | ## [Unreleased] 7 | 8 | ### Added 9 | - ISSUE-1 Add a memory server application 10 | - ISSUE-6 Produce simple docker images with JIB -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | NOTICE 2 | 3 | This product is a software developed by LINAGORA for use in Twake Mail, 4 | licensed under the terms of the GNU Affero General Public License (AGPL) v3.0. 5 | 6 | In addition, this product contains a fork of the Logback Contrib project, 7 | located in the `logback-contrib` folder taken from 8 | https://github.com/qos-ch/logback-contrib 9 | and based on the original work of the logback-contrib developers. This fork is 10 | licensed under the terms of the Eclipse Public License v1.0 as published by 11 | the Eclipse Foundation. 12 | -------------------------------------------------------------------------------- /checkstyle-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /demo/README.md: -------------------------------------------------------------------------------- 1 | # Tmail backend + LemonLDAP 2 | 3 | This contains Tmail with OIDC integration with LemonLDAP with an OpenLDAP backend. 4 | 5 | ## Quickstart 6 | 7 | Run `./dev.sh start` to start all services and propagate configurations. 8 | 9 | You can check the logs by this command: `docker compose logs -f`. 10 | 11 | ## Local set up 12 | 13 | Please add the following lines to your `/etc/hosts`: 14 | 15 | ``` 16 | 127.0.0.1 api.manager.example.com manager.sso.example.com sso.example.com handler.sso.example.com test.sso.example.com tmail-backend 17 | ``` 18 | 19 | TeamMail backed by LemonLDAP is then accessible within your browser: http://test.sso.example.com:8080/ 20 | 21 | Username: `james-user@tmail.com` 22 | 23 | Password: `secret` 24 | 25 | User can logout from within TMail or visit `http://sso.example.com`, then click Logout and confirm. 26 | 27 | ## Flow 28 | 29 | Here's a recording of the flow: 30 | 31 | ![](./media/OIDC-flow.mp4) -------------------------------------------------------------------------------- /demo/media/OIDC-flow.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/demo/media/OIDC-flow.mp4 -------------------------------------------------------------------------------- /demo/tmail/.env: -------------------------------------------------------------------------------- 1 | SERVER_URL=http://tmail-backend:8001 2 | WEB_OIDC_CLIENT_ID=james 3 | DOMAIN_REDIRECT_URL=http://test.sso.example.com:8080 4 | APP_GRID_AVAILABLE=supported 5 | -------------------------------------------------------------------------------- /demo/tmail/app_dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "appName": "Twake", 5 | "icon": "ic_twake_app.svg", 6 | "appLink": "http://twake.app/" 7 | }, 8 | { 9 | "appName": "TDrive", 10 | "icon": "ic_linshare_app.png", 11 | "appLink": "https://tdrive.app/" 12 | }, 13 | { 14 | "appName": "LemonLDAP", 15 | "icon": "lemonldap-ng-logo.png", 16 | "appLink": "http://sso.example.com/" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /demo/tmail/extensions-jars/tmail-ai-bot-jar-with-dependencies.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/demo/tmail/extensions-jars/tmail-ai-bot-jar-with-dependencies.jar -------------------------------------------------------------------------------- /demo/tmail/icon/lemonldap-ng-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/demo/tmail/icon/lemonldap-ng-logo.png -------------------------------------------------------------------------------- /demo/tmail/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1WL2WQqWY6hurxDRJU9 3 | Vh+keGgmg1m6YbGJRV69HE3UAruHhSeQ37jReInJWF6KDIqFb2jQl8V4kuslYoj3 4 | LZOEYnL6qAQpH+ITP5Jb0TP2oOUiM1XvLJIGkhypFPmEBHdTjTBhhwxdXECrGThG 5 | saAro6BZAf4/RIoqWebLHj4DUIjRHIo9kA4vKxBAygOSPMgn+URXVapSEB0VXmK/ 6 | qf5utrNJb9ZtiipW3ZQB3O0yYWM3LQOihNGXLEQc6a65Yjbz8ZUEcqm8gX/SLBr6 7 | nbi9clCpJkssmHVm/c4DwFYwcrQuWEZ7CbfNmV2oSrMGKiHLzSN050E25ccaZhXd 8 | zwIDAQAB 9 | -----END PUBLIC KEY----- 10 | 11 | -------------------------------------------------------------------------------- /dockerfiles/jenkins-runner/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/jenkinsfile-runner:adoptopenjdk-11-hotspot 2 | 3 | # Install git, docker 4 | RUN set -x && \ 5 | apt-get update && \ 6 | apt-get install -y wget git unzip apt-transport-https ca-certificates curl gnupg2 software-properties-common && \ 7 | curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \ 8 | add-apt-repository \ 9 | "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ 10 | $(lsb_release -cs) \ 11 | stable" && \ 12 | apt-get update && \ 13 | apt -y dist-upgrade && \ 14 | apt-get -y install docker-ce && \ 15 | apt -y autoremove && \ 16 | apt clean && \ 17 | rm -rf /var/lib/apt/lists/* 18 | 19 | # Install Maven 3.6.3 20 | ENV MAVEN_VERSION 3.9.9 21 | RUN curl -Lf https://downloads.apache.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -C /opt -xzv 22 | ENV M2_HOME /opt/apache-maven-$MAVEN_VERSION 23 | ENV maven.home $M2_HOME 24 | ENV M2 $M2_HOME/bin 25 | ENV PATH $M2:$PATH 26 | -------------------------------------------------------------------------------- /dockerfiles/jenkins-runner/Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | agent any 3 | 4 | stages { 5 | stage('Git checkout') { 6 | steps { 7 | git 'https://github.com/linagora/tmail-backend' 8 | sh 'git submodule init' 9 | sh 'git submodule update' 10 | } 11 | } 12 | stage('Compile') { 13 | steps { 14 | sh 'mvn clean install -Dmaven.javadoc.skip=true -DskipTests -T1C' 15 | } 16 | } 17 | stage('Test') { 18 | steps { 19 | dir("tmail-backend") { 20 | sh 'mvn -B surefire:test' 21 | } 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Twake Mail documentation website how to 2 | 3 | ## Build 4 | 5 | You need [Antora](https://antora.org/) installed locally. 6 | 7 | Install latest lts [Node](https://www.npmjs.com/) first, then install Antora: 8 | 9 | ``` 10 | npm i -g @antora/cli@3.1 @antora/site-generator@3.1 11 | ``` 12 | 13 | To build the documentation website run in this folder: 14 | 15 | ``` 16 | antora antora-playbook-local.yml --stacktrace 17 | ``` -------------------------------------------------------------------------------- /docs/antora-playbook-local.yml: -------------------------------------------------------------------------------- 1 | # Use this configuration for local testing / docs develop. 2 | site: 3 | title: Twake Mail Documentation 4 | start_page: twake-mail-site::index.adoc 5 | content: 6 | sources: 7 | - url: ./../ 8 | branches: HEAD 9 | start_path: docs 10 | - url: ./.. 11 | branches: HEAD 12 | start_path: james-project/server/apps/distributed-app/docs 13 | ui: 14 | bundle: 15 | url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable 16 | supplemental_files: ./ui-overrides 17 | runtime: 18 | fetch: true -------------------------------------------------------------------------------- /docs/antora.yml: -------------------------------------------------------------------------------- 1 | name: twake-mail-site 2 | title: Twake Mail Site 3 | version: 'latest' 4 | prerelease: true 5 | nav: 6 | - modules/ROOT/nav.adoc -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/contribute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/contribute.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/education.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/education.jpg -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/forward.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/governance.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/governance.jpeg -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/lock.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/logo.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/mobile-screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/mobile-screen.jpg -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/open-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/open-source.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/open-standards.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/open-standards.jpeg -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/pillars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/pillars.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/planet.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/tablet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/tablet.png -------------------------------------------------------------------------------- /docs/modules/ROOT/assets/images/team-mailbox.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/docs/modules/ROOT/assets/images/team-mailbox.jpg -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/cassandra.adoc: -------------------------------------------------------------------------------- 1 | = Additional Cassandra configurations 2 | :navtitle: Additional Cassandra configurations 3 | 4 | Specified to TMail backend, we can configure the following configurations in the *cassandra.properties* file. 5 | 6 | .cassandra.properties additional content 7 | |=== 8 | | Property name | explanation 9 | | label.change.ttl 10 | | Optional. Duration, default to 60 days. Cassandra Time-to-live for Label change records. 11 | Setting time-to-live to zero means refusing to use time-to-live on label changes. 12 | Example: `label.change.ttl=0 second`. 13 | |=== -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/deleted-message-vault.adoc: -------------------------------------------------------------------------------- 1 | = Deleted message vault configuration 2 | :navtitle: Deleted message vault configuration 3 | 4 | By default, on Tmail backend, the deleted message vault is enabled (contrary to James server where it is disabled). 5 | 6 | It is still possible to disable it by modifying the following property on `deletedMessageVault.properties`: 7 | 8 | .... 9 | enabled=false 10 | .... -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/encrypted-mailbox.adoc: -------------------------------------------------------------------------------- 1 | = Encrypted mailbox 2 | :navtitle: Encrypted mailbox 3 | 4 | See xref:tmail-backend/features/encrypted-mailbox.adoc[this page] for feature explanation. 5 | 6 | == Enabling/Disabling the encrypted mailbox 7 | 8 | Encrypting messages is costly thus we understand an administrator might choose not to enable this feature. 9 | 10 | We provide an easy way to disable completely the **Encrypted Mailbox** through the configuration. 11 | 12 | Example: `mailbox.properties` 13 | 14 | .... 15 | gpg.encryption.enable=false 16 | .... 17 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/jvm.adoc: -------------------------------------------------------------------------------- 1 | = Additional JVM configurations 2 | :navtitle: Additional JVM configurations 3 | 4 | Specified to TMail backend, we can configure the following configurations in the *`jvm.properties`* file. 5 | 6 | .`jvm.properties` additional content 7 | |=== 8 | | Property name | explanation 9 | 10 | | `imap.teamMailbox.fullDomain.enabled` 11 | | Optional. Whether full domain display is enabled for team mailboxes. 12 | 13 | Default to false. 14 | 15 | Example: `imap.teamMailbox.fullDomain.enabled=false`. 16 | 17 | |=== 18 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/queue.adoc: -------------------------------------------------------------------------------- 1 | = Additional Queue configurations 2 | :navtitle: Additional Queue configurations 3 | 4 | Specified to TMail backend, we can configure the following configurations in the *queue.properties* file. 5 | 6 | .queue.properties additional content 7 | |=== 8 | | Property name | explanation 9 | | event.bus.keys.choice 10 | | Optional. Default to the RABBITMQ implementation. Supported values (case insensitive): `REDIS` / `RABBITMQ`. 11 | 12 | Example: `event.bus.keys.choice=redis` if you want to use Redis for user notifications. 13 | |=== -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/rabbitmq.adoc: -------------------------------------------------------------------------------- 1 | = RabbitMQ optional components 2 | :navtitle: RabbitMQ optional components 3 | 4 | == Scheduled RabbitMQ reconnection handler 5 | 6 | This components periodically checks (every minutes) that every critical queue is 7 | correctly consumed. If not, it restarts the RabbitMQ consumers, essentially 8 | resuming consumption. 9 | 10 | In order to activate it, in `rabbitmq.properties`: 11 | 12 | - `scheduled.consumer.reconnection.enabled`: Boolean. Default to true. Whether to enable the scheduled RabbitMQ reconnection handler. 13 | - `scheduled.consumer.reconnection.interval`: Duration. Default to 60 seconds. Interval between consumers check. 14 | 15 | .... 16 | scheduled.consumer.reconnection.enabled=true 17 | scheduled.consumer.reconnection.interval=60s 18 | .... 19 | 20 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/redis.adoc: -------------------------------------------------------------------------------- 1 | == Additional Redis configurations 2 | :navtitle: Additional Redis configurations 3 | 4 | Specified to TMail backend, we can configure the following configurations in the *redis.properties* file. 5 | 6 | .redis.properties additional content 7 | |=== 8 | | Property name | explanation 9 | | eventBus.redis.failure.ignore 10 | | Whether TMail should ignore failures when pub/sub events to Redis. Optional. Boolean. Default to `false`. 11 | 12 | | eventBus.redis.timeout 13 | | Timeout for Redis event bus operations. Optional. Duration. Default to `10seconds`. 14 | 15 | |=== 16 | 17 | Additionally, Twake mail allows executing some listeners in a synchronous fashion upon dispatching. They are then 18 | run synchronously as part of the dispatch process. If execution fails then retries happens asynchronously (best effort). 19 | 20 | This is controlled by the following setting in `jvm.properties`: 21 | 22 | .... 23 | tmail.eventbus.synchronous.listener.groups=PopulateEmailQueryViewListenerGroup,MailboxChangeListenerGroup 24 | .... -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/team-mailboxes.adoc: -------------------------------------------------------------------------------- 1 | = Configuring team mailboxes 2 | :navtitle: Configuring team mailboxes 3 | 4 | Read xref:tmail-backend/features/teamMailboxes.adoc[this page] for feature explanations. 5 | 6 | == Configuring team mailboxes 7 | 8 | An administrator needs to customize TMail configuration in order to benefit from Team mailboxes, namely: 9 | 10 | - Rely on the `TMailLocalDelivery` mailet in replacement of `apache/james-project` `LocalDelivery` mailet 11 | in xref:james-distributed-app::configure/mailetcontainer.adoc[mailetcontainer.xml]. 12 | - Rely on the `TMailValidRcptHandler` RCPT hook in replacement of `apache/james-project` `ValidRcptHandler` RCPT hook 13 | in xref:james-distributed-app::configure/smtp.adoc[smtpserver.xml]. 14 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/configure/welcome-message.adoc: -------------------------------------------------------------------------------- 1 | == Welcome Listener 2 | :navtitle: Welcome Listener 3 | 4 | This listener will add an email in a user newly created INBOX from a predefined EML. 5 | 6 | This can be used to welcome users and avoid the "Empty INBOX newcomer syndrome". 7 | 8 | Sample configuration: `listeners.xml` 9 | 10 | ....xml 11 | 12 | 13 | com.linagora.tmail.mailbox.WelcomeListener 14 | 15 | file://welcome.eml 16 | 17 | 18 | 19 | .... -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/features/tmailRateLimiting.adoc: -------------------------------------------------------------------------------- 1 | = TMail Rate Limiting 2 | :navtitle: TMail Rate Limiting 3 | 4 | Manage email rate limiting plans and apply them to your users! 5 | 6 | TMail Rate Limiting enable the administrator to manage rate limiting plans and apply those plans to users: 7 | 8 | - Administrator can manage rate limiting plans 9 | - Administrator can manage which rate limiting plans apply to which users 10 | - Administrator can configure mailet configuration, so it can retrieve rate limiting plans and apply to according users 11 | 12 | == Manage rate limiting plans via webadmin 13 | 14 | The administrator can manage rate limiting plans using xref:tmail-backend/webadmin.adoc#_rate_limiting[Rate Limiting Plan Management Routes]: 15 | 16 | - Creating/updating/getting rate limiting plans 17 | - Attaching/getting/removing plan of a user. Getting list of users belonging to a plan. 18 | 19 | The administrator only can apply a plan to a user. 20 | 21 | Because of limited number of plans, we do not support removing rate limiting plans. 22 | 23 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/imap-extensions/index.adoc: -------------------------------------------------------------------------------- 1 | = TMail IMAP extensions 2 | 3 | These extensions include: 4 | 5 | - link:imapAuthDelegationExtension.adoc[IMAP Auth Delegation extension] -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/smtp-extensions/index.adoc: -------------------------------------------------------------------------------- 1 | = TMail SMTP extensions 2 | 3 | These extensions include: 4 | 5 | - link:smtpAuthDelegationExtension.adoc[SMTP Auth Delegation Extension] 6 | - link:tmailValidRcptHandler.adoc[TMail validate reception handler] -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/tmail-backend/smtp-extensions/tmailValidRcptHandler.adoc: -------------------------------------------------------------------------------- 1 | = TMail validate reception handler 2 | 3 | The current `ValidRcptHandler` is used to verify whether a recipient exists on james server. 4 | However, it does not support the validation of teamMailbox's addresses xref:tmail-backend/features/teamMailboxes.adoc[Read more]. 5 | Hence, we introduce a new `TMailValidRcptHandler` to resolve this issue. 6 | 7 | == How to Use `TMailValidRcptHandler` 8 | To use `TMailValidRcptHandler`, you need to declare it in the `smtpserver.xml` configuration file as follows: 9 | 10 | ```xml 11 | 12 | 13 | 14 | ``` -------------------------------------------------------------------------------- /logback-contrib/README.md: -------------------------------------------------------------------------------- 1 | # logback-contrib 2 | 3 | #### License 4 | ``` 5 | This maven module subtree and the accompanying materials are 6 | licensed under the terms of the Eclipse Public License v1.0 7 | as published by the Eclipse Foundation. 8 | ``` 9 | -------------------------------------------------------------------------------- /logback-contrib/json/access/src/test/input/json/jsonLayout.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /logback-contrib/json/classic/src/test/input/json/jsonLayout.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /logback-contrib/json/core/src/main/java/ch/qos/logback/contrib/json/JsonFormatter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2024, LINAGORA. All rights reserved. 3 | * 4 | * This file is licensed under the terms of the 5 | * Eclipse Public License v1.0 as published by 6 | * the Eclipse Foundation. 7 | * 8 | * This work is based on the work found at 9 | * https://github.com/qos-ch/logback-contrib 10 | * authored by the logback-contrib developers. 11 | */ 12 | package ch.qos.logback.contrib.json; 13 | 14 | import java.util.Map; 15 | 16 | /** 17 | * A {@code JsonFormatter} formats a data {@link Map Map} into a JSON string. 18 | * 19 | * @author Les Hazlewood 20 | * @since 0.1 21 | */ 22 | public interface JsonFormatter { 23 | 24 | /** 25 | * Converts the specified map into a JSON string. 26 | * 27 | * @param m the map to be converted. 28 | * @return a JSON String representation of the specified Map instance. 29 | * @throws Exception if there is a problem converting the map to a String. 30 | */ 31 | String toJsonString(Map m) throws Exception; 32 | } 33 | -------------------------------------------------------------------------------- /logback-contrib/json/pom.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 4.0.0 17 | 18 | 19 | com.linagora.tmail 20 | logback-contrib-parent 21 | 1.0.0-SNAPSHOT 22 | ../pom.xml 23 | 24 | 25 | 26 | logback-json-parent 27 | Logback Contrib :: JSON 28 | pom 29 | 30 | 31 | core 32 | classic 33 | access 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /logback-contrib/license-template.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) ${year}, ${owner}. All rights reserved. 2 | 3 | This file is licensed under the terms of the 4 | Eclipse Public License v1.0 as published by 5 | the Eclipse Foundation. 6 | 7 | This work is based on the work found at 8 | https://github.com/qos-ch/logback-contrib 9 | authored by the logback-contrib developers. -------------------------------------------------------------------------------- /security.md: -------------------------------------------------------------------------------- 1 | # Security policy 2 | 3 | We believe in transparency to mitigate security risks. All known vulnerabilities are available on 4 | our [security page](docs/modules/ROOT/pages/security.adoc). 5 | 6 | We disclose such security issues only once a released version addressing the issue is available. 7 | 8 | We use automated tools to review our docker images and dependencies. 9 | 10 | # Reporting security vulnerabilities 11 | 12 | To ensure safety of our users, security process needs to happen privately. 13 | 14 | Here are the steps: 15 | 16 | - 1. Reporter email the issues privately to `openpaas-james[AT]linagora.com`. 17 | - 2. We will then evaluate the validity of your report, and write back to you within two weeks. This response time 18 | accounts for vacation and will generally be quicker. 19 | - 3. We will propose a fix that we will review with you. This can take up to two weeks. 20 | - 4. We will propose a draft for the announcement that we will review with you. 21 | - 5. We will propose you a schedule for the release and the announcements. 22 | - 6. One week after the release we will disclose the vulnerability. 23 | 24 | You will be credited in the vulnerability report for your findings. 25 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/monitor_health.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This script monitors the health of a container (the container needs to be configured with a healthcheck). 3 | # If the container is unhealthy, the script restarts the container. 4 | 5 | # Function to get the current timestamp 6 | timestamp() { 7 | date +"%Y-%m-%d %H:%M:%S %Z" 8 | } 9 | 10 | # Check if CONTAINER_NAME argument is provided 11 | if [ -z "$1" ]; then 12 | echo "Error: Please provide the CONTAINER_NAME as an argument." 13 | exit 1 14 | fi 15 | 16 | CONTAINER_NAME="$1" 17 | INTERVAL_IN_SECOND=30 18 | 19 | echo "[$(timestamp)]: Start monitoring container $CONTAINER_NAME health." 20 | 21 | while true; do 22 | CONTAINER_HEALTH_STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$CONTAINER_NAME") 23 | 24 | if [ "$CONTAINER_HEALTH_STATUS" == "unhealthy" ]; then 25 | echo "[$(timestamp)]: Container $CONTAINER_NAME is unhealthy! Restarting the container..." 26 | 27 | if docker restart "$CONTAINER_NAME"; then 28 | echo "[$(timestamp)]: Container $CONTAINER_NAME restarted." 29 | else 30 | echo "[$(timestamp)]: Failed to restart container $CONTAINER_NAME." 31 | fi 32 | fi 33 | 34 | sleep "$INTERVAL_IN_SECOND" 35 | done 36 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/conf/jmx.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | 19 | # This template file can be used as example for James Server configuration 20 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 21 | 22 | # Read https://james.apache.org/server/config-system.html#jmx.properties for further details 23 | 24 | jmx.enabled=true 25 | jmx.address=127.0.0.1 26 | jmx.port=9999 27 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/conf/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/apps/distributed/src/main/conf/keystore -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/conf/logback-cli.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | 7 | 8 | 9 | 10 | %d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx 11 | false 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/conf/tika.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # Read https://james.apache.org/server/config-opensearch.html#Tika_Configuration for further details 19 | 20 | tika.enabled=true 21 | tika.host=tika 22 | tika.port=9998 23 | tika.timeoutInMillis=3000 24 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/eml-template/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/extensions-jars/README.md: -------------------------------------------------------------------------------- 1 | # Adding Jars to JAMES 2 | 3 | The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container. 4 | 5 | You can use it to add you customs Mailets/Matchers. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/admin.json: -------------------------------------------------------------------------------- 1 | { 2 | "web": { 3 | "bindAddress": "0.0.0.0" 4 | } 5 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/plugins/blobstore.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlobStore Plugin", 3 | "id": "blob_store", 4 | "instrumentation": [ 5 | { 6 | "captureKind": "trace-entry", 7 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 8 | "timerName": "blobstore", 9 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 10 | "methodName": "putDirectly", 11 | "methodParameterTypes": [ 12 | ".." 13 | ] 14 | }, 15 | { 16 | "captureKind": "trace-entry", 17 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 18 | "timerName": "blobstore", 19 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 20 | "methodName": "putAndComputeId", 21 | "methodParameterTypes": [ 22 | ".." 23 | ] 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/plugins/imap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IMAP Plugin", 3 | "id": "imap", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.imap.processor.base.AbstractChainedProcessor", 7 | "methodName": "doProcess", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "IMAP", 13 | "transactionNameTemplate": "IMAP processor : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "imapProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/plugins/mailboxListener.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MailboxListener Plugin", 3 | "id": "mailboxListener", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.mailbox.events.MailboxListener", 7 | "methodName": "event", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "MailboxListener", 13 | "transactionNameTemplate": "MailboxListener : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "mailboxListener" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/plugins/smtp.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SMTP Plugin", 3 | "id": "smtp", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.protocols.smtp.core.AbstractHookableCmdHandler", 7 | "methodName": "onCommand", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "SMTP", 13 | "transactionNameTemplate": "SMTP command : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "smtpProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/glowroot/plugins/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Task Plugin", 3 | "id": "task", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.task.Task", 7 | "methodName": "run", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "TASK", 13 | "transactionNameTemplate": "TASK : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "task" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/main/scripts/james-cli: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | unset JAVA_TOOL_OPTIONS 4 | java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@" -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/eml/htmlMail.eml: -------------------------------------------------------------------------------- 1 | Delivered-To: mister@james.org 2 | Date: Thu, 04 Jun 2015 07:36:08 +0000 3 | From: Airbnb 4 | To: mister@james.org 5 | Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail> 6 | Subject: Text and Html not similar 7 | Mime-Version: 1.0 8 | Content-Type: multipart/alternative; 9 | boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637"; 10 | charset=UTF-8 11 | Content-Transfer-Encoding: 7bit 12 | 13 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637 14 | Content-Type: text/plain; 15 | charset=UTF-8 16 | Content-Transfer-Encoding: quoted-printable 17 | 18 | The text/plain part is not matching the html one. 19 | 20 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637 21 | Content-Type: text/html; charset=utf-8 22 | Content-Transfer-Encoding: 7bit 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | This is a mail with beautifull html content which contains a banana.
31 | 32 | 33 | 34 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637-- 35 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/apps/distributed/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/ldif-files/populate.ldif: -------------------------------------------------------------------------------- 1 | dn: ou=people, dc=james,dc=org 2 | ou: people 3 | objectClass: organizationalUnit 4 | 5 | dn: uid=james-user, ou=people, dc=james,dc=org 6 | objectClass: inetOrgPerson 7 | uid: james-user 8 | cn: james-user 9 | sn: james-user 10 | mail: james-user@james.org 11 | userPassword: secret 12 | description: James user 13 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/apps/distributed/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | cassandra 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/conf/jmx.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | 19 | # This template file can be used as example for James Server configuration 20 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 21 | 22 | # Read https://james.apache.org/server/config-system.html#jmx.properties for further details 23 | 24 | jmx.enabled=true 25 | jmx.address=127.0.0.1 26 | jmx.port=9999 27 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/conf/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/apps/memory/src/main/conf/keystore -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/conf/logback-cli.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | 7 | 8 | 9 | 10 | %d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx 11 | false 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/eml-template/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/extensions-jars/README.md: -------------------------------------------------------------------------------- 1 | # Adding Jars to JAMES 2 | 3 | The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container. 4 | 5 | You can use it to add you customs Mailets/Matchers. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/admin.json: -------------------------------------------------------------------------------- 1 | { 2 | "web": { 3 | "bindAddress": "0.0.0.0" 4 | } 5 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/plugins/blobstore.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlobStore Plugin", 3 | "id": "blob_store", 4 | "instrumentation": [ 5 | { 6 | "captureKind": "trace-entry", 7 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 8 | "timerName": "blobstore", 9 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 10 | "methodName": "putDirectly", 11 | "methodParameterTypes": [ 12 | ".." 13 | ] 14 | }, 15 | { 16 | "captureKind": "trace-entry", 17 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 18 | "timerName": "blobstore", 19 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 20 | "methodName": "putAndComputeId", 21 | "methodParameterTypes": [ 22 | ".." 23 | ] 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/plugins/imap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IMAP Plugin", 3 | "id": "imap", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.imap.processor.base.AbstractChainedProcessor", 7 | "methodName": "doProcess", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "IMAP", 13 | "transactionNameTemplate": "IMAP processor : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "imapProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/plugins/mailboxListener.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MailboxListener Plugin", 3 | "id": "mailboxListener", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.mailbox.events.MailboxListener", 7 | "methodName": "event", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "MailboxListener", 13 | "transactionNameTemplate": "MailboxListener : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "mailboxListener" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/plugins/smtp.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SMTP Plugin", 3 | "id": "smtp", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.protocols.smtp.core.AbstractHookableCmdHandler", 7 | "methodName": "onCommand", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "SMTP", 13 | "transactionNameTemplate": "SMTP command : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "smtpProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/glowroot/plugins/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Task Plugin", 3 | "id": "task", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.task.Task", 7 | "methodName": "run", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "TASK", 13 | "transactionNameTemplate": "TASK : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "task" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/main/scripts/james-cli: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | unset JAVA_TOOL_OPTIONS 4 | java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@" -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/test/resources/dnsservice.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | true 23 | false 24 | 50000 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/test/resources/eml/htmlMail.eml: -------------------------------------------------------------------------------- 1 | Delivered-To: mister@james.org 2 | Date: Thu, 04 Jun 2015 07:36:08 +0000 3 | From: Airbnb 4 | To: mister@james.org 5 | Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail> 6 | Subject: Text and Html not similar 7 | Mime-Version: 1.0 8 | Content-Type: multipart/alternative; 9 | boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637"; 10 | charset=UTF-8 11 | Content-Transfer-Encoding: 7bit 12 | 13 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637 14 | Content-Type: text/plain; 15 | charset=UTF-8 16 | Content-Transfer-Encoding: quoted-printable 17 | 18 | The text/plain part is not matching the html one. 19 | 20 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637 21 | Content-Type: text/html; charset=utf-8 22 | Content-Transfer-Encoding: 7bit 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | This is a mail with beautifull html content which contains a banana.
31 | 32 | 33 | 34 | ----==_mimepart_556fffe8c7e84_7ed0e0fe20445637-- 35 | -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/apps/memory/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/apps/memory/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | memory 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/README.md: -------------------------------------------------------------------------------- 1 | ## Administration Operations 2 | ## Clean up data 3 | 4 | To clean up some data on the specific TMail data structures, that will be redundant again after a long time, you can execute the SQL queries `clean_up_data_tmail.sql`. 5 | 6 | The data that in: 7 | - `label_change` table 8 | - `ticket` table 9 | 10 | Note that the `clean_up_data_tmail.sql` should be merged with [the SQL clean up script on Apache James](https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/clean_up.sql) to clean data on James tables as well. 11 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/clean_up_data_tmail.sql: -------------------------------------------------------------------------------- 1 | -- This is a script to delete old rows from some tables. One of the attempts to clean up the never-used data after a long time. 2 | 3 | DO 4 | $$ 5 | DECLARE 6 | days_to_keep INTEGER; 7 | ticket_ttl_in_seconds INTEGER; 8 | BEGIN 9 | -- Set the number of days dynamically 10 | days_to_keep := 60; 11 | 12 | -- Delete rows older than the specified number of days in the `label_change` table 13 | DELETE 14 | FROM label_change 15 | WHERE created_date < current_timestamp - interval '1 day' * days_to_keep; 16 | 17 | -- Set TTL in seconds for the Ticket table cleanup 18 | ticket_ttl_in_seconds := 120; 19 | 20 | -- Delete rows older than the specified TTL in the `Ticket` table 21 | DELETE 22 | FROM ticket 23 | WHERE created_date < current_timestamp - interval '1 second' * ticket_ttl_in_seconds; 24 | END 25 | $$; -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.4' 2 | 3 | x-common-environment: &common-environment 4 | POSTGRES_DB: tmail 5 | POSTGRES_USER: tmail 6 | POSTGRES_PASSWORD: secret1 7 | 8 | services: 9 | 10 | tmail-backend: 11 | depends_on: 12 | - postgres 13 | image: linagora/tmail-backend-postgresql-experimental 14 | container_name: tmail-backend 15 | hostname: tmail-backend.local 16 | command: 17 | - --generate-keystore 18 | volumes: 19 | - ${RSA_PUBLICKEY_PATH}:/root/conf/jwt_publickey # Replace with absolute path to your RSA public key 20 | - ${RSA_PRIVATEKEY_PATH}:/root/conf/jwt_privatekey # Replace with absolute path to your RSA private key 21 | # Key generation: 22 | # openssl genrsa -out jwt_privatekey 4096 23 | # openssl rsa -in jwt_privatekey -pubout > jwt_publickey 24 | ports: 25 | - "80:80" 26 | - "25:25" 27 | - "110:110" 28 | - "143:143" 29 | - "465:465" 30 | - "587:587" 31 | - "993:993" 32 | - "8000:8000" 33 | environment: 34 | <<: *common-environment 35 | 36 | postgres: 37 | image: postgres:16.1 38 | ports: 39 | - "5432:5432" 40 | environment: 41 | <<: *common-environment -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/batchsizes.properties: -------------------------------------------------------------------------------- 1 | # Those properties let you configure the number of messages queried at the same time. 2 | # IMAP FETCH command 3 | fetch.metadata=200 4 | fetch.headers=200 5 | fetch.full=50 6 | # IMAP COPY command 7 | copy=100 8 | # IMAP MOVE command 9 | move=100 10 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/jmx.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | # 18 | 19 | # This template file can be used as example for James Server configuration 20 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 21 | 22 | # Read https://james.apache.org/server/config-system.html#jmx.properties for further details 23 | 24 | jmx.enabled=true 25 | jmx.address=127.0.0.1 26 | jmx.port=9999 27 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/logback-cli.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | 7 | 8 | 9 | 10 | %d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx 11 | false 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/mailbox.properties: -------------------------------------------------------------------------------- 1 | gpg.encryption.enable=false -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/postgres.properties: -------------------------------------------------------------------------------- 1 | # String. Optional, default to 'postgres'. Database name. 2 | database.name=${env:POSTGRES_DB:-postgres} 3 | 4 | # String. Optional, default to 'public'. Database schema. 5 | database.schema=${env:POSTGRES_SCHEMA:-public} 6 | 7 | # String. Optional, default to 'localhost'. Database host. 8 | database.host=${env:POSTGRES_HOST:-postgres} 9 | 10 | # Integer. Optional, default to 5432. Database port. 11 | database.port=${env:POSTGRES_PORT:-5432} 12 | 13 | # String. Required. Database username. 14 | database.username=${env:POSTGRES_USER:-tmail} 15 | 16 | # String. Required. Database password of the user. 17 | database.password=${env:POSTGRES_PASSWORD:-secret1} 18 | 19 | # Boolean. Optional, default to false. Whether to enable row level security. 20 | row.level.security.enabled=false 21 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/sample-configuration/search.properties: -------------------------------------------------------------------------------- 1 | # not for production purposes. To be replaced by PG based search. 2 | implementation=scanning -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/eml-template/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/extensions-jars/README.md: -------------------------------------------------------------------------------- 1 | # Adding Jars to JAMES 2 | 3 | The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container. 4 | 5 | You can use it to add you customs Mailets/Matchers. 6 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/admin.json: -------------------------------------------------------------------------------- 1 | { 2 | "web": { 3 | "bindAddress": "0.0.0.0" 4 | } 5 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/plugins/blobstore.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlobStore Plugin", 3 | "id": "blob_store", 4 | "instrumentation": [ 5 | { 6 | "captureKind": "trace-entry", 7 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 8 | "timerName": "blobstore", 9 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 10 | "methodName": "putDirectly", 11 | "methodParameterTypes": [ 12 | ".." 13 | ] 14 | }, 15 | { 16 | "captureKind": "trace-entry", 17 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 18 | "timerName": "blobstore", 19 | "className": "org.apache.james.blob.objectstorage.BlobPutter", 20 | "methodName": "putAndComputeId", 21 | "methodParameterTypes": [ 22 | ".." 23 | ] 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/plugins/imap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IMAP Plugin", 3 | "id": "imap", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.imap.processor.base.AbstractChainedProcessor", 7 | "methodName": "doProcess", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "IMAP", 13 | "transactionNameTemplate": "IMAP processor : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "imapProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/plugins/mailboxListener.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MailboxListener Plugin", 3 | "id": "mailboxListener", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.mailbox.events.MailboxListener", 7 | "methodName": "event", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "MailboxListener", 13 | "transactionNameTemplate": "MailboxListener : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "mailboxListener" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/plugins/smtp.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SMTP Plugin", 3 | "id": "smtp", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.protocols.smtp.core.AbstractHookableCmdHandler", 7 | "methodName": "onCommand", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "SMTP", 13 | "transactionNameTemplate": "SMTP command : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "smtpProcessor" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/glowroot/plugins/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Task Plugin", 3 | "id": "task", 4 | "instrumentation": [ 5 | { 6 | "className": "org.apache.james.task.Task", 7 | "methodName": "run", 8 | "methodParameterTypes": [ 9 | ".." 10 | ], 11 | "captureKind": "transaction", 12 | "transactionType": "TASK", 13 | "transactionNameTemplate": "TASK : {{this.class.name}}", 14 | "alreadyInTransactionBehavior": "capture-trace-entry", 15 | "traceEntryMessageTemplate": "{{this.class.name}}.{{methodName}}", 16 | "timerName": "task" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/main/scripts/james-cli: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | unset JAVA_TOOL_OPTIONS 4 | java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@" -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/batchsizes.properties: -------------------------------------------------------------------------------- 1 | # Those properties let you configure the number of messages queried at the same time. 2 | # IMAP FETCH command 3 | fetch.metadata=200 4 | fetch.headers=200 5 | fetch.full=50 6 | # IMAP COPY command 7 | copy=100 8 | # IMAP MOVE command 9 | move=100 10 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/dnsservice.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | true 23 | false 24 | 50000 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/apps/postgres/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ 3 | 4 | # AMQP resources parameters for the subscriber email address contact messages. In order to synchronize contacts between Twake Mail backend and 3rd. 5 | # AQMP uri 6 | address.contact.uri=amqp://rabbitmq:5672 7 | address.contact.user=guest 8 | address.contact.password=guest 9 | # Queue name 10 | address.contact.queue=AddressContactQueue1 -------------------------------------------------------------------------------- /tmail-backend/apps/postgres/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 -------------------------------------------------------------------------------- /tmail-backend/blob/blobid-list/src/main/scala/com/linagora/tmail/blob/blobid/list/postgres/PostgresBlobIdList.scala: -------------------------------------------------------------------------------- 1 | package com.linagora.tmail.blob.blobid.list.postgres 2 | 3 | import java.lang 4 | 5 | import com.linagora.tmail.blob.blobid.list.BlobIdList 6 | import jakarta.inject.Inject 7 | import org.apache.james.blob.api.BlobId 8 | import org.reactivestreams.Publisher 9 | 10 | class PostgresBlobIdList @Inject()(postgresBlobIdListDAO: PostgresBlobIdListDAO) extends BlobIdList { 11 | override def isStored(blobId: BlobId): Publisher[lang.Boolean] = 12 | postgresBlobIdListDAO.isStored(blobId) 13 | 14 | override def store(blobId: BlobId): Publisher[Unit] = 15 | postgresBlobIdListDAO.insert(blobId) 16 | 17 | override def remove(blobId: BlobId): Publisher[Unit] = 18 | postgresBlobIdListDAO.remove(blobId) 19 | } 20 | -------------------------------------------------------------------------------- /tmail-backend/blob/blobid-list/src/main/scala/com/linagora/tmail/blob/blobid/list/postgres/PostgresBlobIdListDAO.scala: -------------------------------------------------------------------------------- 1 | package com.linagora.tmail.blob.blobid.list.postgres 2 | 3 | import com.linagora.tmail.blob.blobid.list.postgres.PostgresBlobIdListModule.{BLOB_ID, TABLE_NAME} 4 | import jakarta.inject.Inject 5 | import org.apache.james.backends.postgres.utils.PostgresExecutor 6 | import org.apache.james.blob.api.BlobId 7 | import reactor.core.publisher.Mono 8 | import reactor.core.scala.publisher.SMono 9 | 10 | class PostgresBlobIdListDAO @Inject()(postgresExecutor: PostgresExecutor) { 11 | def insert(blobId: BlobId): SMono[Unit] = 12 | SMono.fromPublisher(postgresExecutor.executeVoid(dsl => Mono.from(dsl.insertInto(TABLE_NAME) 13 | .set(BLOB_ID, blobId.asString()) 14 | .onConflictDoNothing()))) 15 | .`then` 16 | 17 | def isStored(blobId: BlobId): SMono[java.lang.Boolean] = 18 | SMono.fromPublisher(postgresExecutor.executeExists(dsl => dsl.selectOne() 19 | .from(TABLE_NAME) 20 | .where(BLOB_ID.eq(blobId.asString())))) 21 | 22 | def remove(blobId: BlobId): SMono[Unit] = 23 | SMono.fromPublisher(postgresExecutor.executeVoid(dsl => Mono.from(dsl.deleteFrom(TABLE_NAME) 24 | .where(BLOB_ID.eq(blobId.asString()))))) 25 | .`then` 26 | } 27 | -------------------------------------------------------------------------------- /tmail-backend/blob/blobid-list/src/main/scala/com/linagora/tmail/blob/blobid/list/postgres/PostgresBlobIdListModule.scala: -------------------------------------------------------------------------------- 1 | package com.linagora.tmail.blob.blobid.list.postgres 2 | 3 | import org.apache.james.backends.postgres.{PostgresDataDefinition, PostgresTable} 4 | import org.jooq.impl.{DSL, SQLDataType} 5 | import org.jooq.{Field, Record, Table} 6 | 7 | object PostgresBlobIdListModule { 8 | val TABLE_NAME: Table[Record] = DSL.table("blob_id_list") 9 | 10 | val BLOB_ID: Field[String] = DSL.field("blob_id", SQLDataType.VARCHAR.notNull) 11 | 12 | val TABLE: PostgresTable = PostgresTable.name(TABLE_NAME.getName) 13 | .createTableStep((dsl, tableName) => dsl.createTableIfNotExists(tableName) 14 | .column(BLOB_ID) 15 | .constraint(DSL.primaryKey(BLOB_ID))) 16 | .supportsRowLevelSecurity 17 | .build 18 | 19 | val MODULE: PostgresDataDefinition = PostgresDataDefinition 20 | .builder 21 | .addTable(TABLE) 22 | .build 23 | } 24 | -------------------------------------------------------------------------------- /tmail-backend/blob/blobid-list/src/main/scala/com/linagora/tmail/blob/blobid/list/postgres/PostgresSingleSaveBlobStoreModule.scala: -------------------------------------------------------------------------------- 1 | package com.linagora.tmail.blob.blobid.list.postgres 2 | 3 | import com.google.inject.multibindings.Multibinder 4 | import com.google.inject.{AbstractModule, Scopes} 5 | import com.linagora.tmail.blob.blobid.list.BlobIdList 6 | import org.apache.james.backends.postgres.PostgresDataDefinition 7 | 8 | class PostgresBlobIdListGuiceModule extends AbstractModule { 9 | override def configure(): Unit = { 10 | Multibinder.newSetBinder(binder, classOf[PostgresDataDefinition]) 11 | .addBinding 12 | .toInstance(PostgresBlobIdListModule.MODULE) 13 | 14 | bind(classOf[PostgresBlobIdListDAO]).in(Scopes.SINGLETON) 15 | bind(classOf[PostgresBlobIdList]).in(Scopes.SINGLETON) 16 | 17 | bind(classOf[BlobIdList]).to(classOf[PostgresBlobIdList]) 18 | } 19 | } 20 | 21 | class PostgresSingleSaveBlobStoreModule extends AbstractModule { 22 | override def configure(): Unit = { 23 | install(new PostgresBlobIdListGuiceModule) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tmail-backend/combined-identity/src/test/resources/ldif-files/populate.ldif: -------------------------------------------------------------------------------- 1 | dn: ou=people, dc=james,dc=org 2 | ou: people 3 | objectClass: organizationalUnit 4 | 5 | dn: ou=empty, dc=james,dc=org 6 | ou: empty 7 | objectClass: organizationalUnit 8 | 9 | dn: uid=james-user, ou=people, dc=james,dc=org 10 | objectClass: inetOrgPerson 11 | uid: james-user 12 | cn: james-user 13 | sn: james-user 14 | mail: james-user@james.org 15 | userPassword: secret 16 | description: James user 17 | 18 | dn: uid=james-user2, ou=people, dc=james,dc=org 19 | objectClass: inetOrgPerson 20 | uid: james-user2 21 | cn: james-user2 22 | sn: james-user2 23 | mail: james-user2@james.org 24 | userPassword: secret 25 | description: James user 2 26 | 27 | dn: uid=james-user3, ou=people, dc=james,dc=org 28 | objectClass: inetOrgPerson 29 | uid: james-user3 30 | cn: james-user3 31 | sn: james-user3 32 | mail: james-user3@james.org 33 | userPassword: secret 34 | description: James user 3 -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed-ldap/src/test/resources/james-conf/jmxremote.password: -------------------------------------------------------------------------------- 1 | james-admin 123456 -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed-ldap/src/test/resources/james-conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed-ldap/src/test/resources/prepopulated-ldap/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM osixia/openldap:1.5.0 2 | 3 | COPY populate.ldif /container/service/slapd/assets/config/bootstrap/ldif/data.ldif 4 | -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed-ldap/src/test/resources/prepopulated-ldap/populate.ldif: -------------------------------------------------------------------------------- 1 | dn: ou=people, dc=james,dc=org 2 | ou: people 3 | objectClass: organizationalUnit 4 | 5 | dn: ou=empty, dc=james,dc=org 6 | ou: empty 7 | objectClass: organizationalUnit 8 | 9 | dn: uid=james-user, ou=people, dc=james,dc=org 10 | objectClass: inetOrgPerson 11 | uid: james-user 12 | cn: james-user 13 | sn: james-user 14 | mail: james-user@james.org 15 | userPassword: secret 16 | description: James user 17 | 18 | dn: uid=bob, ou=people, dc=james,dc=org 19 | objectClass: inetOrgPerson 20 | uid: bob 21 | cn: bob 22 | sn: bob 23 | mail: bob@domain.tld 24 | userPassword: bobpassword 25 | description: bob 26 | 27 | dn: uid=alice, ou=people, dc=james,dc=org 28 | objectClass: inetOrgPerson 29 | uid: alice 30 | cn: alice 31 | sn: alice 32 | mail: alice@domain.tld 33 | userPassword: alicepassword 34 | description: alice 35 | 36 | dn: uid=imapuser, ou=people, dc=james,dc=org 37 | objectClass: inetOrgPerson 38 | uid: imapuser 39 | cn: imapuser 40 | sn: imapuser 41 | mail: imapuser@domain 42 | userPassword: password 43 | description: imapuser 44 | -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed/src/test/resources/james-conf/jmxremote.password: -------------------------------------------------------------------------------- 1 | james-admin 123456 -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/distributed/src/test/resources/james-conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/memory/src/test/resources/james-conf/jmxremote.password: -------------------------------------------------------------------------------- 1 | james-admin 123456 -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/memory/src/test/resources/james-conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.linagora.tmail 8 | deployment-tests 9 | 1.0.0-SNAPSHOT 10 | 11 | 12 | deployment-tests-postgres 13 | Twake Mail :: Deployment Tests :: Postgres 14 | 15 | 16 | 17 | ${project.groupId} 18 | deployment-tests-common 19 | 20 | 21 | ${project.groupId} 22 | postgres 23 | 24 | 25 | ${project.groupId} 26 | postgres 27 | test-jar 28 | test 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/james-conf/jmxremote.password: -------------------------------------------------------------------------------- 1 | james-admin 123456 -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/james-conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/james-conf/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/deployment-tests/postgres/src/test/resources/james-conf/keystore -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/james-conf/usersrepository.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | SHA-512 11 | true 12 | true 13 | -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/prepopulated-ldap/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM osixia/openldap:1.5.0 2 | 3 | COPY populate.ldif /container/service/slapd/assets/config/bootstrap/ldif/data.ldif 4 | -------------------------------------------------------------------------------- /tmail-backend/deployment-tests/postgres/src/test/resources/prepopulated-ldap/populate.ldif: -------------------------------------------------------------------------------- 1 | dn: ou=people, dc=james,dc=org 2 | ou: people 3 | objectClass: organizationalUnit 4 | 5 | dn: ou=empty, dc=james,dc=org 6 | ou: empty 7 | objectClass: organizationalUnit 8 | 9 | dn: uid=james-user, ou=people, dc=james,dc=org 10 | objectClass: inetOrgPerson 11 | uid: james-user 12 | cn: james-user 13 | sn: james-user 14 | mail: james-user@james.org 15 | userPassword: secret 16 | description: James user 17 | 18 | dn: uid=bob, ou=people, dc=james,dc=org 19 | objectClass: inetOrgPerson 20 | uid: bob 21 | cn: bob 22 | sn: bob 23 | mail: bob@domain.tld 24 | userPassword: bobpassword 25 | description: bob 26 | 27 | dn: uid=alice, ou=people, dc=james,dc=org 28 | objectClass: inetOrgPerson 29 | uid: alice 30 | cn: alice 31 | sn: alice 32 | mail: alice@domain.tld 33 | userPassword: alicepassword 34 | description: alice 35 | 36 | dn: uid=imapuser, ou=people, dc=james,dc=org 37 | objectClass: inetOrgPerson 38 | uid: imapuser 39 | cn: imapuser 40 | sn: imapuser 41 | mail: imapuser@domain 42 | userPassword: password 43 | description: imapuser 44 | -------------------------------------------------------------------------------- /tmail-backend/event-bus-redis/src/test/resources/keystore.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/event-bus-redis/src/test/resources/keystore.p12 -------------------------------------------------------------------------------- /tmail-backend/event-bus-redis/src/test/resources/redis_cluster.conf: -------------------------------------------------------------------------------- 1 | # Custom config file to enable cluster mode 2 | # on all Redis instances started via Docker 3 | cluster-enabled yes 4 | # The cluster file is created and managed by Redis 5 | # We just need to declare it here 6 | cluster-node-timeout 3000 7 | appendonly yes -------------------------------------------------------------------------------- /tmail-backend/healthcheck/README.md: -------------------------------------------------------------------------------- 1 | # Twake Mail Healthcheck 2 | 3 | This module gathers the custom healthcheck for Twake Mail. 4 | 5 | ## Tasks healthcheck 6 | 7 | The goal is to check if wanted tasks are executed well within the required time range: 8 | - If all tasks are executed in time, return Healthy 9 | - If some tasks are executed in time, return Degraded 10 | - If no task is finished in time, return Unhealthy 11 | 12 | To use this tasks healthcheck, please declare in `healthcheck.properties`: 13 | ```properties 14 | # Map of task name to its required execution duration. 15 | # The delimiter between map entries is "," while between the mapping is ":". 16 | # Default to empty map (no check/always healthy). 17 | healthcheck.tasks.execution=TaskAName:2day,TaskBName:2month,taskCName:2week 18 | ``` 19 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/distributed-healthcheck-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/healthcheck/distributed-healthcheck-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/distributed-healthcheck-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/batchsizes.properties: -------------------------------------------------------------------------------- 1 | # Those properties let you configure the number of messages queried at the same time. 2 | # IMAP FETCH command 3 | fetch.metadata=200 4 | fetch.headers=200 5 | fetch.full=50 6 | # IMAP COPY command 7 | copy=100 8 | # IMAP MOVE command 9 | move=100 10 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ 3 | 4 | # AMQP resources parameters for the subscriber email address contact messages. In order to synchronize contacts between Twake Mail backend and 3rd. 5 | # AQMP uri 6 | address.contact.uri=amqp://rabbitmq:5672 7 | address.contact.user=guest 8 | address.contact.password=guest 9 | # Queue name 10 | address.contact.queue=AddressContactQueue1 -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/redis.properties: -------------------------------------------------------------------------------- 1 | redisURL=redis://redis:6379 2 | cluster.enabled=false -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/rspamd.properties: -------------------------------------------------------------------------------- 1 | rspamdUrl=http://rspamd:11334 2 | rspamdPassword=admin 3 | # Whether to scan/learn mails using per-user Bayes. Default to false. 4 | perUserBayes=false -------------------------------------------------------------------------------- /tmail-backend/integration-tests/healthcheck/postgres-healthcheck-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 -------------------------------------------------------------------------------- /tmail-backend/integration-tests/imap/memory-imap-integration-tests/docker-compose-sample/script_create_sample_data_for_docker_compose.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # URL of the server 4 | SERVER_URL="http://tmail-backend.local:8000" 5 | 6 | # Create the domain 7 | curl -X PUT "$SERVER_URL/domains/domain.tld" 8 | 9 | # Create the minister account 10 | curl -X PUT "$SERVER_URL/users/minister@domain.tld" \ 11 | -H "Content-Type: application/json" \ 12 | -d '{"password":"misecret"}' 13 | 14 | # Create the secretary account 15 | curl -X PUT "$SERVER_URL/users/secretary@domain.tld" \ 16 | -H "Content-Type: application/json" \ 17 | -d '{"password":"sesecret"}' 18 | 19 | # Create the other3 account 20 | curl -X PUT "$SERVER_URL/users/other3@domain.tld" \ 21 | -H "Content-Type: application/json" \ 22 | -d '{"password":"other3secret"}' 23 | 24 | # Delegate permissions, allowing secretary to access minister 25 | curl -X PUT "$SERVER_URL/users/minister@domain.tld/authorizedUsers/secretary@domain.tld" 26 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/imap/memory-imap-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/imap/memory-imap-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/imap/memory-imap-integration-tests/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | memory 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/distributed-jmap-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/emailWithTextAttachment.eml: -------------------------------------------------------------------------------- 1 | To: James User 2 | From: James Sender 3 | Subject: Message with text attachment 4 | Message-ID: 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/plain; charset=UTF-8; 20 | name="attachment.txt" 21 | Content-Transfer-Encoding: base64 22 | Content-Disposition: attachment; 23 | filename="attachment.txt" 24 | 25 | VGhpcyBpcyBhIGJlYXV0aWZ1bCBiYW5hbmEuCg== 26 | --------------D24E361990BDBA143D4D8794-- 27 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/aliceInviteBob.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | TRANSP:OPAQUE 15 | SEQUENCE:0 16 | SUMMARY:Sprint planning #23 17 | DESCRIPTION: description 123 18 | CLASS:PUBLIC 19 | PRIORITY:5 20 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:alice@do.main.tld 21 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 22 | LOCATION:Hangout 23 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 24 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 25 | CATEGORIES: 26 | UID:ea127690-0440-404b-af98-9823c855a283 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:another@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:bob@domain.tld 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/invalid_STATUS.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | SEQUENCE:0 15 | SUMMARY:Sprint planning #23 16 | DESCRIPTION: description 123 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@domain.tld 20 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 21 | LOCATION:Hangout 22 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 23 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 24 | CATEGORIES: 25 | UID:ea127690-0440-404b-af98-9823c855a283 26 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 27 | DS-ACTION;X-OBM-ID=302:MAILTO:baechler@domain.tld 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 29 | X-OBM-ID=723:MAILTO:royet@domain.tld 30 | STATUS:INVALID_VALUE 31 | END:VEVENT 32 | END:VCALENDAR 33 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/invalid_TRANSP.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | SEQUENCE:0 15 | SUMMARY:Sprint planning #23 16 | DESCRIPTION: description 123 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@domain.tld 20 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 21 | LOCATION:Hangout 22 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 23 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 24 | CATEGORIES: 25 | UID:ea127690-0440-404b-af98-9823c855a283 26 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 27 | DS-ACTION;X-OBM-ID=302:MAILTO:baechler@domain.tld 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 29 | X-OBM-ID=723:MAILTO:royet@domain.tld 30 | STATUS:CONFIRMED 31 | TRANSP:INVALID_VALUE 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/meeting.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | TRANSP:OPAQUE 15 | SEQUENCE:0 16 | SUMMARY:Sprint planning #23 17 | DESCRIPTION: description 123 18 | CLASS:PUBLIC 19 | PRIORITY:5 20 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@domain.tld 21 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 22 | LOCATION:Hangout 23 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 24 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 25 | CATEGORIES: 26 | UID:ea127690-0440-404b-af98-9823c855a283 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:baechler@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:royet@domain.tld 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/meeting2.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:CANCEL 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TRANSP:TRANSPARENT 14 | SEQUENCE:0 15 | SUMMARY:Sprint planning #24 16 | DESCRIPTION: description 456 17 | CLASS:PRIVATE 18 | PRIORITY:5 19 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@domain.tld 20 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 21 | X-OPENPAAS-TEST:test1 22 | X-OPENPAAS-TEST:test2 23 | LOCATION:Hangout 24 | CATEGORIES: 25 | UID:ea127690-0440-404b-af98-9823c855a284 26 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 27 | DS-ACTION;X-OBM-ID=302:MAILTO:baechler@domain.tld 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 29 | X-OBM-ID=723:MAILTO:royet@domain.tld 30 | END:VEVENT 31 | END:VCALENDAR 32 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/meeting_minimize.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | BEGIN:VEVENT 16 | UID:037aaad3-17c9-47c8-bd6b-f2cbfe925ef7 17 | TRANSP:OPAQUE 18 | DTSTART;TZID=Asia/Ho_Chi_Minh:20230309T140000 19 | CLASS:CONFIDENTIAL 20 | X-OPENPAAS-VIDEOCONFERENCE: 21 | SUMMARY:MOB: integration tests 22 | ORGANIZER;CN=Benoît TELLIER:mailto:btellier@domain.tld 23 | ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVI 24 | DUAL;CN=Van Tung TRAN:mailto:vttran@domain.tld 25 | DTSTAMP:20230306T074133Z 26 | SEQUENCE:0 27 | END:VEVENT 28 | END:VCALENDAR 29 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/missingMethod.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//pretix//pretix.eu// 4 | BEGIN:VTIMEZONE 5 | TZID:Europe/Paris 6 | BEGIN:STANDARD 7 | DTSTART:20001029T040000 8 | RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 9 | TZNAME:CET 10 | TZOFFSETFROM:+0200 11 | TZOFFSETTO:+0100 12 | END:STANDARD 13 | BEGIN:DAYLIGHT 14 | DTSTART:20000326T030000 15 | RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 16 | TZNAME:CEST 17 | TZOFFSETFROM:+0100 18 | TZOFFSETTO:+0200 19 | END:DAYLIGHT 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | UID:pretix-ow2-ow2con-2024-0@pretix.ow2.org 23 | DTSTART;TZID=Europe/Paris:20240611T090000 24 | DTEND;TZID=Europe/Paris:20240612T163000 25 | DESCRIPTION:Tickets: https://pretix.ow2.org/ow2con-2024/\nOrganizer: OW2 26 | DTSTAMP:20240531T133906Z 27 | LOCATION:44 Avenue de la République\, 92320 Châtillon\, France 28 | SUMMARY:OW2con'24 29 | END:VEVENT 30 | END:VCALENDAR -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/missing_attendee.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | BEGIN:VEVENT 16 | UID:037aaad3-17c9-47c8-bd6b-f2cbfe925ef7 17 | TRANSP:OPAQUE 18 | DTSTART;TZID=Asia/Ho_Chi_Minh:20230309T140000 19 | CLASS:CONFIDENTIAL 20 | X-OPENPAAS-VIDEOCONFERENCE: 21 | SUMMARY:MOB: integration tests 22 | ORGANIZER;CN=Benoît TELLIER:mailto:btellier@domain.tld 23 | DTSTAMP:20230306T074133Z 24 | SEQUENCE:0 25 | END:VEVENT 26 | END:VCALENDAR 27 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/missing_organizer.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | BEGIN:VEVENT 16 | UID:037aaad3-17c9-47c8-bd6b-f2cbfe925ef7 17 | TRANSP:OPAQUE 18 | DTSTART;TZID=Asia/Ho_Chi_Minh:20230309T140000 19 | CLASS:CONFIDENTIAL 20 | X-OPENPAAS-VIDEOCONFERENCE: 21 | SUMMARY:MOB: integration tests 22 | ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVI 23 | DUAL;CN=Van Tung TRAN:mailto:vttran@domain.tld 24 | DTSTAMP:20230306T074133Z 25 | SEQUENCE:0 26 | END:VEVENT 27 | END:VCALENDAR 28 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/missing_vevent.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | END:VCALENDAR 16 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/ics/multipleEvents.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//bobbin v0.1//NONSGML iCal Writer//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:PUBLISH 6 | BEGIN:VEVENT 7 | DTSTART:20100701T080000Z 8 | DTEND:20100701T110000Z 9 | DTSTAMP:20091130T213238Z 10 | UID:1285935469767a7c7c1a9b3f0df8003a@yoursever.com 11 | CREATED:20091130T213238Z 12 | DESCRIPTION:Example event 1 13 | LAST-MODIFIED:20091130T213238Z 14 | SEQUENCE:0 15 | STATUS:CONFIRMED 16 | SUMMARY:Example event 1 17 | TRANSP:OPAQUE 18 | END:VEVENT 19 | BEGIN:VEVENT 20 | DTSTART:20100701T120000Z 21 | DTEND:20100701T130000Z 22 | DTSTAMP:20091130T213238Z 23 | UID:1285935469767a7c7c1a9b3f0df8003b@yoursever.com 24 | CREATED:20091130T213238Z 25 | DESCRIPTION:Example event 2 26 | LAST-MODIFIED:20091130T213238Z 27 | SEQUENCE:0 28 | STATUS:CONFIRMED 29 | SUMMARY:Example event 2 30 | TRANSP:OPAQUE 31 | END:VEVENT 32 | END:VCALENDAR -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/publicasset/tmail-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/publicasset/tmail-logo.png -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/emailWithAliceInviteBobIcsAttachment.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/aliceInviteBob.ics.mustache}}{{/base64Encode}} 24 | 25 | --------------D24E361990BDBA143D4D8794 26 | Content-Type: application/ics; name=meeting.ics 27 | Content-Disposition: attachment; filename=meeting.ics 28 | Content-Transfer-Encoding: base64 29 | 30 | {{#base64Encode}}{{>ics/aliceInviteBob.ics.mustache}}{{/base64Encode}} 31 | --------------D24E361990BDBA143D4D8794-- -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/emailWithIcsMissingAttendee.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/missing_attendee.ics.mustache}}{{/base64Encode}} 24 | --------------D24E361990BDBA143D4D8794 25 | Content-Type: application/ics; name=meeting.ics 26 | Content-Disposition: attachment; filename=meeting.ics 27 | Content-Transfer-Encoding: base64 28 | 29 | {{#base64Encode}}{{>ics/missing_attendee.ics.mustache}}{{/base64Encode}} 30 | --------------D24E361990BDBA143D4D8794-- 31 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/emailWithIcsMissingMethod.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/missingMethod.ics.mustache}}{{/base64Encode}} 24 | --------------D24E361990BDBA143D4D8794 25 | Content-Type: application/ics; name=meeting.ics 26 | Content-Disposition: attachment; filename=meeting.ics 27 | Content-Transfer-Encoding: base64 28 | 29 | {{#base64Encode}}{{>ics/missingMethod.ics.mustache}}{{/base64Encode}} 30 | --------------D24E361990BDBA143D4D8794-- 31 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/emailWithIcsMissingOrginizer.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/missing_organizer.ics.mustache}}{{/base64Encode}} 24 | --------------D24E361990BDBA143D4D8794 25 | Content-Type: application/ics; name=meeting.ics 26 | Content-Disposition: attachment; filename=meeting.ics 27 | Content-Transfer-Encoding: base64 28 | 29 | {{#base64Encode}}{{>ics/missing_organizer.ics.mustache}}{{/base64Encode}} 30 | --------------D24E361990BDBA143D4D8794-- 31 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/emailWithIcsMissingVEVENT.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/missingVEVENT.ics.mustache}}{{/base64Encode}} 24 | --------------D24E361990BDBA143D4D8794 25 | Content-Type: application/ics; name=meeting.ics 26 | Content-Disposition: attachment; filename=meeting.ics 27 | Content-Transfer-Encoding: base64 28 | 29 | {{#base64Encode}}{{>ics/missingVEVENT.ics.mustache}}{{/base64Encode}} 30 | --------------D24E361990BDBA143D4D8794-- 31 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/aliceInviteBob.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | TRANSP:OPAQUE 15 | SEQUENCE:0 16 | SUMMARY:Sprint planning #23 17 | DESCRIPTION: description 123 18 | CLASS:PUBLIC 19 | PRIORITY:5 20 | ORGANIZER;X-OBM-ID=128;CN={{sender.name}}:MAILTO:{{sender.email}} 21 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 22 | LOCATION:Hangout 23 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 24 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 25 | CATEGORIES: 26 | UID:{{calendarUid}} 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:another@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:{{receiver.email}} 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/invalid_STATUS.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | SEQUENCE:0 15 | SUMMARY:Sprint planning #23 16 | DESCRIPTION: description 123 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;CN={{sender.name}}:MAILTO:{{sender.email}} 20 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 21 | LOCATION:Hangout 22 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 23 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 24 | CATEGORIES: 25 | UID:ea127690-0440-404b-af98-9823c855a283 26 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 27 | X-OBM-ID=723:MAILTO:{{receiver.email}} 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 29 | X-OBM-ID=723:MAILTO:royet@domain.tld 30 | STATUS:INVALID_VALUE 31 | END:VEVENT 32 | END:VCALENDAR 33 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/invalid_TRANSP.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | SEQUENCE:0 15 | SUMMARY:Sprint planning #23 16 | DESCRIPTION: description 123 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;CN={{sender.name}}:MAILTO:{{sender.email}} 20 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 21 | LOCATION:Hangout 22 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 23 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 24 | CATEGORIES: 25 | UID:ea127690-0440-404b-af98-9823c855a283 26 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 27 | DS-ACTION;X-OBM-ID=302:MAILTO:baechler@domain.tld 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 29 | X-OBM-ID=723:MAILTO:{{receiver.email}} 30 | STATUS:CONFIRMED 31 | TRANSP:INVALID_VALUE 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/missingMethod.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//pretix//pretix.eu// 4 | BEGIN:VTIMEZONE 5 | TZID:Europe/Paris 6 | BEGIN:STANDARD 7 | DTSTART:20001029T040000 8 | RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 9 | TZNAME:CET 10 | TZOFFSETFROM:+0200 11 | TZOFFSETTO:+0100 12 | END:STANDARD 13 | BEGIN:DAYLIGHT 14 | DTSTART:20000326T030000 15 | RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 16 | TZNAME:CEST 17 | TZOFFSETFROM:+0100 18 | TZOFFSETTO:+0200 19 | END:DAYLIGHT 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | UID:pretix-ow2-ow2con-2024-0@pretix.ow2.org 23 | DTSTART;TZID=Europe/Paris:20240611T090000 24 | DTEND;TZID=Europe/Paris:20240612T163000 25 | DESCRIPTION:Tickets: https://pretix.ow2.org/ow2con-2024/\nOrganizer: OW2 26 | DTSTAMP:20240531T133906Z 27 | LOCATION:44 Avenue de la République\, 92320 Châtillon\, France 28 | SUMMARY:OW2con'24 29 | END:VEVENT 30 | END:VCALENDAR -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/missingVEVENT.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | END:VCALENDAR 8 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/missing_attendee.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | BEGIN:VEVENT 16 | UID:037aaad3-17c9-47c8-bd6b-f2cbfe925ef7 17 | TRANSP:OPAQUE 18 | DTSTART;TZID=Asia/Ho_Chi_Minh:20230309T140000 19 | CLASS:CONFIDENTIAL 20 | X-OPENPAAS-VIDEOCONFERENCE: 21 | SUMMARY:MOB: integration tests 22 | ORGANIZER;CN={{sender.name}}:MAILTO:{{sender.email}} 23 | DTSTAMP:20230306T074133Z 24 | SEQUENCE:0 25 | END:VEVENT 26 | END:VCALENDAR 27 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/jmap-integration-tests-common/src/main/resources/template/ics/missing_organizer.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Sabre//Sabre VObject 4.1.3//EN 4 | CALSCALE:GREGORIAN 5 | METHOD:REQUEST 6 | BEGIN:VTIMEZONE 7 | TZID:Asia/Ho_Chi_Minh 8 | BEGIN:STANDARD 9 | TZOFFSETFROM:+0700 10 | TZOFFSETTO:+0700 11 | TZNAME:ICT 12 | DTSTART:19700101T000000 13 | END:STANDARD 14 | END:VTIMEZONE 15 | BEGIN:VEVENT 16 | UID:037aaad3-17c9-47c8-bd6b-f2cbfe925ef7 17 | TRANSP:OPAQUE 18 | DTSTART;TZID=Asia/Ho_Chi_Minh:20230309T140000 19 | CLASS:CONFIDENTIAL 20 | X-OPENPAAS-VIDEOCONFERENCE: 21 | SUMMARY:MOB: integration tests 22 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 23 | X-OBM-ID=723:MAILTO:{{receiver.email}} 24 | DTSTAMP:20230306T074133Z 25 | SEQUENCE:0 26 | END:VEVENT 27 | END:VCALENDAR 28 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | memory 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/memory-jmap-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: ACCEPTED: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_accepted-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?ACCEPT=C9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a accepté cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Declined: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has declined this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_declined-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?D=E9clin=E9?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a décliné cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-en.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Tentatively Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has replied Maybe to this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/eml/calendar_reply_tentative-fr.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: =?ISO-8859-1?Q?Accept=E9_provisoirement?=: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} a répondu Peut-être à cette invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/firebase.properties: -------------------------------------------------------------------------------- 1 | privatekey.url=/root/conf/dummy.json 2 | 3 | api.key=key123 4 | app.id=firebase123 5 | messaging.sender.id=sender123 6 | project.id=project123 7 | database.url=http://database.com 8 | storage.bucket=bucket123 9 | auth.domain=domain123 10 | vapid.public.key=vapidkey123 11 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/imapserver.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/jmap.properties: -------------------------------------------------------------------------------- 1 | enabled=true 2 | emailRecoveryAction.maxEmailRecoveryPerRequest=6 3 | calendarEvent.reply.mailTemplateLocation=classpath://eml/ 4 | calendarEvent.reply.supportedLanguages=en,fr 5 | 6 | oidc.introspect.url=http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/introspect 7 | oidc.introspect.credentials=Bearer ewjiwelhwew 8 | oidc.audience=tmail,james 9 | oidc.userInfo.url=http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/token/userinfo 10 | oidc.claim=email -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.apache.james.jmap.event.PopulateEmailQueryViewListener 4 | true 5 | 6 | 7 | org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener 8 | QuotaThresholdCrossingListener 9 | 10 | 11 | 12 | 0.9 13 | 14 | 15 | first 16 | 17 | 18 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/pop3server.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ -------------------------------------------------------------------------------- /tmail-backend/integration-tests/jmap/postgres-jmap-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/distributed-rate-limiter-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/rate-limiter/distributed-rate-limiter-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/distributed-rate-limiter-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.apache.james.jmap.event.PopulateEmailQueryViewListener 4 | true 5 | 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/pop3server.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rate-limiter/postgres-rate-limiter-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/distributed-rspamd-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/rspamd/distributed-rspamd-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/distributed-rspamd-integration-tests/src/test/resources/rspamd-config/actions.conf: -------------------------------------------------------------------------------- 1 | reject = 10; # Reject when reaching this score 2 | add_header = 6; # Add header when reaching this score 3 | greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`) -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/distributed-rspamd-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/jmap.properties: -------------------------------------------------------------------------------- 1 | enabled=true 2 | emailRecoveryAction.maxEmailRecoveryPerRequest=6 3 | calendarEvent.reply.mailTemplateLocation=classpath://eml/ 4 | calendarEvent.reply.supportedLanguages=en,fr -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.apache.james.jmap.event.PopulateEmailQueryViewListener 4 | true 5 | 6 | 7 | org.apache.james.rspamd.RspamdListener 8 | true 9 | 10 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/pop3server.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/rspamd-config/actions.conf: -------------------------------------------------------------------------------- 1 | reject = 10; # Reject when reaching this score 2 | add_header = 6; # Add header when reaching this score 3 | greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`) -------------------------------------------------------------------------------- /tmail-backend/integration-tests/rspamd/postgres-rspamd-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/distributed-smtp-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/smtp/distributed-smtp-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/memory-smtp-integration-tests/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/memory-smtp-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/smtp/memory-smtp-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/memory-smtp-integration-tests/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | memory 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.apache.james.jmap.event.PopulateEmailQueryViewListener 4 | true 5 | 6 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/pop3server.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ -------------------------------------------------------------------------------- /tmail-backend/integration-tests/smtp/postgres-smtp-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/distributed-webadmin-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/webadmin/distributed-webadmin-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/distributed-webadmin-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/imapserver.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/jmap.properties: -------------------------------------------------------------------------------- 1 | # Configuration urlPrefix for JMAP routes. 2 | url.prefix=http://domain.com 3 | websocket.url.prefix=ws://domain.com 4 | upload.max.size=20M 5 | webpush.maxTimeoutSeconds=10 6 | webpush.maxConnections=10 7 | dynamic.jmap.prefix.resolution.enabled=true -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/pop3server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/rabbitmq.properties: -------------------------------------------------------------------------------- 1 | uri=amqp://james:james@rabbitmq_host:5672 2 | management.uri=http://james:james@rabbitmq_host:15672/api/ -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/rspamd.properties: -------------------------------------------------------------------------------- 1 | rspamdUrl=http://rspamd:11334 2 | rspamdPassword=admin 3 | # Whether to scan/learn mails using per-user Bayes. Default to false. 4 | perUserBayes=false -------------------------------------------------------------------------------- /tmail-backend/integration-tests/webadmin/postgres-webadmin-integration-tests/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/main/scala/com/linagora/tmail/james/jmap/model/CalendarEventParseResponse.scala: -------------------------------------------------------------------------------- 1 | package com.linagora.tmail.james.jmap.model 2 | 3 | import org.apache.james.jmap.core.AccountId 4 | import org.apache.james.jmap.mail.BlobId 5 | 6 | case class CalendarEventParseResponse(accountId: AccountId, 7 | parsed: Option[Map[BlobId, CalendarEventParsedList]], 8 | notFound: Option[CalendarEventNotFound], 9 | notParsable: Option[CalendarEventNotParsable]) -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/eml/calendar_reply/multipart_html.eml: -------------------------------------------------------------------------------- 1 | From: sender@example.com 2 | To: recipient@example.com 3 | Subject: Example Email 4 | MIME-Version: 1.0 5 | Content-Type: multipart/mixed; boundary="boundary-example" 6 | 7 | --boundary-example 8 | Content-Type: text/html; charset=utf-8 9 | 10 | 11 | 12 | 13 | 14 | Example Email 15 | 16 | 17 |

Hello, {{ORGANIZER}}!

18 |

This is an example HTML email.

19 |

For more information, visit example.com.

20 | 21 | 22 | 23 | --boundary-example 24 | Content-Type: application/pdf 25 | Content-Disposition: attachment; filename="example.pdf" 26 | 27 | ...binary data of PDF file... 28 | 29 | --boundary-example 30 | Content-Type: image/jpeg 31 | Content-Disposition: attachment; filename="example.jpg" 32 | 33 | ...binary data of JPEG image... 34 | 35 | --boundary-example-- 36 | -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/eml/calendar_reply/mustache_show.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Mustache show map data 4 | 5 | ATTENDEE: {{ATTENDEE}} 6 | ATTENDEE_CN: {{ATTENDEE_CN}} 7 | PART_STAT: {{PART_STAT}} 8 | ORGANIZER: {{ORGANIZER}} 9 | ORGANIZER_CN: {{ORGANIZER_CN}} 10 | EVENT_TITLE: {{EVENT_TITLE}} 11 | EVENT_START_DATE: {{EVENT_START_DATE}} 12 | EVENT_END_DATE: {{EVENT_END_DATE}} 13 | EVENT_LOCATION: {{EVENT_LOCATION}} -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/eml/calendar_reply/single.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Content-Type: text/plain; charset=UTF-8 3 | Subject: Accepted: {{EVENT_TITLE}} @ {{EVENT_START_DATE}} ({{ATTENDEE}}) 4 | 5 | {{ATTENDEE}} has accepted this invitation. 6 | -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/eml/calendar_reply/singlepart_html.eml: -------------------------------------------------------------------------------- 1 | From: sender@example.com 2 | To: recipient@example.com 3 | Subject: Example HTML Email 4 | MIME-Version: 1.0 5 | Content-Type: text/html; charset=utf-8 6 | 7 | 8 | 9 | 10 | 11 | Example HTML Email 12 | 13 | 14 |

Hello, {{ORGANIZER}}!

15 |

This is an example HTML email.

16 |

For more information, visit example.com.

17 | 18 | 19 | -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/invalid-firebase-private-key.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "service_account", 3 | "project_id": "testing" 4 | } 5 | -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /tmail-backend/jmap/extensions/src/test/resources/valid-firebase-private-key.json: -------------------------------------------------------------------------------- 1 | { 2 | "change_this_valid_key": "change_this_valid_key" 3 | } 4 | -------------------------------------------------------------------------------- /tmail-backend/mailbox/encrypted/memory/src/test/resources/emailEncrypted.eml: -------------------------------------------------------------------------------- 1 | To: James User 2 | From: James Sender 3 | Subject: Message with text attachment 4 | Message-ID: 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Subject: small message 8 | Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; 9 | boundary="-=Part.0.971d815071d48597.17c96cf5798.3a88f426abbc98b8=-" 10 | 11 | ---=Part.0.971d815071d48597.17c96cf5798.3a88f426abbc98b8=- 12 | Content-Type: application/pgp-encrypted 13 | 14 | Version: 1 15 | ---=Part.0.971d815071d48597.17c96cf5798.3a88f426abbc98b8=- 16 | Content-Type: application/octet-stream 17 | 18 | content email 123 19 | 20 | ---=Part.0.971d815071d48597.17c96cf5798.3a88f426abbc98b8=--- 21 | 22 | -------------------------------------------------------------------------------- /tmail-backend/mailbox/encrypted/memory/src/test/resources/emailWithTextAttachment.eml: -------------------------------------------------------------------------------- 1 | To: James User 2 | From: James Sender 3 | Subject: Message with text attachment 4 | Message-ID: 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/plain; charset=UTF-8; 20 | name="attachment.txt" 21 | Content-Transfer-Encoding: base64 22 | Content-Disposition: attachment; 23 | filename="attachment.txt" 24 | 25 | VGhpcyBpcyBhIGJlYXV0aWZ1bCBiYW5hbmEuCg== 26 | --------------D24E361990BDBA143D4D8794-- 27 | -------------------------------------------------------------------------------- /tmail-backend/mailbox/encrypted/pgp-utils/src/test/resources/README.md: -------------------------------------------------------------------------------- 1 | # GPG key pairs for testing purposes 2 | 3 | Keys information: 4 | 5 | ``` 6 | pub rsa3072 2021-04-01 [SC] 7 | 3BA423385C8C80D453D7E6F95BF4E866E9CC6FA2 8 | uid [ultimate] TMail test key 1 9 | sub rsa3072 2021-04-01 [E] 10 | 11 | pub rsa3072 2021-04-01 [SC] 12 | 12522CF961A95474431BADD676E1BC47187D6CEF 13 | uid [ultimate] TMail test key 2 14 | sub rsa3072 2021-04-01 [E] 15 | ``` 16 | 17 | Associated password: `123456` 18 | 19 | ## GPG memo 20 | 21 | Generating the keys: 22 | 23 | ``` 24 | gpg --full-gen-key 25 | ``` 26 | 27 | Exporting the keys: 28 | 29 | ``` 30 | gpg --armor --export key1@linagora.com > tmail-backend/mailbox/encrypted/src/test/resources/gpg1.pub 31 | gpg --armor --export-secret-keys key1@linagora.com > tmail-backend/mailbox/encrypted/src/test/resources/gpg.private 32 | ``` 33 | 34 | Decrypting stuff: 35 | 36 | ``` 37 | gpg --decrypt {file} 38 | ``` -------------------------------------------------------------------------------- /tmail-backend/mailbox/plugin/welcome-listener/src/test/resources/file.eml: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: Toto 3 | Date: Thu, 4 Jun 2015 06:08:41 +0200 4 | Message-ID: 5 | Content-Type: text/plain; charset=UTF-8 6 | Subject: Welcome! 7 | 8 | Hi all, 9 | 10 | Welcome! 11 | 12 | Thanks! 13 | -------------------------------------------------------------------------------- /tmail-backend/mailets/src/test/resources/ics/meeting_2.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483439571 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170103T103250Z 9 | LAST-MODIFIED:20170103T103250Z 10 | DTSTAMP:20170103T103250Z 11 | DTSTART:20170120T100000Z 12 | DURATION:PT30M 13 | TRANSP:OPAQUE 14 | SEQUENCE:0 15 | SUMMARY:Sprint Social #3 Demo 16 | DESCRIPTION: 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora. 20 | com 21 | X-OBM-DOMAIN:linagora.com 22 | X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922 23 | LOCATION:hangout 24 | CATEGORIES: 25 | X-OBM-COLOR: 26 | UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe 27 | b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe 28 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI 29 | ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com 30 | END:VEVENT 31 | END:VCALENDAR 32 | -------------------------------------------------------------------------------- /tmail-backend/mailets/src/test/resources/ics/meeting_without_method.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483439571 5 | VERSION:2.0 6 | BEGIN:VEVENT 7 | CREATED:20170103T103250Z 8 | LAST-MODIFIED:20170103T103250Z 9 | DTSTAMP:20170103T103250Z 10 | DTSTART:20170120T100000Z 11 | DURATION:PT30M 12 | TRANSP:OPAQUE 13 | SEQUENCE:0 14 | SUMMARY:Sprint Social #3 Demo 15 | DESCRIPTION: 16 | CLASS:PUBLIC 17 | PRIORITY:5 18 | ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora. 19 | com 20 | X-OBM-DOMAIN:linagora.com 21 | X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922 22 | LOCATION:hangout 23 | CATEGORIES: 24 | X-OBM-COLOR: 25 | UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe 26 | b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe 27 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI 28 | ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com 29 | END:VEVENT 30 | END:VCALENDAR 31 | -------------------------------------------------------------------------------- /tmail-backend/mailets/src/test/resources/ics/meeting_without_sequence.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483439571 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170103T103250Z 9 | LAST-MODIFIED:20170103T103250Z 10 | DTSTAMP:20170103T103250Z 11 | DTSTART:20170120T100000Z 12 | DURATION:PT30M 13 | TRANSP:OPAQUE 14 | SUMMARY:Sprint Social #3 Demo 15 | DESCRIPTION: 16 | CLASS:PUBLIC 17 | PRIORITY:5 18 | ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora. 19 | com 20 | X-OBM-DOMAIN:linagora.com 21 | X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922 22 | LOCATION:hangout 23 | CATEGORIES: 24 | X-OBM-COLOR: 25 | UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe 26 | b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe 27 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI 28 | ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com 29 | END:VEVENT 30 | END:VCALENDAR 31 | -------------------------------------------------------------------------------- /tmail-backend/mailets/src/test/resources/ics/meeting_without_uid.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483439571 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170103T103250Z 9 | LAST-MODIFIED:20170103T103250Z 10 | DTSTAMP:20170103T103250Z 11 | DTSTART:20170120T100000Z 12 | DURATION:PT30M 13 | TRANSP:OPAQUE 14 | SEQUENCE:0 15 | SUMMARY:Sprint Social #3 Demo 16 | DESCRIPTION: 17 | CLASS:PUBLIC 18 | PRIORITY:5 19 | ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora. 20 | com 21 | X-OBM-DOMAIN:linagora.com 22 | X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922 23 | LOCATION:hangout 24 | CATEGORIES: 25 | X-OBM-COLOR: 26 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI 27 | ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com 28 | END:VEVENT 29 | END:VCALENDAR 30 | -------------------------------------------------------------------------------- /tmail-backend/mailets/src/test/resources/ics/no_event.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | END:VCALENDAR 8 | -------------------------------------------------------------------------------- /tmail-backend/plugins/mail-reporting/sample_conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/plugins/mail-reporting/src/test/resources/domainlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | false 23 | false 24 | 25 | -------------------------------------------------------------------------------- /tmail-backend/plugins/mail-reporting/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/plugins/mail-reporting/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/plugins/mail-reporting/src/test/resources/mailrepositorystore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | cassandra 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /tmail-backend/plugins/mail-reporting/src/test/resources/webadmin.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | 18 | # This template file can be used as example for James Server configuration 19 | # DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS 20 | 21 | # Read https://james.apache.org/server/config-webadmin.html for further details 22 | 23 | enabled=true 24 | port=0 25 | host=127.0.0.1 26 | 27 | extensions.routes=com.linagora.tmail.route.MailReportsRoute 28 | 29 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/AIBotMailet.adoc: -------------------------------------------------------------------------------- 1 | = AIBotMailet 2 | 3 | `AIBotMailet` is a mailet designed to automatically reply to emails sent to a specific recipient (e.g., gpt@linagora.com). It uses the OpenAI API by default but can be configured to use any LLM API supported by https://github.com/langchain4j/[langchain4j]. 4 | 5 | == Configuration Example 6 | 7 | [source,xml] 8 | ---- 9 | 10 | {put you api key here} 11 | gpt@tmail.com 12 | linagoras-chitchat 13 | https://ai.linagora.com/api 14 | 15 | ---- 16 | 17 | === Parameters 18 | 19 | The mailet configuration requires the following parameters: 20 | 21 | * `apiKey`: The API key for accessing the LLM API service. 22 | * `botAddress`: The email address used to send replies generated by the LLM model. 23 | * `baseURL`: The URL of an LLM API compatible with OpenAI .e.g. https://ai.linagora.com/api. Optional. Defaults to the official OpenAI API base url. 24 | * `model`: The OpenAI LLM model to be used. Optional. Defaults to `gpt-3.5-turbo` by langchain4j. You can use the `gpt-4o-mini` model and `demo` API key for testing purpose. 25 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/RecipientsContain.adoc: -------------------------------------------------------------------------------- 1 | === RecipientsContain 2 | 3 | `RecipientsContain` is a matcher that checks if the recipients of an email include all the addresses specified in the match condition. 4 | 5 | This matcher will return all recipients of the email if all specified addresses are present among the recipients. Otherwise, it returns an empty list. 6 | 7 | == Configuration Example 8 | 9 | [source,xml] 10 | ---- 11 | 12 | 13 | ---- -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/sample_conf/ai.properties: -------------------------------------------------------------------------------- 1 | apiKey=demo 2 | botAddress=gpt@localhost 3 | model=lucie-7b-instruct-v1.1 4 | baseURL=https://chat.lucie.exemple.com -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/sample_conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/src/test/resources/ai.properties: -------------------------------------------------------------------------------- 1 | apiKey=demo 2 | botAddress=gpt@localhost 3 | model=lucie-7b-instruct-v1.1 4 | baseURL=https://chat.lucie.exemple.com -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/ai-bot/src/test/resources/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linagora/tmail-backend/15c5f79c3fd2028ceb32a194ba2b03a183f33107/tmail-backend/tmail-third-party/ai-bot/src/test/resources/keystore -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/sample_conf/jwt_publickey: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFdwYS0gR7gKRxjZariH 3 | M83LwznNB6KnMwE7DOwnkadklInIqMZSLS9qurShk7CtcwnDPrisNcncXQBg8aQQ 4 | +pKiHpf0Lrv3UXfB+j/3+B69DjsRgoHO/BWL42OoHGz7Wjpg/bv0TEaj+vebPw64 5 | j8Tw2MwOfMkR+zZYcycprYaGRLcCC/0rmentobqpyXQtdcBCYJMMJCjt8dNWPOFd 6 | sthHUQr2+Y/RDpAguQuExqY70n3w/+JnI/mdlTU8UFdCna5TcYQcMBRGy00NgeYS 7 | JB9iDQz+rm5MSXl5md4l8sPojSrQVHn/WWryJOJWSymDY2Vl9ngYNnKJE6e+faEa 8 | BwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/script_create_sample_data_for_docker_compose.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SERVER_URL="http://tmail-backend.local:8000" 4 | PASSWORD="secret" 5 | 6 | # Loop through users from user1 to user9 7 | for i in $(seq 1 9); do 8 | USER="user$i@open-paas.org" 9 | curl -X PUT "$SERVER_URL/users/$USER" \ 10 | -H "Content-Type: application/json" \ 11 | -d "{\"password\":\"$PASSWORD\"}" 12 | done 13 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/CALENDARS_CONTAINING_ONLY_INBOX_OUTBOX.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | /calendars/ALICE_ID/inbox/ 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | HTTP/1.1 200 OK 12 | 13 | 14 | 15 | /calendars/ALICE_ID/outbox/ 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | HTTP/1.1 200 OK 24 | 25 | 26 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/EMPTY_MULTISTATUS_RESPONSE.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/aliceInviteBob.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:REQUEST 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:20170106T115036Z 10 | DTSTAMP:20170106T115036Z 11 | DTSTART:20170111T090000Z 12 | DURATION:PT1H30M 13 | TZID:Asia/Ho_Chi_Minh 14 | TRANSP:OPAQUE 15 | SEQUENCE:0 16 | SUMMARY:Sprint planning #23 17 | DESCRIPTION: description 123 18 | CLASS:PUBLIC 19 | PRIORITY:5 20 | ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:alice@james.org 21 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 22 | LOCATION:Hangout 23 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1,2;UNTIL=20240111T090000Z 24 | EXRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=MO;BYSETPOS=1;UNTIL=20230111T090000Z 25 | CATEGORIES: 26 | UID:ea127690-0440-404b-af98-9823c855a283 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:another@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:bob@james.org 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/template/emailWithAliceInviteBob.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/aliceInviteBob.ics.mustache}}{{/base64Encode}} 24 | 25 | --------------D24E361990BDBA143D4D8794 26 | Content-Type: application/ics; name=meeting.ics 27 | Content-Disposition: attachment; filename=meeting.ics 28 | Content-Transfer-Encoding: base64 29 | 30 | {{#base64Encode}}{{>ics/aliceInviteBob.ics.mustache}}{{/base64Encode}} 31 | --------------D24E361990BDBA143D4D8794-- -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/template/emailWithRecurrenceId.eml.mustache: -------------------------------------------------------------------------------- 1 | To: {{receiver.name}} <{{receiver.email}}> 2 | From: {{sender.name}} <{{sender.email}}> 3 | Subject: Event Invitation from {{sender.name}} 4 | Message-ID: {{mimeMessageId}} 5 | Date: Tue, 5 Sep 2017 09:54:16 +0200 6 | MIME-Version: 1.0 7 | Content-Type: multipart/mixed; 8 | boundary="------------D24E361990BDBA143D4D8794" 9 | Content-Language: en-US 10 | 11 | This is a multi-part message in MIME format. 12 | --------------D24E361990BDBA143D4D8794 13 | Content-Type: text/plain; charset=utf-8; format=flowed 14 | Content-Transfer-Encoding: 7bit 15 | 16 | The message has a text attachment. 17 | 18 | --------------D24E361990BDBA143D4D8794 19 | Content-Type: text/calendar; charset=UTF-8; method=REQUEST 20 | Content-Disposition: attachment; 21 | Content-Transfer-Encoding: base64 22 | 23 | {{#base64Encode}}{{>ics/recurrenceId.ics.mustache}}{{/base64Encode}} 24 | 25 | --------------D24E361990BDBA143D4D8794 26 | Content-Type: application/ics; name=meeting.ics 27 | Content-Disposition: attachment; filename=meeting.ics 28 | Content-Transfer-Encoding: base64 29 | 30 | {{#base64Encode}}{{>ics/recurrenceId.ics.mustache}}{{/base64Encode}} 31 | --------------D24E361990BDBA143D4D8794-- -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/template/ics/aliceInviteBob.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:{{method}} 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:{{lastModified}} 10 | DTSTAMP:{{dtStamp}} 11 | DTSTART:20170111T090000Z 12 | DTEND:20170111T100000Z 13 | DURATION:PT1H30M 14 | TZID:Asia/Ho_Chi_Minh 15 | TRANSP:OPAQUE 16 | SEQUENCE:{{sequence}} 17 | SUMMARY:Sprint planning #23 18 | DESCRIPTION: description 123 19 | CLASS:PUBLIC 20 | PRIORITY:5 21 | ORGANIZER;X-OBM-ID=128;CN={{sender.name}}:MAILTO:{{sender.email}} 22 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 23 | LOCATION:{{location}} 24 | RRULE:FREQ=DAILY;COUNT=3 25 | CATEGORIES: 26 | UID:{{calendarUid}} 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:another@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:{{receiver.email}} 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/tmail-third-party/openpaas/src/test/resources/template/ics/recurrenceId.ics.mustache: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR 3 | CALSCALE:GREGORIAN 4 | X-OBM-TIME:1483703436 5 | VERSION:2.0 6 | METHOD:{{method}} 7 | BEGIN:VEVENT 8 | CREATED:20170106T115035Z 9 | LAST-MODIFIED:{{lastModified}} 10 | DTSTAMP:{{dtStamp}} 11 | DTSTART:{{dtStart}} 12 | DTEND:{{dtEnd}} 13 | DURATION:PT1H30M 14 | TZID:Asia/Ho_Chi_Minh 15 | TRANSP:OPAQUE 16 | SEQUENCE:{{sequence}} 17 | SUMMARY:Sprint planning #23 18 | DESCRIPTION: description 123 19 | CLASS:PUBLIC 20 | PRIORITY:5 21 | ORGANIZER;X-OBM-ID=128;CN={{sender.name}}:MAILTO:{{sender.email}} 22 | X-OPENPAAS-VIDEOCONFERENCE:https://jitsi.linagora.com/abcd 23 | LOCATION:{{location}} 24 | RECURRENCE-ID:{{recurrenceId}} 25 | CATEGORIES: 26 | UID:{{calendarUid}} 27 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=ADMIN;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE 28 | DS-ACTION;X-OBM-ID=302:MAILTO:another@domain.tld 29 | ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN={{receiver.name}};PARTSTAT=NEEDS-ACTION; 30 | X-OBM-ID=723:MAILTO:{{receiver.email}} 31 | STATUS:CONFIRMED 32 | END:VEVENT 33 | END:VCALENDAR 34 | -------------------------------------------------------------------------------- /tmail-backend/webadmin/webadmin-mailbox/src/test/resources/json/inboxArchivalTask.additionalInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "archivedMessageCount": 4, 3 | "errorMessageCount": 2, 4 | "successfulUsersCount": 1, 5 | "failedUsersCount": 1, 6 | "failedUsers": ["bob@domain.tld"], 7 | "timestamp": "2007-12-03T10:15:30Z", 8 | "type": "InboxArchivalTask" 9 | } -------------------------------------------------------------------------------- /tmail-backend/webadmin/webadmin-team-mailboxes/src/test/resources/json/recompute_quota_team_mailboxes.additionalInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "recompute-quota-team-mailboxes", 3 | "timestamp": "2007-12-03T10:15:30Z", 4 | "domain": "linagora.com", 5 | "processedQuotaRoots": 1, 6 | "failedQuotaRoots": [ 7 | "#TeamMailbox&marketing@abc.com@abc.com", 8 | "#TeamMailbox&sale@xyz.com@xyz.com" 9 | ] 10 | } -------------------------------------------------------------------------------- /tmail-backend/webadmin/webadmin-team-mailboxes/src/test/resources/json/recompute_quota_team_mailboxes.task.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "recompute-quota-team-mailboxes", 3 | "domain": "linagora.com" 4 | } --------------------------------------------------------------------------------