Search in sources :

Example 11 with AuthType

use of com.fsck.k9.mail.AuthType in project k-9 by k9mail.

the class AccountSetupIncoming method onActivityResult.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (Intent.ACTION_EDIT.equals(getIntent().getAction())) {
            boolean isPushCapable = false;
            try {
                Store store = mAccount.getRemoteStore();
                isPushCapable = store.isPushCapable();
            } catch (Exception e) {
                Timber.e(e, "Could not get remote store");
            }
            if (isPushCapable && mAccount.getFolderPushMode() != FolderMode.NONE) {
                MailService.actionRestartPushers(this, null);
            }
            mAccount.save(Preferences.getPreferences(this));
            finish();
        } else {
            /*
                 * Set the username and password for the outgoing settings to the username and
                 * password the user just set for incoming.
                 */
            try {
                String username = mUsernameView.getText().toString();
                String password = null;
                String clientCertificateAlias = null;
                AuthType authType = getSelectedAuthType();
                if (AuthType.EXTERNAL == authType) {
                    clientCertificateAlias = mClientCertificateSpinner.getAlias();
                } else {
                    password = mPasswordView.getText().toString();
                }
                URI oldUri = new URI(mAccount.getTransportUri());
                ServerSettings transportServer = new ServerSettings(Type.SMTP, oldUri.getHost(), oldUri.getPort(), ConnectionSecurity.SSL_TLS_REQUIRED, authType, username, password, clientCertificateAlias);
                String transportUri = Transport.createTransportUri(transportServer);
                mAccount.setTransportUri(transportUri);
            } catch (URISyntaxException use) {
            /*
                     * If we can't set up the URL we just continue. It's only for
                     * convenience.
                     */
            }
            AccountSetupOutgoing.actionOutgoingSettings(this, mAccount, mMakeDefault);
            finish();
        }
    }
}
Also used : ServerSettings(com.fsck.k9.mail.ServerSettings) Store(com.fsck.k9.mail.Store) RemoteStore(com.fsck.k9.mail.store.RemoteStore) AuthType(com.fsck.k9.mail.AuthType) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) URISyntaxException(java.net.URISyntaxException)

Example 12 with AuthType

use of com.fsck.k9.mail.AuthType in project k-9 by k9mail.

the class AccountSetupIncoming method onNext.

protected void onNext() {
    try {
        ConnectionSecurity connectionSecurity = getSelectedSecurity();
        String username = mUsernameView.getText().toString();
        String password = null;
        String clientCertificateAlias = null;
        AuthType authType = getSelectedAuthType();
        if (authType == AuthType.EXTERNAL) {
            clientCertificateAlias = mClientCertificateSpinner.getAlias();
        } else {
            password = mPasswordView.getText().toString();
        }
        String host = mServerView.getText().toString();
        int port = Integer.parseInt(mPortView.getText().toString());
        Map<String, String> extra = null;
        if (Type.IMAP == mStoreType) {
            extra = new HashMap<String, String>();
            extra.put(ImapStoreSettings.AUTODETECT_NAMESPACE_KEY, Boolean.toString(mImapAutoDetectNamespaceView.isChecked()));
            extra.put(ImapStoreSettings.PATH_PREFIX_KEY, mImapPathPrefixView.getText().toString());
        } else if (Type.WebDAV == mStoreType) {
            extra = new HashMap<String, String>();
            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());
        }
        mAccount.deleteCertificate(host, port, CheckDirection.INCOMING);
        ServerSettings settings = new ServerSettings(mStoreType, host, port, connectionSecurity, authType, username, password, clientCertificateAlias, extra);
        mAccount.setStoreUri(RemoteStore.createStoreUri(settings));
        mAccount.setCompression(NetworkType.MOBILE, mCompressionMobile.isChecked());
        mAccount.setCompression(NetworkType.WIFI, mCompressionWifi.isChecked());
        mAccount.setCompression(NetworkType.OTHER, mCompressionOther.isChecked());
        mAccount.setSubscribedFoldersOnly(mSubscribedFoldersOnly.isChecked());
        AccountSetupCheckSettings.actionCheckSettings(this, mAccount, CheckDirection.INCOMING);
    } catch (Exception e) {
        failure(e);
    }
}
Also used : ConnectionSecurity(com.fsck.k9.mail.ConnectionSecurity) HashMap(java.util.HashMap) ServerSettings(com.fsck.k9.mail.ServerSettings) AuthType(com.fsck.k9.mail.AuthType) URISyntaxException(java.net.URISyntaxException)

Example 13 with AuthType

use of com.fsck.k9.mail.AuthType in project k-9 by k9mail.

the class AccountSetupOutgoing method validateFields.

/**
     * This is invoked only when the user makes changes to a widget, not when
     * widgets are changed programmatically.  (The logic is simpler when you know
     * that this is the last thing called after an input change.)
     */
private void validateFields() {
    AuthType authType = getSelectedAuthType();
    boolean isAuthTypeExternal = (AuthType.EXTERNAL == authType);
    ConnectionSecurity connectionSecurity = getSelectedSecurity();
    boolean hasConnectionSecurity = (connectionSecurity != ConnectionSecurity.NONE);
    if (isAuthTypeExternal && !hasConnectionSecurity) {
        // Notify user of an invalid combination of AuthType.EXTERNAL & ConnectionSecurity.NONE
        String toastText = getString(R.string.account_setup_outgoing_invalid_setting_combo_notice, getString(R.string.account_setup_incoming_auth_type_label), AuthType.EXTERNAL.toString(), getString(R.string.account_setup_incoming_security_label), ConnectionSecurity.NONE.toString());
        Toast.makeText(this, toastText, Toast.LENGTH_LONG).show();
        // Reset the views back to their previous settings without recursing through here again
        OnItemSelectedListener onItemSelectedListener = mAuthTypeView.getOnItemSelectedListener();
        mAuthTypeView.setOnItemSelectedListener(null);
        mAuthTypeView.setSelection(mCurrentAuthTypeViewPosition, false);
        mAuthTypeView.setOnItemSelectedListener(onItemSelectedListener);
        updateViewFromAuthType();
        onItemSelectedListener = mSecurityTypeView.getOnItemSelectedListener();
        mSecurityTypeView.setOnItemSelectedListener(null);
        mSecurityTypeView.setSelection(mCurrentSecurityTypeViewPosition, false);
        mSecurityTypeView.setOnItemSelectedListener(onItemSelectedListener);
        updateAuthPlainTextFromSecurityType(getSelectedSecurity());
        mPortView.removeTextChangedListener(validationTextWatcher);
        mPortView.setText(mCurrentPortViewSetting);
        mPortView.addTextChangedListener(validationTextWatcher);
        authType = getSelectedAuthType();
        isAuthTypeExternal = (AuthType.EXTERNAL == authType);
        connectionSecurity = getSelectedSecurity();
        hasConnectionSecurity = (connectionSecurity != ConnectionSecurity.NONE);
    } else {
        mCurrentAuthTypeViewPosition = mAuthTypeView.getSelectedItemPosition();
        mCurrentSecurityTypeViewPosition = mSecurityTypeView.getSelectedItemPosition();
        mCurrentPortViewSetting = mPortView.getText().toString();
    }
    boolean hasValidCertificateAlias = mClientCertificateSpinner.getAlias() != null;
    boolean hasValidUserName = Utility.requiredFieldValid(mUsernameView);
    boolean hasValidPasswordSettings = hasValidUserName && !isAuthTypeExternal && Utility.requiredFieldValid(mPasswordView);
    boolean hasValidExternalAuthSettings = hasValidUserName && isAuthTypeExternal && hasConnectionSecurity && hasValidCertificateAlias;
    mNextButton.setEnabled(Utility.domainFieldValid(mServerView) && Utility.requiredFieldValid(mPortView) && (!mRequireLoginView.isChecked() || hasValidPasswordSettings || hasValidExternalAuthSettings));
    Utility.setCompoundDrawablesAlpha(mNextButton, mNextButton.isEnabled() ? 255 : 128);
}
Also used : ConnectionSecurity(com.fsck.k9.mail.ConnectionSecurity) OnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener) AuthType(com.fsck.k9.mail.AuthType)

Example 14 with AuthType

use of com.fsck.k9.mail.AuthType in project k-9 by k9mail.

the class SmtpTransport method decodeUri.

/**
     * Decodes a SmtpTransport URI.
     *
     * NOTE: In contrast to ImapStore and Pop3Store, the authType is appended at the end!
     *
     * <p>Possible forms:</p>
     * <pre>
     * smtp://user:password:auth@server:port ConnectionSecurity.NONE
     * smtp+tls+://user:password:auth@server:port ConnectionSecurity.STARTTLS_REQUIRED
     * smtp+ssl+://user:password:auth@server:port ConnectionSecurity.SSL_TLS_REQUIRED
     * </pre>
     */
public static ServerSettings decodeUri(String uri) {
    String host;
    int port;
    ConnectionSecurity connectionSecurity;
    AuthType authType = null;
    String username = null;
    String password = null;
    String clientCertificateAlias = null;
    URI smtpUri;
    try {
        smtpUri = new URI(uri);
    } catch (URISyntaxException use) {
        throw new IllegalArgumentException("Invalid SmtpTransport URI", use);
    }
    String scheme = smtpUri.getScheme();
    /*
         * Currently available schemes are:
         * smtp
         * smtp+tls+
         * smtp+ssl+
         *
         * The following are obsolete schemes that may be found in pre-existing
         * settings from earlier versions or that may be found when imported. We
         * continue to recognize them and re-map them appropriately:
         * smtp+tls
         * smtp+ssl
         */
    if (scheme.equals("smtp")) {
        connectionSecurity = ConnectionSecurity.NONE;
        port = ServerSettings.Type.SMTP.defaultPort;
    } else if (scheme.startsWith("smtp+tls")) {
        connectionSecurity = ConnectionSecurity.STARTTLS_REQUIRED;
        port = ServerSettings.Type.SMTP.defaultPort;
    } else if (scheme.startsWith("smtp+ssl")) {
        connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED;
        port = ServerSettings.Type.SMTP.defaultTlsPort;
    } else {
        throw new IllegalArgumentException("Unsupported protocol (" + scheme + ")");
    }
    host = smtpUri.getHost();
    if (smtpUri.getPort() != -1) {
        port = smtpUri.getPort();
    }
    if (smtpUri.getUserInfo() != null) {
        String[] userInfoParts = smtpUri.getUserInfo().split(":");
        if (userInfoParts.length == 1) {
            authType = AuthType.PLAIN;
            username = decodeUtf8(userInfoParts[0]);
        } else if (userInfoParts.length == 2) {
            authType = AuthType.PLAIN;
            username = decodeUtf8(userInfoParts[0]);
            password = decodeUtf8(userInfoParts[1]);
        } else if (userInfoParts.length == 3) {
            // NOTE: In SmtpTransport URIs, the authType comes last!
            authType = AuthType.valueOf(userInfoParts[2]);
            username = decodeUtf8(userInfoParts[0]);
            if (authType == AuthType.EXTERNAL) {
                clientCertificateAlias = decodeUtf8(userInfoParts[1]);
            } else {
                password = decodeUtf8(userInfoParts[1]);
            }
        }
    }
    return new ServerSettings(ServerSettings.Type.SMTP, host, port, connectionSecurity, authType, username, password, clientCertificateAlias);
}
Also used : ConnectionSecurity(com.fsck.k9.mail.ConnectionSecurity) ServerSettings(com.fsck.k9.mail.ServerSettings) AuthType(com.fsck.k9.mail.AuthType) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI)

Example 15 with AuthType

use of com.fsck.k9.mail.AuthType in project k-9 by k9mail.

the class SmtpTransport method createUri.

/**
     * Creates a SmtpTransport URI with the supplied settings.
     *
     * @param server
     *         The {@link ServerSettings} object that holds the server settings.
     *
     * @return A SmtpTransport URI that holds the same information as the {@code server} parameter.
     *
     * @see com.fsck.k9.mail.store.StoreConfig#getTransportUri()
     * @see SmtpTransport#decodeUri(String)
     */
public static String createUri(ServerSettings server) {
    String userEnc = (server.username != null) ? encodeUtf8(server.username) : "";
    String passwordEnc = (server.password != null) ? encodeUtf8(server.password) : "";
    String clientCertificateAliasEnc = (server.clientCertificateAlias != null) ? encodeUtf8(server.clientCertificateAlias) : "";
    String scheme;
    switch(server.connectionSecurity) {
        case SSL_TLS_REQUIRED:
            scheme = "smtp+ssl+";
            break;
        case STARTTLS_REQUIRED:
            scheme = "smtp+tls+";
            break;
        default:
        case NONE:
            scheme = "smtp";
            break;
    }
    String userInfo;
    AuthType authType = server.authenticationType;
    // NOTE: authType is append at last item, in contrast to ImapStore and Pop3Store!
    if (authType != null) {
        if (AuthType.EXTERNAL == authType) {
            userInfo = userEnc + ":" + clientCertificateAliasEnc + ":" + authType.name();
        } else {
            userInfo = userEnc + ":" + passwordEnc + ":" + authType.name();
        }
    } else {
        userInfo = userEnc + ":" + passwordEnc;
    }
    try {
        return new URI(scheme, userInfo, server.host, server.port, null, null, null).toString();
    } catch (URISyntaxException e) {
        throw new IllegalArgumentException("Can't create SmtpTransport URI", e);
    }
}
Also used : AuthType(com.fsck.k9.mail.AuthType) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI)

Aggregations

AuthType (com.fsck.k9.mail.AuthType)14 ServerSettings (com.fsck.k9.mail.ServerSettings)7 ConnectionSecurity (com.fsck.k9.mail.ConnectionSecurity)6 URISyntaxException (java.net.URISyntaxException)6 URI (java.net.URI)5 OnItemSelectedListener (android.widget.AdapterView.OnItemSelectedListener)4 View (android.view.View)2 HashMap (java.util.HashMap)2 SharedPreferences (android.content.SharedPreferences)1 Account (com.fsck.k9.Account)1 Preferences (com.fsck.k9.Preferences)1 Store (com.fsck.k9.mail.Store)1 RemoteStore (com.fsck.k9.mail.store.RemoteStore)1 StoreConfig (com.fsck.k9.mail.store.StoreConfig)1 InvalidSettingValueException (com.fsck.k9.preferences.Settings.InvalidSettingValueException)1 Map (java.util.Map)1 Matchers.anyString (org.mockito.Matchers.anyString)1