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