diff --git a/app/core/src/main/java/com/fsck/k9/OsAccountManagerUtil.kt b/app/core/src/main/java/com/fsck/k9/OsAccountManagerUtil.kt index b1401bde172be79bd5dcf67e1e5e7a17fe5ae077..d498bef95e9186969f8c6512fba6aee4d6ed7425 100644 --- a/app/core/src/main/java/com/fsck/k9/OsAccountManagerUtil.kt +++ b/app/core/src/main/java/com/fsck/k9/OsAccountManagerUtil.kt @@ -23,6 +23,8 @@ import android.content.Context import app.k9mail.core.android.common.accountmanager.AccountManagerConstants import timber.log.Timber +import com.fsck.k9.Account as K9Account + object OsAccountManagerUtil { /** @@ -83,4 +85,23 @@ object OsAccountManagerUtil { fun isAccountFound() = this != ACCOUNT_NOT_FOUND } + + fun isMurenaEmailAccount(account: K9Account): Boolean { + val incoming = account.incomingServerSettings + val outgoing = account.outgoingServerSettings + + if (incoming.host == null || outgoing.host == null) { + return false + } + + return isMurenaMailHost(incoming.host!!) && isMurenaMailHost(outgoing.host!!) + } + + private fun isMurenaMailHost(host: String): Boolean { + return "mail.ecloud.global" == host + } + + fun isMurenaWebHostUrl(host: String): Boolean { + return host.contains("https://murena.io") || host.contains("http://murena.io") + } } diff --git a/app/core/src/main/java/com/fsck/k9/controller/MessagingController.java b/app/core/src/main/java/com/fsck/k9/controller/MessagingController.java index 1cc0eb0256e3bc263be072b91872ba0f3878c9e3..c8d6e5322a3349258b5d2eb89cb72b4e2d938fc7 100644 --- a/app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +++ b/app/core/src/main/java/com/fsck/k9/controller/MessagingController.java @@ -35,6 +35,7 @@ import com.fsck.k9.Account.DeletePolicy; import com.fsck.k9.Account.Expunge; import com.fsck.k9.DI; import com.fsck.k9.K9; +import com.fsck.k9.OsAccountManagerUtil; import com.fsck.k9.Preferences; import com.fsck.k9.backend.BackendManager; import com.fsck.k9.backend.api.Backend; @@ -671,34 +672,40 @@ public class MessagingController { } private boolean updatePassword(Account account) { + if (!OsAccountManagerUtil.INSTANCE.isMurenaEmailAccount(account)) return false; + AccountManager accountManager = AccountManager.get(context); + android.accounts.Account[] eeloAccounts = + accountManager.getAccountsByType(AccountManagerConstants.EELO_ACCOUNT_TYPE); - for (String accountType : AccountManagerConstants.INSTANCE.getALL_ACCOUNT_TYPES()) { - for (android.accounts.Account deviceAccount : accountManager.getAccountsByType(accountType)) { - // Check if the account email matches with account manager - String emailId = accountManager.getUserData(deviceAccount, - AccountManagerConstants.ACCOUNT_EMAIL_ADDRESS_KEY); - if (emailId != null && !emailId.equalsIgnoreCase(account.getEmail())) { - continue; - } + for (android.accounts.Account deviceAccount : eeloAccounts) { + String hostUrl = accountManager.getUserData(deviceAccount, AccountManagerConstants.KEY_OC_BASE_URL); + if (hostUrl == null || !OsAccountManagerUtil.INSTANCE.isMurenaWebHostUrl(hostUrl)) { + continue; + } + // Check if the account email matches with account manager + String emailId = accountManager.getUserData(deviceAccount, + AccountManagerConstants.ACCOUNT_EMAIL_ADDRESS_KEY); + if (emailId != null && !emailId.equalsIgnoreCase(account.getEmail())) { + continue; + } - ServerSettings incoming = account.getIncomingServerSettings(); - ServerSettings outgoing = account.getOutgoingServerSettings(); + ServerSettings incoming = account.getIncomingServerSettings(); + ServerSettings outgoing = account.getOutgoingServerSettings(); - // Only set if its plain password - if (incoming.authenticationType != AuthType.PLAIN - && outgoing.authenticationType != AuthType.PLAIN) { - continue; - } + // Only set if its plain password + if (incoming.authenticationType != AuthType.PLAIN + && outgoing.authenticationType != AuthType.PLAIN) { + continue; + } - // Update incoming and outgoing server settings - String password = accountManager.getPassword(deviceAccount); - if (password != null && (!password.equals(incoming.password) || !password.equals(outgoing.password))) { - account.setIncomingServerSettings(incoming.newPassword(password)); - account.setOutgoingServerSettings(outgoing.newPassword(password)); - preferences.saveAccount(account); - return true; - } + // Update incoming and outgoing server settings + String password = accountManager.getPassword(deviceAccount); + if (password != null && (!password.equals(incoming.password) || !password.equals(outgoing.password))) { + account.setIncomingServerSettings(incoming.newPassword(password)); + account.setOutgoingServerSettings(outgoing.newPassword(password)); + preferences.saveAccount(account); + return true; } } diff --git a/app/k9mail/build.gradle.kts b/app/k9mail/build.gradle.kts index 38d5b49094716b4b09bc2b8bbdd9c346c2890f0c..70893a881a41183500739baa5348dea12272da85 100644 --- a/app/k9mail/build.gradle.kts +++ b/app/k9mail/build.gradle.kts @@ -65,8 +65,8 @@ android { applicationId = "foundation.e.mail" testApplicationId = "foundation.e.mail.tests" - versionCode = 37020 - versionName = "6.711-1" + versionCode = 37021 + versionName = "6.711-2" // Keep in sync with the resource string array "supported_languages" resourceConfigurations.addAll( diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/accountmanager/EeloAccountCreator.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/accountmanager/EeloAccountCreator.java index e50152166be0ff1f436659b8f101537aa7534178..1de5ccc09ff2ec9a3d2266a524f273a4916012f4 100644 --- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/accountmanager/EeloAccountCreator.java +++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/accountmanager/EeloAccountCreator.java @@ -37,6 +37,7 @@ import com.fsck.k9.Account; import com.fsck.k9.Account.DeletePolicy; import com.fsck.k9.Core; import com.fsck.k9.DI; +import com.fsck.k9.OsAccountManagerUtil; import com.fsck.k9.Preferences; import com.fsck.k9.account.AccountCreatorHelper; import com.fsck.k9.account.BackgroundAccountRemover; @@ -140,6 +141,9 @@ public class EeloAccountCreator { } private static void updatePasswordIfChanged(Account account, String password) { + // Don't update password if its not a murena account + if (!OsAccountManagerUtil.INSTANCE.isMurenaEmailAccount(account)) return; + ServerSettings incoming = account.getIncomingServerSettings(); ServerSettings outgoing = account.getOutgoingServerSettings(); @@ -170,6 +174,11 @@ public class EeloAccountCreator { accountManager.getAccountsByType(AccountManagerConstants.EELO_ACCOUNT_TYPE); for (android.accounts.Account eeloAccount : eeloAccounts) { final String emailId = getEmailId(accountManager, eeloAccount); + String hostUrl = accountManager.getUserData(eeloAccount, AccountManagerConstants.KEY_OC_BASE_URL); + // We are trying to add account that are not murena. + if (hostUrl == null || !OsAccountManagerUtil.INSTANCE.isMurenaWebHostUrl(hostUrl)) { + continue; + } if (isInvalidEmail(emailId)) { continue; diff --git a/core/android/common/src/main/kotlin/app/k9mail/core/android/common/accountmanager/AccountManagerConstants.kt b/core/android/common/src/main/kotlin/app/k9mail/core/android/common/accountmanager/AccountManagerConstants.kt index 286deefbd8711caf818d121f3f53a8f1c4f5317e..5bf742a098e49e2c40d2aa732f50936c64062861 100644 --- a/core/android/common/src/main/kotlin/app/k9mail/core/android/common/accountmanager/AccountManagerConstants.kt +++ b/core/android/common/src/main/kotlin/app/k9mail/core/android/common/accountmanager/AccountManagerConstants.kt @@ -25,6 +25,7 @@ object AccountManagerConstants { const val AUTH_TOKEN_TYPE = "oauth2-access-token" const val KEY_AUTH_STATE = "auth_state" const val USERNAME_HINT = "userNameHint" + const val KEY_OC_BASE_URL = "oc_base_url" const val OPEN_APP_PACKAGE_AFTER_AUTH = "open_app_package_after_auth" const val OPEN_APP_ACTIVITY_AFTER_AUTH = "open_app_activity_after_auth"