mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	Fix follow redirections
This commit is contained in:
		
							parent
							
								
									f3eb0c4431
								
							
						
					
					
						commit
						8a04392bfc
					
				| @ -178,7 +178,7 @@ public class OwnCloudClient extends HttpClient { | ||||
|     public RedirectionPath followRedirection(HttpBaseMethod method) throws Exception { | ||||
|         int redirectionsCount = 0; | ||||
|         int status = method.getStatusCode(); | ||||
|         RedirectionPath result = new RedirectionPath(status, MAX_REDIRECTIONS_COUNT); | ||||
|         RedirectionPath redirectionPath = new RedirectionPath(status, MAX_REDIRECTIONS_COUNT); | ||||
| 
 | ||||
|         while (redirectionsCount < MAX_REDIRECTIONS_COUNT && | ||||
|                 (status == HttpConstants.HTTP_MOVED_PERMANENTLY || | ||||
| @ -189,12 +189,12 @@ public class OwnCloudClient extends HttpClient { | ||||
|             final String location = method.getResponseHeader(HttpConstants.LOCATION_HEADER) != null | ||||
|                     ? method.getResponseHeader(HttpConstants.LOCATION_HEADER) | ||||
|                     : method.getResponseHeader(HttpConstants.LOCATION_HEADER_LOWER); | ||||
|             if (location != null) { | ||||
| 
 | ||||
|             if (location != null) { | ||||
|                 Log_OC.d(TAG + " #" + mInstanceNumber, | ||||
|                         "Location to redirect: " + location); | ||||
| 
 | ||||
|                 result.addLocation(location); | ||||
|                 redirectionPath.addLocation(location); | ||||
| 
 | ||||
|                 // Release the connection to avoid reach the max number of connections per host | ||||
|                 // due to it will be set a different url | ||||
| @ -221,7 +221,7 @@ public class OwnCloudClient extends HttpClient { | ||||
|                         throw e; | ||||
|                     } | ||||
|                 } | ||||
|                 result.addStatus(status); | ||||
|                 redirectionPath.addStatus(status); | ||||
|                 redirectionsCount++; | ||||
| 
 | ||||
|             } else { | ||||
| @ -229,7 +229,7 @@ public class OwnCloudClient extends HttpClient { | ||||
|                 status = HttpConstants.HTTP_NOT_FOUND; | ||||
|             } | ||||
|         } | ||||
|         return result; | ||||
|         return redirectionPath; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -52,11 +52,9 @@ public abstract class HttpBaseMethod { | ||||
|     protected RequestBody mRequestBody; | ||||
|     protected Response mResponse; | ||||
|     protected Call mCall; | ||||
|     protected URL mUrl; | ||||
| 
 | ||||
|     protected HttpBaseMethod(URL url) { | ||||
|         mOkHttpClient = HttpClient.getOkHttpClient(); | ||||
|         mUrl = url; | ||||
|         mRequest = new Request.Builder() | ||||
|                 .url(HttpUrl.parse(url.toString())) | ||||
|                 .build(); | ||||
| @ -94,10 +92,6 @@ public abstract class HttpBaseMethod { | ||||
|         return mRequest.header(name); | ||||
|     } | ||||
| 
 | ||||
|     public HttpUrl getUrl() { | ||||
|         return mRequest.url(); | ||||
|     } | ||||
| 
 | ||||
|     // Response | ||||
| 
 | ||||
|     public int getStatusCode() { | ||||
| @ -109,11 +103,17 @@ public abstract class HttpBaseMethod { | ||||
|     } | ||||
| 
 | ||||
|     public String getResponseBodyAsString() throws IOException { | ||||
|         return mResponse.body().string(); | ||||
|         if (mResponse.body() != null) { | ||||
|             return mResponse.body().string(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     public InputStream getResponseBodyAsStream() { | ||||
|         return mResponse.body().byteStream(); | ||||
|         if (mResponse.body() != null) { | ||||
|             return mResponse.body().byteStream(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     public Headers getResponseHeaders() { | ||||
|  | ||||
| @ -51,7 +51,7 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|         super(url); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 HttpUrl.parse(url.toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
| @ -102,7 +102,7 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|         super.setReadTimeout(readTimeout, timeUnit); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 HttpUrl.parse(mRequest.url().toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
| @ -111,7 +111,7 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|         super.setConnectionTimeout(connectionTimeout, timeUnit); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 HttpUrl.parse(mRequest.url().toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
| @ -120,7 +120,7 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|         super.setFollowRedirects(followRedirects); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 HttpUrl.parse(mRequest.url().toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
| @ -129,7 +129,16 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|         super.setRetryOnConnectionFailure(retryOnConnectionFailure); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 HttpUrl.parse(mRequest.url().toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void setUrl(HttpUrl url){ | ||||
|         super.setUrl(url); | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mRequest.url().toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| 
 | ||||
| @ -146,12 +155,4 @@ public abstract class DavMethod extends HttpBaseMethod { | ||||
|     public boolean isAborted() { | ||||
|         return mDavResource.isCallAborted(); | ||||
|     } | ||||
| 
 | ||||
|     public void setUrl(URL url) { | ||||
|         mUrl = url; | ||||
|         mDavResource = new DavOCResource( | ||||
|                 mOkHttpClient, | ||||
|                 HttpUrl.parse(mUrl.toString()), | ||||
|                 Constants.INSTANCE.getLog()); | ||||
|     } | ||||
| } | ||||
| @ -77,8 +77,9 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation { | ||||
|     @Override | ||||
|     protected RemoteOperationResult run(OwnCloudClient client) { | ||||
| 
 | ||||
|         boolean previousFollowRedirects = client.followRedirects(); | ||||
| 
 | ||||
|         try { | ||||
|             client.setFollowRedirects(true); | ||||
|             PropfindMethod propfindMethod = new PropfindMethod( | ||||
|                     new URL(client.getNewFilesWebDavUri() + WebdavUtils.encodePath(mPath)), | ||||
|                     0, | ||||
| @ -87,7 +88,13 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation { | ||||
|             propfindMethod.setReadTimeout(TIMEOUT, TimeUnit.SECONDS); | ||||
|             propfindMethod.setConnectionTimeout(TIMEOUT, TimeUnit.SECONDS); | ||||
| 
 | ||||
|             final int status = client.executeHttpMethod(propfindMethod); | ||||
|             client.setFollowRedirects(false); | ||||
|             int status = client.executeHttpMethod(propfindMethod); | ||||
| 
 | ||||
|             if (previousFollowRedirects) { | ||||
|                 mRedirectionPath = client.followRedirection(propfindMethod); | ||||
|                 status = mRedirectionPath.getLastStatus(); | ||||
|             } | ||||
| 
 | ||||
|             /** | ||||
|              *  PROPFIND method | ||||
| @ -111,6 +118,8 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation { | ||||
|                     (mSuccessIfAbsent ? " absence " : " existence ") + ": " + | ||||
|                     result.getLogMessage(), result.getException()); | ||||
|             return result; | ||||
|         } finally { | ||||
|             client.setFollowRedirects(previousFollowRedirects); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -83,17 +83,19 @@ public class GetRemoteStatusOperation extends RemoteOperation<OwnCloudVersion> { | ||||
|             getMethod.setReadTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS); | ||||
|             getMethod.setConnectionTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS); | ||||
| 
 | ||||
|             client.setFollowRedirects(false); | ||||
|             boolean isRedirectToNonSecureConnection = false; | ||||
|             int status; | ||||
|             try { | ||||
|                 status = client.executeHttpMethod(getMethod); | ||||
|                 mLatestResult = new RemoteOperationResult(OK); | ||||
|                 mLatestResult = isSuccess(status) | ||||
|                         ? new RemoteOperationResult<>(OK) | ||||
|                         : new RemoteOperationResult<>(getMethod); | ||||
|             } catch (SSLException sslE) { | ||||
|                 mLatestResult = new RemoteOperationResult(sslE); | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|             client.setFollowRedirects(false); | ||||
|             boolean isRedirectToNonSecureConnection = false; | ||||
|             String redirectedLocation = mLatestResult.getRedirectedLocation(); | ||||
|             while (redirectedLocation != null && redirectedLocation.length() > 0 | ||||
|                 && !mLatestResult.isSuccess()) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user