mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	apply changes according to review
This commit is contained in:
		
							parent
							
								
									2a4195c966
								
							
						
					
					
						commit
						7c77c267f9
					
				| @ -7,8 +7,6 @@ dependencies { | |||||||
|     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" |     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" | ||||||
|     api 'com.gitlab.ownclouders:dav4android:oc_support_2.1.5' |     api 'com.gitlab.ownclouders:dav4android:oc_support_2.1.5' | ||||||
|     api 'com.github.AppDevNext.Logcat:LogcatCore:2.2.2' |     api 'com.github.AppDevNext.Logcat:LogcatCore:2.2.2' | ||||||
|     debugImplementation 'com.facebook.stetho:stetho:1.5.1' |  | ||||||
|     debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.5.1' |  | ||||||
| 
 | 
 | ||||||
|     // Moshi |     // Moshi | ||||||
|     implementation("com.squareup.moshi:moshi-kotlin:$moshiVersion") { |     implementation("com.squareup.moshi:moshi-kotlin:$moshiVersion") { | ||||||
|  | |||||||
| @ -19,7 +19,6 @@ class ConnectionValidator( | |||||||
|     val context: Context, |     val context: Context, | ||||||
|     val clearCookiesOnValidation: Boolean |     val clearCookiesOnValidation: Boolean | ||||||
| ) { | ) { | ||||||
| 
 |  | ||||||
|     fun validate(baseClient: OwnCloudClient, singleSessionManager: SingleSessionManager): Boolean { |     fun validate(baseClient: OwnCloudClient, singleSessionManager: SingleSessionManager): Boolean { | ||||||
|         try { |         try { | ||||||
|             var validationRetryCount = 0 |             var validationRetryCount = 0 | ||||||
| @ -182,6 +181,6 @@ class ConnectionValidator( | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     companion object { |     companion object { | ||||||
|         val VALIDATION_RETRY_COUNT = 3 |         private val VALIDATION_RETRY_COUNT = 3 | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -27,7 +27,6 @@ package com.owncloud.android.lib.common; | |||||||
| 
 | 
 | ||||||
| import android.net.Uri; | import android.net.Uri; | ||||||
| 
 | 
 | ||||||
| import at.bitfire.dav4jvm.exception.HttpException; |  | ||||||
| import com.owncloud.android.lib.common.accounts.AccountUtils; | import com.owncloud.android.lib.common.accounts.AccountUtils; | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentials; | import com.owncloud.android.lib.common.authentication.OwnCloudCredentials; | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; | import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; | ||||||
| @ -35,12 +34,10 @@ import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory | |||||||
| import com.owncloud.android.lib.common.http.HttpClient; | import com.owncloud.android.lib.common.http.HttpClient; | ||||||
| import com.owncloud.android.lib.common.http.HttpConstants; | import com.owncloud.android.lib.common.http.HttpConstants; | ||||||
| import com.owncloud.android.lib.common.http.methods.HttpBaseMethod; | import com.owncloud.android.lib.common.http.methods.HttpBaseMethod; | ||||||
| import com.owncloud.android.lib.common.network.RedirectionPath; |  | ||||||
| import com.owncloud.android.lib.common.utils.RandomUtils; | import com.owncloud.android.lib.common.utils.RandomUtils; | ||||||
| import com.owncloud.android.lib.resources.status.OwnCloudVersion; | import com.owncloud.android.lib.resources.status.OwnCloudVersion; | ||||||
| import okhttp3.Cookie; | import okhttp3.Cookie; | ||||||
| import okhttp3.HttpUrl; | import okhttp3.HttpUrl; | ||||||
| import org.apache.commons.lang3.exception.ExceptionUtils; |  | ||||||
| import timber.log.Timber; | import timber.log.Timber; | ||||||
| 
 | 
 | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| @ -49,7 +46,6 @@ import java.util.List; | |||||||
| 
 | 
 | ||||||
| import static com.owncloud.android.lib.common.http.HttpConstants.AUTHORIZATION_HEADER; | import static com.owncloud.android.lib.common.http.HttpConstants.AUTHORIZATION_HEADER; | ||||||
| import static com.owncloud.android.lib.common.http.HttpConstants.HTTP_MOVED_PERMANENTLY; | import static com.owncloud.android.lib.common.http.HttpConstants.HTTP_MOVED_PERMANENTLY; | ||||||
| import static com.owncloud.android.lib.common.http.HttpConstants.OC_X_REQUEST_ID; |  | ||||||
| 
 | 
 | ||||||
| public class OwnCloudClient extends HttpClient { | public class OwnCloudClient extends HttpClient { | ||||||
| 
 | 
 | ||||||
| @ -137,12 +133,7 @@ public class OwnCloudClient extends HttpClient { | |||||||
| 
 | 
 | ||||||
|             status = method.execute(); |             status = method.execute(); | ||||||
| 
 | 
 | ||||||
|             if (!mFollowRedirects && |             if (shouldConnectionValidatorBeCalled(method, status)) { | ||||||
|                     !method.getFollowRedirects() && |  | ||||||
|                     mConnectionValidator != null && |  | ||||||
|                     (status == HttpConstants.HTTP_MOVED_TEMPORARILY || |  | ||||||
|                             (!(mCredentials instanceof OwnCloudAnonymousCredentials) && |  | ||||||
|                                     status == HttpConstants.HTTP_UNAUTHORIZED))) { |  | ||||||
|                 retry = mConnectionValidator.validate(this, mSingleSessionManager); // retry on success fail on no success |                 retry = mConnectionValidator.validate(this, mSingleSessionManager); // retry on success fail on no success | ||||||
|             } else if(method.getFollowPermanentRedirects() && status == HTTP_MOVED_PERMANENTLY) { |             } else if(method.getFollowPermanentRedirects() && status == HTTP_MOVED_PERMANENTLY) { | ||||||
|                 retry = true; |                 retry = true; | ||||||
| @ -154,6 +145,15 @@ public class OwnCloudClient extends HttpClient { | |||||||
|         return status; |         return status; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private boolean shouldConnectionValidatorBeCalled(HttpBaseMethod method, int status) { | ||||||
|  |         return !mFollowRedirects && | ||||||
|  |                 !method.getFollowRedirects() && | ||||||
|  |                 mConnectionValidator != null && | ||||||
|  |                 (status == HttpConstants.HTTP_MOVED_TEMPORARILY || | ||||||
|  |                         (!(mCredentials instanceof OwnCloudAnonymousCredentials) && | ||||||
|  |                                 status == HttpConstants.HTTP_UNAUTHORIZED)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Exhausts a not interesting HTTP response. Encouraged by HttpClient documentation. |      * Exhausts a not interesting HTTP response. Encouraged by HttpClient documentation. | ||||||
|      * |      * | ||||||
| @ -250,10 +250,6 @@ public class OwnCloudClient extends HttpClient { | |||||||
|         this.mAccount = account; |         this.mAccount = account; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean getFollowRedirects() { |  | ||||||
|         return mFollowRedirects; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setFollowRedirects(boolean followRedirects) { |     public void setFollowRedirects(boolean followRedirects) { | ||||||
|         this.mFollowRedirects = followRedirects; |         this.mFollowRedirects = followRedirects; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -166,7 +166,7 @@ abstract class HttpBaseMethod constructor(url: URL) { | |||||||
| 
 | 
 | ||||||
|     open fun getFollowRedirects() = okHttpClient.followRedirects |     open fun getFollowRedirects() = okHttpClient.followRedirects | ||||||
| 
 | 
 | ||||||
|     open fun setFollPermanentRedirects(followRedirects: Boolean) { |     open fun setFollowPermanentRedirects(followRedirects: Boolean) { | ||||||
|         _followPermanentRedirects = followRedirects |         _followPermanentRedirects = followRedirects | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -60,6 +60,8 @@ public class RemoteOperationResult<T> | |||||||
|      * Generated - should be refreshed every time the class changes!! |      * Generated - should be refreshed every time the class changes!! | ||||||
|      */ |      */ | ||||||
|     private static final long serialVersionUID = 4968939884332372230L; |     private static final long serialVersionUID = 4968939884332372230L; | ||||||
|  |     private static final String LOCATION = "location"; | ||||||
|  |     private static final String WWW_AUTHENTICATE = "www-authenticate"; | ||||||
| 
 | 
 | ||||||
|     private boolean mSuccess = false; |     private boolean mSuccess = false; | ||||||
|     private int mHttpCode = -1; |     private int mHttpCode = -1; | ||||||
| @ -257,11 +259,11 @@ public class RemoteOperationResult<T> | |||||||
|         this(httpCode, httpPhrase); |         this(httpCode, httpPhrase); | ||||||
|         if (headers != null) { |         if (headers != null) { | ||||||
|             for (Map.Entry<String, List<String>> header : headers.toMultimap().entrySet()) { |             for (Map.Entry<String, List<String>> header : headers.toMultimap().entrySet()) { | ||||||
|                 if ("location".equalsIgnoreCase(header.getKey())) { |                 if (LOCATION.equalsIgnoreCase(header.getKey())) { | ||||||
|                     mRedirectedLocation = header.getValue().get(0); |                     mRedirectedLocation = header.getValue().get(0); | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
|                 if ("www-authenticate".equalsIgnoreCase(header.getKey())) { |                 if (WWW_AUTHENTICATE.equalsIgnoreCase(header.getKey())) { | ||||||
|                     for (String value: header.getValue()) { |                     for (String value: header.getValue()) { | ||||||
|                         mAuthenticate.add(value.toLowerCase()); |                         mAuthenticate.add(value.toLowerCase()); | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -45,16 +45,21 @@ class GetBaseUrlRemoteOperation : RemoteOperation<String?>() { | |||||||
|             val stringUrl = client.baseFilesWebDavUri.toString() |             val stringUrl = client.baseFilesWebDavUri.toString() | ||||||
| 
 | 
 | ||||||
|             val propFindMethod = PropfindMethod(URL(stringUrl), 0, DavUtils.allPropset).apply { |             val propFindMethod = PropfindMethod(URL(stringUrl), 0, DavUtils.allPropset).apply { | ||||||
|                 setReadTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS) |                 setReadTimeout(TIMEOUT, TimeUnit.SECONDS) | ||||||
|                 setConnectionTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS) |                 setConnectionTimeout(TIMEOUT, TimeUnit.SECONDS) | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             val status = client.executeHttpMethod(propFindMethod) |             val status = client.executeHttpMethod(propFindMethod) | ||||||
| 
 | 
 | ||||||
|             if (isSuccess(status)) RemoteOperationResult<String?>(RemoteOperationResult.ResultCode.OK).apply { |             if (isSuccess(status)) { | ||||||
|  |                 RemoteOperationResult<String?>(RemoteOperationResult.ResultCode.OK).apply { | ||||||
|                     data = propFindMethod.getFinalUrl().toString() |                     data = propFindMethod.getFinalUrl().toString() | ||||||
|                 } |                 } | ||||||
|             else RemoteOperationResult<String?>(propFindMethod).apply { data = null } |             } else { | ||||||
|  |                 RemoteOperationResult<String?>(propFindMethod).apply { | ||||||
|  |                     data = null | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } catch (e: Exception) { |         } catch (e: Exception) { | ||||||
|             Timber.e(e, "Could not get actuall (or redirected) base URL from base url (/).") |             Timber.e(e, "Could not get actuall (or redirected) base URL from base url (/).") | ||||||
|             RemoteOperationResult<String?>(e) |             RemoteOperationResult<String?>(e) | ||||||
| @ -67,6 +72,6 @@ class GetBaseUrlRemoteOperation : RemoteOperation<String?>() { | |||||||
|         /** |         /** | ||||||
|          * Maximum time to wait for a response from the server in milliseconds. |          * Maximum time to wait for a response from the server in milliseconds. | ||||||
|          */ |          */ | ||||||
|         private const val TIMEOUT = 10000 |         private const val TIMEOUT = 10_000L | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -73,20 +73,18 @@ internal class StatusRequester { | |||||||
|     data class RequestResult( |     data class RequestResult( | ||||||
|         val getMethod: GetMethod, |         val getMethod: GetMethod, | ||||||
|         val status: Int, |         val status: Int, | ||||||
|         val redirectedToUnsecureLocation: Boolean, |  | ||||||
|         val lastLocation: String |         val lastLocation: String | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     fun request(baseLocation: String, client: OwnCloudClient): RequestResult { |     fun request(baseLocation: String, client: OwnCloudClient): RequestResult { | ||||||
|         var currentLocation = baseLocation + OwnCloudClient.STATUS_PATH |         val currentLocation = baseLocation + OwnCloudClient.STATUS_PATH | ||||||
|         var redirectedToUnsecureLocation = false |  | ||||||
|         var status: Int |         var status: Int | ||||||
| 
 | 
 | ||||||
|         val getMethod = getGetMethod(currentLocation) |         val getMethod = getGetMethod(currentLocation) | ||||||
|         getMethod.setFollPermanentRedirects(true) |         getMethod.setFollowPermanentRedirects(true) | ||||||
|         status = client.executeHttpMethod(getMethod) |         status = client.executeHttpMethod(getMethod) | ||||||
| 
 | 
 | ||||||
|         return RequestResult(getMethod, status, redirectedToUnsecureLocation, getMethod.getFinalUrl().toString()) |         return RequestResult(getMethod, status, getMethod.getFinalUrl().toString()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun Int.isSuccess() = this == HttpConstants.HTTP_OK |     private fun Int.isSuccess() = this == HttpConstants.HTTP_OK | ||||||
| @ -106,12 +104,8 @@ internal class StatusRequester { | |||||||
|         // the version object will be returned even if the version is invalid, no error code; |         // the version object will be returned even if the version is invalid, no error code; | ||||||
|         // every app will decide how to act if (ocVersion.isVersionValid() == false) |         // every app will decide how to act if (ocVersion.isVersionValid() == false) | ||||||
|         val result: RemoteOperationResult<RemoteServerInfo> = |         val result: RemoteOperationResult<RemoteServerInfo> = | ||||||
|             if (requestResult.redirectedToUnsecureLocation) { |  | ||||||
|                 RemoteOperationResult(RemoteOperationResult.ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION) |  | ||||||
|             } else { |  | ||||||
|             if (baseUrl.startsWith(HTTPS_SCHEME)) RemoteOperationResult(RemoteOperationResult.ResultCode.OK_SSL) |             if (baseUrl.startsWith(HTTPS_SCHEME)) RemoteOperationResult(RemoteOperationResult.ResultCode.OK_SSL) | ||||||
|             else RemoteOperationResult(RemoteOperationResult.ResultCode.OK_NO_SSL) |             else RemoteOperationResult(RemoteOperationResult.ResultCode.OK_NO_SSL) | ||||||
|             } |  | ||||||
|         val finalUrl = URL(requestResult.lastLocation) |         val finalUrl = URL(requestResult.lastLocation) | ||||||
|         val finalBaseUrl = URL( |         val finalBaseUrl = URL( | ||||||
|             finalUrl.protocol, |             finalUrl.protocol, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user