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

Commit fe6f99ea authored by jabarros's avatar jabarros
Browse files

Detect when there is a change bewwen a https connection to a non-secure one...

Detect when there is a change bewwen a https connection to a non-secure one and generated a new erro code.
parent 6b155fb8
Loading
Loading
Loading
Loading
+16 −2
Original line number Original line Diff line number Diff line
@@ -100,7 +100,8 @@ public class RemoteOperationResult implements Serializable {
        SHARE_NOT_FOUND,
        SHARE_NOT_FOUND,
		LOCAL_STORAGE_NOT_REMOVED,
		LOCAL_STORAGE_NOT_REMOVED,
		FORBIDDEN,
		FORBIDDEN,
		SHARE_FORBIDDEN
		SHARE_FORBIDDEN,
		OK_REDIRECT_TO_NON_SECURE_CONNECTION
    }
    }


    private boolean mSuccess = false;
    private boolean mSuccess = false;
@@ -114,7 +115,7 @@ public class RemoteOperationResult implements Serializable {


    public RemoteOperationResult(ResultCode code) {
    public RemoteOperationResult(ResultCode code) {
        mCode = code;
        mCode = code;
        mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || code == ResultCode.OK_NO_SSL);
		mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || code == ResultCode.OK_NO_SSL || code == ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION);
        mData = null;
        mData = null;
    }
    }


@@ -250,6 +251,10 @@ public class RemoteOperationResult implements Serializable {
        return mCode == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED;
        return mCode == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED;
    }
    }


	public boolean isRedirectToNonSecureConnection() {
		return mCode == ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION;
	}

    private CertificateCombinedException getCertificateCombinedException(Exception e) {
    private CertificateCombinedException getCertificateCombinedException(Exception e) {
        CertificateCombinedException result = null;
        CertificateCombinedException result = null;
        if (e instanceof CertificateCombinedException) {
        if (e instanceof CertificateCombinedException) {
@@ -371,6 +376,15 @@ public class RemoteOperationResult implements Serializable {
                mRedirectedLocation.toLowerCase().contains("wayf")));
                mRedirectedLocation.toLowerCase().contains("wayf")));
    }
    }
    
    
	/**
	 * Checks if is a non https connection
	 * 
	 * @return boolean true/false
	 */
	public boolean isNonSecureRedirection() {
		return (mRedirectedLocation != null && !(mRedirectedLocation.toLowerCase().startsWith("https://")));
	}

    public String getAuthenticateHeader() {
    public String getAuthenticateHeader() {
    	return mAuthenticate;
    	return mAuthenticate;
    }
    }
+36 −10
Original line number Original line Diff line number Diff line
@@ -31,16 +31,17 @@ import org.apache.commons.httpclient.methods.GetMethod;
import org.json.JSONException;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONObject;


import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;

import android.content.Context;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.net.Uri;
import android.util.Log;
import android.util.Log;


import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;

/**
/**
 * Checks if the server is valid and if the server supports the Share API
 * Checks if the server is valid and if the server supports the Share API
 * 
 * 
@@ -93,10 +94,35 @@ public class GetRemoteStatusOperation extends RemoteOperation {
                    					RemoteOperationResult.ResultCode.OK_NO_SSL
                    					RemoteOperationResult.ResultCode.OK_NO_SSL
                        );
                        );


						RemoteOperation operation = new ExistenceCheckRemoteOperation("", mContext, false);
						client.setFollowRedirects(false);
						boolean isRedirectToNonSecureConnection = false;

						// checks if there are any reconnection to a non secure
						// connection
						RemoteOperationResult result = operation.execute(client);
						String redirectedLocation = result.getRedirectedLocation();
						while (baseUrlSt.startsWith("https://") && redirectedLocation != null
										&& redirectedLocation.length() > 0
										&& result.isNonSecureRedirection()) {
							client.setBaseUri(Uri.parse(result.getRedirectedLocation()));
							result = operation.execute(client);
							redirectedLocation = result.getRedirectedLocation();

							isRedirectToNonSecureConnection = true;
							break;
						}

						if (isRedirectToNonSecureConnection) {
							mLatestResult = new RemoteOperationResult(
											RemoteOperationResult.ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION);
						} else {
							retval = true;
						}

						ArrayList<Object> data = new ArrayList<Object>();
						ArrayList<Object> data = new ArrayList<Object>();
						data.add(ocVersion);
						data.add(ocVersion);
						mLatestResult.setData(data);
						mLatestResult.setData(data);
                        retval = true;
                    }
                    }
                }
                }
                
                
@@ -148,7 +174,7 @@ public class GetRemoteStatusOperation extends RemoteOperation {
        } else {
        } else {
            client.setBaseUri(Uri.parse("https://" + baseUriStr));
            client.setBaseUri(Uri.parse("https://" + baseUriStr));
            boolean httpsSuccess = tryConnection(client); 
            boolean httpsSuccess = tryConnection(client); 
            if (!httpsSuccess && !mLatestResult.isSslRecoverableException()) {
			if (!httpsSuccess && !mLatestResult.isSslRecoverableException() && mLatestResult.isNonSecureRedirection()) {
                Log.d(TAG, "establishing secure connection failed, trying non secure connection");
                Log.d(TAG, "establishing secure connection failed, trying non secure connection");
                client.setBaseUri(Uri.parse("http://" + baseUriStr));
                client.setBaseUri(Uri.parse("http://" + baseUriStr));
                tryConnection(client);
                tryConnection(client);