mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 10:27:45 +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, |         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; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -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 | ||||||
|                         ); |                         ); | ||||||
| 
 | 
 | ||||||
|                         ArrayList<Object> data = new ArrayList<Object>(); | 						RemoteOperation operation = new ExistenceCheckRemoteOperation("", mContext, false); | ||||||
|                         data.add(ocVersion); | 						client.setFollowRedirects(false); | ||||||
|                         mLatestResult.setData(data); | 						boolean isRedirectToNonSecureConnection = false; | ||||||
|                         retval = true; | 
 | ||||||
|  | 						// 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 { |         } 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); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user