Remove DiscoveryTarget
This commit is contained in:
parent
35b380a97d
commit
880b4d88b1
7 changed files with 19 additions and 82 deletions
|
@ -4,13 +4,7 @@ import com.fsck.k9.mail.AuthType
|
||||||
import com.fsck.k9.mail.ConnectionSecurity
|
import com.fsck.k9.mail.ConnectionSecurity
|
||||||
|
|
||||||
interface ConnectionSettingsDiscovery {
|
interface ConnectionSettingsDiscovery {
|
||||||
fun discover(email: String, target: DiscoveryTarget): DiscoveryResults?
|
fun discover(email: String): DiscoveryResults?
|
||||||
}
|
|
||||||
|
|
||||||
enum class DiscoveryTarget(val outgoing: Boolean, val incoming: Boolean) {
|
|
||||||
OUTGOING(true, false),
|
|
||||||
INCOMING(false, true),
|
|
||||||
INCOMING_AND_OUTGOING(true, true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data class DiscoveryResults(val incoming: List<DiscoveredServerSettings>, val outgoing: List<DiscoveredServerSettings>)
|
data class DiscoveryResults(val incoming: List<DiscoveredServerSettings>, val outgoing: List<DiscoveredServerSettings>)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.net.Uri
|
||||||
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
import com.fsck.k9.helper.EmailHelper
|
import com.fsck.k9.helper.EmailHelper
|
||||||
import com.fsck.k9.mail.AuthType
|
import com.fsck.k9.mail.AuthType
|
||||||
import com.fsck.k9.mail.ConnectionSecurity
|
import com.fsck.k9.mail.ConnectionSecurity
|
||||||
|
@ -19,7 +18,7 @@ class ProvidersXmlDiscovery(
|
||||||
private val oAuthConfigurationProvider: OAuthConfigurationProvider
|
private val oAuthConfigurationProvider: OAuthConfigurationProvider
|
||||||
) : ConnectionSettingsDiscovery {
|
) : ConnectionSettingsDiscovery {
|
||||||
|
|
||||||
override fun discover(email: String, target: DiscoveryTarget): DiscoveryResults? {
|
override fun discover(email: String): DiscoveryResults? {
|
||||||
val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null
|
val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null
|
||||||
|
|
||||||
val provider = findProviderForDomain(domain) ?: return null
|
val provider = findProviderForDomain(domain) ?: return null
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.fsck.k9.autodiscovery.providersxml
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import com.fsck.k9.RobolectricTest
|
import com.fsck.k9.RobolectricTest
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
import com.fsck.k9.mail.AuthType
|
import com.fsck.k9.mail.AuthType
|
||||||
import com.fsck.k9.mail.ConnectionSecurity
|
import com.fsck.k9.mail.ConnectionSecurity
|
||||||
import com.fsck.k9.oauth.OAuthConfiguration
|
import com.fsck.k9.oauth.OAuthConfiguration
|
||||||
|
@ -17,7 +16,7 @@ class ProvidersXmlDiscoveryTest : RobolectricTest() {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun discover_withGmailDomain_shouldReturnCorrectSettings() {
|
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()
|
assertThat(connectionSettings).isNotNull()
|
||||||
with(connectionSettings!!.incoming.first()) {
|
with(connectionSettings!!.incoming.first()) {
|
||||||
|
@ -37,7 +36,7 @@ class ProvidersXmlDiscoveryTest : RobolectricTest() {
|
||||||
@Test
|
@Test
|
||||||
fun discover_withUnknownDomain_shouldReturnNull() {
|
fun discover_withUnknownDomain_shouldReturnNull() {
|
||||||
val connectionSettings = providersXmlDiscovery.discover(
|
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()
|
assertThat(connectionSettings).isNull()
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.fsck.k9.autodiscovery.srvrecords
|
||||||
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
import com.fsck.k9.helper.EmailHelper
|
import com.fsck.k9.helper.EmailHelper
|
||||||
import com.fsck.k9.mail.AuthType
|
import com.fsck.k9.mail.AuthType
|
||||||
import com.fsck.k9.mail.ConnectionSecurity
|
import com.fsck.k9.mail.ConnectionSecurity
|
||||||
|
@ -12,19 +11,19 @@ class SrvServiceDiscovery(
|
||||||
private val srvResolver: MiniDnsSrvResolver
|
private val srvResolver: MiniDnsSrvResolver
|
||||||
) : ConnectionSettingsDiscovery {
|
) : ConnectionSettingsDiscovery {
|
||||||
|
|
||||||
override fun discover(email: String, target: DiscoveryTarget): DiscoveryResults? {
|
override fun discover(email: String): DiscoveryResults? {
|
||||||
val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null
|
val domain = EmailHelper.getDomainFromEmailAddress(email) ?: return null
|
||||||
val mailServicePriority = compareBy<MailService> { it.priority }.thenByDescending { it.security }
|
val mailServicePriority = compareBy<MailService> { it.priority }.thenByDescending { it.security }
|
||||||
|
|
||||||
val outgoingSettings = if (target.outgoing)
|
val outgoingSettings = listOf(SrvType.SUBMISSIONS, SrvType.SUBMISSION)
|
||||||
listOf(SrvType.SUBMISSIONS, SrvType.SUBMISSION).flatMap { srvResolver.lookup(domain, it) }
|
.flatMap { srvResolver.lookup(domain, it) }
|
||||||
.sortedWith(mailServicePriority).map { newServerSettings(it, email) }
|
.sortedWith(mailServicePriority)
|
||||||
else listOf()
|
.map { newServerSettings(it, email) }
|
||||||
|
|
||||||
val incomingSettings = if (target.incoming)
|
val incomingSettings = listOf(SrvType.IMAPS, SrvType.IMAP)
|
||||||
listOf(SrvType.IMAPS, SrvType.IMAP).flatMap { srvResolver.lookup(domain, it) }
|
.flatMap { srvResolver.lookup(domain, it) }
|
||||||
.sortedWith(mailServicePriority).map { newServerSettings(it, email) }
|
.sortedWith(mailServicePriority)
|
||||||
else listOf()
|
.map { newServerSettings(it, email) }
|
||||||
|
|
||||||
return DiscoveryResults(incoming = incomingSettings, outgoing = outgoingSettings)
|
return DiscoveryResults(incoming = incomingSettings, outgoing = outgoingSettings)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
package com.fsck.k9.autodiscovery.srvrecords
|
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.DiscoveryResults
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
import com.fsck.k9.mail.ConnectionSecurity
|
import com.fsck.k9.mail.ConnectionSecurity
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.mockito.kotlin.doReturn
|
import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
import org.mockito.kotlin.verify
|
|
||||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
|
||||||
|
|
||||||
class SrvServiceDiscoveryTest {
|
class SrvServiceDiscoveryTest {
|
||||||
|
|
||||||
|
@ -18,7 +14,7 @@ class SrvServiceDiscoveryTest {
|
||||||
val srvResolver = newMockSrvResolver()
|
val srvResolver = newMockSrvResolver()
|
||||||
|
|
||||||
val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
|
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)
|
assertEquals(DiscoveryResults(listOf(), listOf()), result)
|
||||||
}
|
}
|
||||||
|
@ -33,7 +29,7 @@ class SrvServiceDiscoveryTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
|
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(2, result!!.incoming.size)
|
||||||
assertEquals(0, result.outgoing.size)
|
assertEquals(0, result.outgoing.size)
|
||||||
|
@ -57,7 +53,7 @@ class SrvServiceDiscoveryTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
|
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(0, result!!.incoming.size)
|
||||||
assertEquals(2, result.outgoing.size)
|
assertEquals(2, result.outgoing.size)
|
||||||
|
@ -133,7 +129,7 @@ class SrvServiceDiscoveryTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
|
val srvServiceDiscovery = SrvServiceDiscovery(srvResolver)
|
||||||
val result = srvServiceDiscovery.discover("test@example.com", DiscoveryTarget.INCOMING_AND_OUTGOING)
|
val result = srvServiceDiscovery.discover("test@example.com")
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
listOf(
|
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(
|
private fun newMailService(
|
||||||
host: String = "example.com",
|
host: String = "example.com",
|
||||||
priority: Int = 0,
|
priority: Int = 0,
|
||||||
|
|
|
@ -2,14 +2,13 @@ package com.fsck.k9.autodiscovery.thunderbird
|
||||||
|
|
||||||
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
import com.fsck.k9.autodiscovery.api.ConnectionSettingsDiscovery
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
import com.fsck.k9.autodiscovery.api.DiscoveryResults
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
|
|
||||||
class ThunderbirdDiscovery(
|
class ThunderbirdDiscovery(
|
||||||
private val fetcher: ThunderbirdAutoconfigFetcher,
|
private val fetcher: ThunderbirdAutoconfigFetcher,
|
||||||
private val parser: ThunderbirdAutoconfigParser
|
private val parser: ThunderbirdAutoconfigParser
|
||||||
) : ConnectionSettingsDiscovery {
|
) : ConnectionSettingsDiscovery {
|
||||||
|
|
||||||
override fun discover(email: String, target: DiscoveryTarget): DiscoveryResults? {
|
override fun discover(email: String): DiscoveryResults? {
|
||||||
val autoconfigInputStream = fetcher.fetchAutoconfigFile(email) ?: return null
|
val autoconfigInputStream = fetcher.fetchAutoconfigFile(email) ?: return null
|
||||||
|
|
||||||
return autoconfigInputStream.use {
|
return autoconfigInputStream.use {
|
||||||
|
|
|
@ -17,7 +17,6 @@ import com.fsck.k9.Preferences
|
||||||
import com.fsck.k9.account.AccountCreator
|
import com.fsck.k9.account.AccountCreator
|
||||||
import com.fsck.k9.activity.setup.AccountSetupCheckSettings.CheckDirection
|
import com.fsck.k9.activity.setup.AccountSetupCheckSettings.CheckDirection
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings
|
||||||
import com.fsck.k9.autodiscovery.api.DiscoveryTarget
|
|
||||||
import com.fsck.k9.autodiscovery.providersxml.ProvidersXmlDiscovery
|
import com.fsck.k9.autodiscovery.providersxml.ProvidersXmlDiscovery
|
||||||
import com.fsck.k9.helper.SimpleTextWatcher
|
import com.fsck.k9.helper.SimpleTextWatcher
|
||||||
import com.fsck.k9.helper.Utility.requiredFieldValid
|
import com.fsck.k9.helper.Utility.requiredFieldValid
|
||||||
|
@ -311,7 +310,7 @@ class AccountSetupBasics : K9Activity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun providersXmlDiscoveryDiscover(email: String): ConnectionSettings? {
|
private fun providersXmlDiscoveryDiscover(email: String): ConnectionSettings? {
|
||||||
val discoveryResults = providersXmlDiscovery.discover(email, DiscoveryTarget.INCOMING_AND_OUTGOING)
|
val discoveryResults = providersXmlDiscovery.discover(email)
|
||||||
if (discoveryResults == null || discoveryResults.incoming.isEmpty() || discoveryResults.outgoing.isEmpty()) {
|
if (discoveryResults == null || discoveryResults.incoming.isEmpty() || discoveryResults.outgoing.isEmpty()) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue