diff --git a/library/build.gradle b/library/build.gradle index 00bdbf91b1a878af098dfbf44a92783148da1ea1..3526d815e774d537a6da7e38a868c67b8731d9dd 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -47,7 +47,7 @@ configurations { def versionMajor = 1 def versionMinor = 0 -def versionPatch = 8 +def versionPatch = 9 def upstreamVersion = "2.17" def releasePatch = "release" def libName = "Nextcloud-Android-Library" diff --git a/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt b/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt index e3c80f155d012fd3fbe7d3d399389750335ac40f..8c2bc32af1777344f0576de9f5d1e4b7a33bf7fd 100644 --- a/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt +++ b/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt @@ -140,7 +140,7 @@ abstract class OkHttpMethodBase( val temp = requestBuilder.url(buildQueryParameter()) requestHeaders[AUTHORIZATION] = nextcloudClient.credentials - requestHeaders[USER_AGENT] = OwnCloudClientManagerFactory.getUserAgent() + requestHeaders[USER_AGENT] = OwnCloudClientManagerFactory.getNextCloudUserAgent() requestHeaders.forEach { (name, value) -> temp.header(name, value) } if (useOcsApiRequestHeader) { @@ -167,7 +167,7 @@ abstract class OkHttpMethodBase( fun execute(client: PlainClient): Int { val temp = requestBuilder.url(buildQueryParameter()) - requestHeaders[USER_AGENT] = OwnCloudClientManagerFactory.getUserAgent() + requestHeaders[USER_AGENT] = OwnCloudClientManagerFactory.getNextCloudUserAgent() requestHeaders.forEach { (name, value) -> temp.header(name, value) } applyType(temp) diff --git a/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java b/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java index 1534004ec8cf9750ba518cddc8ee08e7386c0603..89f0596bd608f705b19d9e566d8376c27abdf81b 100644 --- a/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java +++ b/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java @@ -51,7 +51,12 @@ import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; import java.net.SocketTimeoutException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; import java.util.Locale; +import java.util.Map; +import java.util.Set; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -428,16 +433,23 @@ public class OwnCloudClient extends HttpClient { @SuppressFBWarnings(value = "SBSC_USE_STRINGBUFFER_CONCATENATION", justification = "replaced by NextcloudClient") public String getCookiesString() { + Map cookieMap = new HashMap<>(); Cookie[] cookies = getState().getCookies(); - String cookiesString = ""; + StringBuilder cookiesString = new StringBuilder(); + for (Cookie cookie : cookies) { - cookiesString = cookiesString + cookie.toString() + ";"; + if (cookie.isExpired()) { + continue; + } - // logCookie(cookie); + cookieMap.put(cookie.getName(), cookie); } - return cookiesString; + for (Cookie cookie: cookieMap.values()) { + cookiesString.append(cookie.toString()).append(";"); + } + return cookiesString.toString(); } public int getConnectionTimeout() { diff --git a/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java b/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java index 1b4e6f2bc450fdb51a3c469ffabd551c7298fd23..ca933e28a540700f4b445aac6a70adc7b58737d7 100644 --- a/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java +++ b/library/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java @@ -25,7 +25,8 @@ package com.owncloud.android.lib.common; public class OwnCloudClientManagerFactory { private static OwnCloudClientManager sDefaultSingleton; - private static String sUserAgent = "Mozilla/5.0 (Android) Nextcloud-android"; + private static String ocUserAgent = "eOS (Android) Owncloud-android"; + private static String ncUserAgent = "eOS (Android) Nextcloud-android"; public static OwnCloudClientManager getDefaultSingleton() { if (sDefaultSingleton == null) { @@ -35,10 +36,18 @@ public class OwnCloudClientManagerFactory { } public static void setUserAgent(String userAgent) { - sUserAgent = userAgent; + ocUserAgent = userAgent; } public static String getUserAgent() { - return sUserAgent; + return ocUserAgent; + } + + public static String getNextCloudUserAgent() { + return ncUserAgent; + } + + public static void setNextCloudUserAgent(String userAgent) { + ncUserAgent = userAgent; } } diff --git a/library/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java b/library/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java index 4a4f64c0ea18a8c526bcf0f845f5f43e3a3e37de..c502d1b7b04a792d8e306817746e6fea8fa7f097 100644 --- a/library/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/library/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -53,6 +53,8 @@ import org.apache.commons.httpclient.Cookie; import org.json.JSONException; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; import okhttp3.CookieJar; @@ -303,17 +305,28 @@ public class AccountUtils { Log_OC.e(TAG, e.getMessage()); } + client.getState().clearCookies(); + if (cookiesString != null) { String[] cookies = cookiesString.split(";"); if (cookies.length > 0) { + Set cookieNames = new HashSet<>(); + for (int i = 0; i < cookies.length; i++) { int equalPos = cookies[i].indexOf('='); if (equalPos <= 0) { continue; } + String cookieName = cookies[i].substring(0, equalPos); + if (cookieNames.contains(cookieName)) { + continue; + } + + cookieNames.add(cookieName); + Cookie cookie = new Cookie(); - cookie.setName(cookies[i].substring(0, equalPos)); + cookie.setName(cookieName); cookie.setValue(cookies[i].substring(equalPos + 1)); cookie.setDomain(serverUri.getHost()); // VERY IMPORTANT cookie.setPath(serverUri.getPath()); // VERY IMPORTANT