1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Detect when there is a change bewwen a https connection to a non-secure one and generated a new erro code.

This commit is contained in:
jabarros 2014-08-04 10:18:21 +02:00
parent 6b155fb802
commit fe6f99ea6a
2 changed files with 52 additions and 12 deletions

View File

@ -100,7 +100,8 @@ public class RemoteOperationResult implements Serializable {
SHARE_NOT_FOUND,
LOCAL_STORAGE_NOT_REMOVED,
FORBIDDEN,
SHARE_FORBIDDEN
SHARE_FORBIDDEN,
OK_REDIRECT_TO_NON_SECURE_CONNECTION
}
private boolean mSuccess = false;
@ -114,7 +115,7 @@ public class RemoteOperationResult implements Serializable {
public RemoteOperationResult(ResultCode 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;
}
@ -250,6 +251,10 @@ public class RemoteOperationResult implements Serializable {
return mCode == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED;
}
public boolean isRedirectToNonSecureConnection() {
return mCode == ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION;
}
private CertificateCombinedException getCertificateCombinedException(Exception e) {
CertificateCombinedException result = null;
if (e instanceof CertificateCombinedException) {
@ -371,6 +376,15 @@ public class RemoteOperationResult implements Serializable {
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() {
return mAuthenticate;
}

View File

@ -31,16 +31,17 @@ import org.apache.commons.httpclient.methods.GetMethod;
import org.json.JSONException;
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.net.ConnectivityManager;
import android.net.Uri;
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
*
@ -93,10 +94,35 @@ public class GetRemoteStatusOperation extends RemoteOperation {
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>();
data.add(ocVersion);
mLatestResult.setData(data);
retval = true;
}
}
@ -148,7 +174,7 @@ public class GetRemoteStatusOperation extends RemoteOperation {
} else {
client.setBaseUri(Uri.parse("https://" + baseUriStr));
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");
client.setBaseUri(Uri.parse("http://" + baseUriStr));
tryConnection(client);