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

Unverified Commit c35876a3 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #5113 from k9mail/refactor_server_settings

Refactor ServerSettings
parents 43af24f3 69ed32ff
Loading
Loading
Loading
Loading
+34 −37
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import timber.log.Timber;

import static java.util.Collections.emptyMap;
import static java.util.Collections.unmodifiableMap;


public class SettingsImporter {

@@ -368,7 +371,7 @@ public class SettingsImporter {
        }

        // Write incoming server settings (storeUri)
        ServerSettings incoming = new ImportedServerSettings(account.incoming);
        ServerSettings incoming = createServerSettings(account.incoming);
        BackendManager backendManager = DI.get(BackendManager.class);
        String storeUri = backendManager.createStoreUri(incoming);
        putString(editor, accountKeyPrefix + AccountPreferenceSerializer.STORE_URI_KEY, Base64.encode(storeUri));
@@ -387,7 +390,7 @@ public class SettingsImporter {
        boolean outgoingPasswordNeeded = false;
        if (account.outgoing != null) {
            // Write outgoing server settings (transportUri)
            ServerSettings outgoing = new ImportedServerSettings(account.outgoing);
            ServerSettings outgoing = createServerSettings(account.outgoing);
            String transportUri = backendManager.createTransportUri(outgoing);
            putString(editor, accountKeyPrefix + AccountPreferenceSerializer.TRANSPORT_URI_KEY, Base64.encode(transportUri));

@@ -1053,21 +1056,16 @@ public class SettingsImporter {
        return name;
    }

    private static class ImportedServerSettings extends ServerSettings {
        private final ImportedServer importedServer;

        public ImportedServerSettings(ImportedServer server) {
            super(ServerTypeConverter.toServerSettingsType(server.type), server.host, convertPort(server.port),
                    convertConnectionSecurity(server.connectionSecurity),
                    server.authenticationType, server.username, server.password,
                    server.clientCertificateAlias);
            importedServer = server;
        }
    private static ServerSettings createServerSettings(ImportedServer importedServer) {
        String type = ServerTypeConverter.toServerSettingsType(importedServer.type);
        int port = convertPort(importedServer.port);
        ConnectionSecurity connectionSecurity = convertConnectionSecurity(importedServer.connectionSecurity);
        Map<String, String> extra = importedServer.extras != null ?
                unmodifiableMap(importedServer.extras.settings) : emptyMap();

        @Override
        public Map<String, String> getExtra() {
            return (importedServer.extras != null) ?
                    Collections.unmodifiableMap(importedServer.extras.settings) : null;
        return new ServerSettings(type, importedServer.host, port, connectionSecurity,
                importedServer.authenticationType, importedServer.username, importedServer.password,
                importedServer.clientCertificateAlias, extra);
    }

    private static int convertPort(String port) {
@@ -1095,7 +1093,6 @@ public class SettingsImporter {
            return ConnectionSecurity.SSL_TLS_REQUIRED;
        }
    }
    }

    @VisibleForTesting
    static class Imported {
+13 −3
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ class JmapBackendFactory(
        val serverSettings = decodeStoreUri(account.storeUri)
        val jmapConfig = JmapConfig(
            username = serverSettings.username,
            password = serverSettings.password,
            password = serverSettings.password!!,
            baseUrl = serverSettings.host,
            accountId = serverSettings.extra["accountId"]!!
        )
@@ -34,7 +34,7 @@ class JmapBackendFactory(

    override fun decodeStoreUri(storeUri: String): ServerSettings {
        val uri = Uri.parse(storeUri)
        val username = uri.getQueryParameter("username")
        val username = uri.getQueryParameter("username")!!
        val password = uri.getQueryParameter("password")
        val baseUrl = uri.getQueryParameter("baseUrl")
        val accountId = uri.getQueryParameter("accountId")
@@ -43,7 +43,17 @@ class JmapBackendFactory(
            "accountId" to accountId
        )

        return ServerSettings("jmap", baseUrl, 433, ConnectionSecurity.SSL_TLS_REQUIRED, AuthType.PLAIN, username, password, null, extra)
        return ServerSettings(
            type = "jmap",
            host = baseUrl,
            port = 433,
            connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
            authenticationType = AuthType.PLAIN,
            username = username,
            password = password,
            clientCertificateAlias = null,
            extra = extra
        )
    }

    override fun createStoreUri(serverSettings: ServerSettings): String {
+25 −26
Original line number Diff line number Diff line
@@ -47,13 +47,15 @@ import com.fsck.k9.ui.R;
import com.fsck.k9.view.ClientCertificateSpinner;
import com.fsck.k9.view.ClientCertificateSpinner.OnClientCertificateChangedListener;

import java.util.HashMap;
import java.util.Map;

import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import timber.log.Timber;

import static java.util.Collections.emptyMap;


public class AccountSetupIncoming extends K9Activity implements OnClickListener {
    private static final String EXTRA_ACCOUNT = "account";
    private static final String EXTRA_MAKE_DEFAULT = "makeDefault";
@@ -217,11 +219,12 @@ public class AccountSetupIncoming extends K9Activity implements OnClickListener
            } else if (settings.type.equals(Protocols.IMAP)) {
                serverLayoutView.setHint(getString(R.string.account_setup_incoming_imap_server_label));

                ImapStoreSettings imapSettings = (ImapStoreSettings) settings;
                boolean autoDetectNamespace = ImapStoreSettings.getAutoDetectNamespace(settings);
                String pathPrefix = ImapStoreSettings.getPathPrefix(settings);

                mImapAutoDetectNamespaceView.setChecked(imapSettings.autoDetectNamespace);
                if (imapSettings.pathPrefix != null) {
                    mImapPathPrefixView.setText(imapSettings.pathPrefix);
                mImapAutoDetectNamespaceView.setChecked(autoDetectNamespace);
                if (pathPrefix != null) {
                    mImapPathPrefixView.setText(pathPrefix);
                }

                findViewById(R.id.webdav_advanced_header).setVisibility(View.GONE);
@@ -246,18 +249,19 @@ public class AccountSetupIncoming extends K9Activity implements OnClickListener
                findViewById(R.id.compression_label).setVisibility(View.GONE);
                mSubscribedFoldersOnly.setVisibility(View.GONE);

                WebDavStoreSettings webDavSettings = (WebDavStoreSettings) settings;

                if (webDavSettings.path != null) {
                    mWebdavPathPrefixView.setText(webDavSettings.path);
                String path = WebDavStoreSettings.getPath(settings);
                if (path != null) {
                    mWebdavPathPrefixView.setText(path);
                }

                if (webDavSettings.authPath != null) {
                    mWebdavAuthPathView.setText(webDavSettings.authPath);
                String authPath = WebDavStoreSettings.getAuthPath(settings);
                if (authPath != null) {
                    mWebdavAuthPathView.setText(authPath);
                }

                if (webDavSettings.mailboxPath != null) {
                    mWebdavMailboxPathView.setText(webDavSettings.mailboxPath);
                String mailboxPath = WebDavStoreSettings.getMailboxPath(settings);
                if (mailboxPath != null) {
                    mWebdavMailboxPathView.setText(mailboxPath);
                }
            } else {
                throw new Exception("Unknown account type: " + mAccount.getStoreUri());
@@ -568,21 +572,16 @@ public class AccountSetupIncoming extends K9Activity implements OnClickListener
            String host = mServerView.getText().toString();
            int port = Integer.parseInt(mPortView.getText().toString());

            Map<String, String> extra = null;
            Map<String, String> extra = emptyMap();
            if (mStoreType.equals(Protocols.IMAP)) {
                extra = new HashMap<>();
                extra.put(ImapStoreSettings.AUTODETECT_NAMESPACE_KEY,
                        Boolean.toString(mImapAutoDetectNamespaceView.isChecked()));
                extra.put(ImapStoreSettings.PATH_PREFIX_KEY,
                        mImapPathPrefixView.getText().toString());
                boolean autoDetectNamespace = mImapAutoDetectNamespaceView.isChecked();
                String pathPrefix = mImapPathPrefixView.getText().toString();
                extra = ImapStoreSettings.createExtra(autoDetectNamespace, pathPrefix);
            } else if (mStoreType.equals(Protocols.WEBDAV)) {
                extra = new HashMap<>();
                extra.put(WebDavStoreSettings.PATH_KEY,
                        mWebdavPathPrefixView.getText().toString());
                extra.put(WebDavStoreSettings.AUTH_PATH_KEY,
                        mWebdavAuthPathView.getText().toString());
                extra.put(WebDavStoreSettings.MAILBOX_PATH_KEY,
                        mWebdavMailboxPathView.getText().toString());
                String path = mWebdavPathPrefixView.getText().toString();
                String authPath = mWebdavAuthPathView.getText().toString();
                String mailboxPath = mWebdavMailboxPathView.getText().toString();
                extra = WebDavStoreSettings.createExtra(null, path, authPath, mailboxPath);
            }

            DI.get(LocalKeyStoreManager.class).deleteCertificate(mAccount, host, port, MailServerDirection.INCOMING);
+2 −1
Original line number Diff line number Diff line
@@ -489,7 +489,8 @@ public class AccountSetupOutgoing extends K9Activity implements OnClickListener,

        String newHost = mServerView.getText().toString();
        int newPort = Integer.parseInt(mPortView.getText().toString());
        ServerSettings server = new ServerSettings(Protocols.SMTP, newHost, newPort, securityType, authType, username, password, clientCertificateAlias);
        ServerSettings server = new ServerSettings(Protocols.SMTP, newHost, newPort, securityType, authType, username,
                password, clientCertificateAlias);
        uri = backendManager.createTransportUri(server);
        DI.get(LocalKeyStoreManager.class).deleteCertificate(mAccount, newHost, newPort, MailServerDirection.OUTGOING);
        mAccount.setTransportUri(uri);
+2 −4
Original line number Diff line number Diff line
@@ -52,10 +52,8 @@ public class ImapStoreUriCreator {
            Map<String, String> extra = server.getExtra();
            String path;
            if (extra != null) {
                boolean autoDetectNamespace = Boolean.TRUE.toString().equals(
                        extra.get(ImapStoreSettings.AUTODETECT_NAMESPACE_KEY));
                String pathPrefix = (autoDetectNamespace) ?
                        null : extra.get(ImapStoreSettings.PATH_PREFIX_KEY);
                boolean autoDetectNamespace = ImapStoreSettings.getAutoDetectNamespace(server);
                String pathPrefix = (autoDetectNamespace) ? null : ImapStoreSettings.getPathPrefix(server);
                path = "/" + (autoDetectNamespace ? "1" : "0") + "|" +
                        ((pathPrefix == null) ? "" : pathPrefix);
            } else {
Loading