Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60c29b6e authored by cketti's avatar cketti
Browse files

Merge branch 'main' into message-view-redesign

parents d73240d6 4d070167
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -4,13 +4,7 @@ import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ConnectionSecurity

interface ConnectionSettingsDiscovery {
    fun discover(email: String, target: DiscoveryTarget): DiscoveryResults?
}

enum class DiscoveryTarget(val outgoing: Boolean, val incoming: Boolean) {
    OUTGOING(true, false),
    INCOMING(false, true),
    INCOMING_AND_OUTGOING(true, true)
    fun discover(email: String): DiscoveryResults?
}

data class DiscoveryResults(val incoming: List<DiscoveredServerSettings>, val outgoing: List<DiscoveredServerSettings>)
+1 −2
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ import android.net.Uri
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
import com.fsck.k9.autodiscovery.api.DiscoveryResults
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
import com.fsck.k9.helper.EmailHelper
import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ConnectionSecurity
@@ -19,7 +18,7 @@ class ProvidersXmlDiscovery(
    private val oAuthConfigurationProvider: OAuthConfigurationProvider
) : ConnectionSettingsDiscovery {

    override fun discover(email: String, target: DiscoveryTarget): DiscoveryResults? {
    override fun discover(email: String): DiscoveryResults? {
        val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null

        val provider = findProviderForDomain(domain) ?: return null
+2 −3
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ package com.fsck.k9.autodiscovery.providersxml

import androidx.test.core.app.ApplicationProvider
import com.fsck.k9.RobolectricTest
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ConnectionSecurity
import com.fsck.k9.oauth.OAuthConfiguration
@@ -17,7 +16,7 @@ class ProvidersXmlDiscoveryTest : RobolectricTest() {

    @Test
    fun discover_withGmailDomain_shouldReturnCorrectSettings() {
        val connectionSettings = providersXmlDiscovery.discover("user@gmail.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
        val connectionSettings = providersXmlDiscovery.discover("user@gmail.com")

        assertThat(connectionSettings).isNotNull()
        with(connectionSettings!!.incoming.first()) {
@@ -37,7 +36,7 @@ class ProvidersXmlDiscoveryTest : RobolectricTest() {
    @Test
    fun discover_withUnknownDomain_shouldReturnNull() {
        val connectionSettings = providersXmlDiscovery.discover(
            "user@not.present.in.providers.xml.example", DiscoveryTarget.INCOMING_AND_OUTGOING
            "user@not.present.in.providers.xml.example"
        )

        assertThat(connectionSettings).isNull()
+9 −10
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package com.fsck.k9.autodiscovery.srvrecords
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
import com.fsck.k9.autodiscovery.api.DiscoveryResults
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
import com.fsck.k9.helper.EmailHelper
import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ConnectionSecurity
@@ -12,19 +11,19 @@ class SrvServiceDiscovery(
    private val srvResolver: MiniDnsSrvResolver
) : ConnectionSettingsDiscovery {

    override fun discover(email: String, target: DiscoveryTarget): DiscoveryResults? {
    override fun discover(email: String): DiscoveryResults? {
        val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null
        val mailServicePriority = compareBy<MailService> { it.priority }.thenByDescending { it.security }

        val outgoingSettings = if (target.outgoing)
            listOf(SrvType.SUBMISSIONS, SrvType.SUBMISSION).flatMap { srvResolver.lookup(domain, it) }
                .sortedWith(mailServicePriority).map { newServerSettings(it, email) }
        else listOf()
        val outgoingSettings = listOf(SrvType.SUBMISSIONS, SrvType.SUBMISSION)
            .flatMap { srvResolver.lookup(domain, it) }
            .sortedWith(mailServicePriority)
            .map { newServerSettings(it, email) }

        val incomingSettings = if (target.incoming)
            listOf(SrvType.IMAPS, SrvType.IMAP).flatMap { srvResolver.lookup(domain, it) }
                .sortedWith(mailServicePriority).map { newServerSettings(it, email) }
        else listOf()
        val incomingSettings = listOf(SrvType.IMAPS, SrvType.IMAP)
            .flatMap { srvResolver.lookup(domain, it) }
            .sortedWith(mailServicePriority)
            .map { newServerSettings(it, email) }

        return DiscoveryResults(incoming = incomingSettings, outgoing = outgoingSettings)
    }
+4 −56
Original line number Diff line number Diff line
package com.fsck.k9.autodiscovery.srvrecords

import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
import com.fsck.k9.autodiscovery.api.DiscoveryResults
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
import com.fsck.k9.mail.ConnectionSecurity
import org.junit.Assert.assertEquals
import org.junit.Test
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoMoreInteractions

class SrvServiceDiscoveryTest {

@@ -18,7 +14,7 @@ class SrvServiceDiscoveryTest {
        val srvResolver = newMockSrvResolver()

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
        val result = srvServiceDiscovery.discover("test@example.com")

        assertEquals(DiscoveryResults(listOf(), listOf()), result)
    }
@@ -33,7 +29,7 @@ class SrvServiceDiscoveryTest {
        )

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
        val result = srvServiceDiscovery.discover("test@example.com")

        assertEquals(2, result!!.incoming.size)
        assertEquals(0, result.outgoing.size)
@@ -57,7 +53,7 @@ class SrvServiceDiscoveryTest {
        )

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
        val result = srvServiceDiscovery.discover("test@example.com")

        assertEquals(0, result!!.incoming.size)
        assertEquals(2, result.outgoing.size)
@@ -133,7 +129,7 @@ class SrvServiceDiscoveryTest {
        )

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
        val result = srvServiceDiscovery.discover("test@example.com")

        assertEquals(
            listOf(
@@ -155,54 +151,6 @@ class SrvServiceDiscoveryTest {
        )
    }

    @Test
    fun discover_whenOnlyOutgoingTrue_shouldOnlyFetchOutgoing() {
        val srvResolver = newMockSrvResolver(
            submissionServices = listOf(
                newMailService(
                    host = "smtp.example.com",
                    port = 465,
                    srvType = SrvType.SUBMISSIONS,
                    security = ConnectionSecurity.SSL_TLS_REQUIRED,
                    priority = 0
                )
            )
        )

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.OUTGOING)

        verify(srvResolver).lookup("example.com", SrvType.SUBMISSIONS)
        verify(srvResolver).lookup("example.com", SrvType.SUBMISSION)
        verifyNoMoreInteractions(srvResolver)
        assertEquals(1, result!!.outgoing.size)
        assertEquals(listOf<DiscoveredServerSettings>(), result.incoming)
    }

    @Test
    fun discover_whenOnlyIncomingTrue_shouldOnlyFetchIncoming() {
        val srvResolver = newMockSrvResolver(
            imapsServices = listOf(
                newMailService(
                    host = "imaps.example.com",
                    port = 993,
                    srvType = SrvType.IMAPS,
                    security = ConnectionSecurity.SSL_TLS_REQUIRED,
                    priority = 0
                )
            )
        )

        val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
        val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING)

        verify(srvResolver).lookup("example.com", SrvType.IMAPS)
        verify(srvResolver).lookup("example.com", SrvType.IMAP)
        verifyNoMoreInteractions(srvResolver)
        assertEquals(1, result!!.incoming.size)
        assertEquals(listOf<DiscoveredServerSettings>(), result.outgoing)
    }

    private fun newMailService(
        host: String = "example.com",
        priority: Int = 0,
Loading