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:
parent
6b155fb802
commit
fe6f99ea6a
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
);
|
||||
|
||||
ArrayList<Object> data = new ArrayList<Object>();
|
||||
data.add(ocVersion);
|
||||
mLatestResult.setData(data);
|
||||
retval = true;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user