From e4b57e8063bf164ad23d40496f73cceb045cb456 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 28 Mar 2017 18:53:57 +0200 Subject: [PATCH] WIP --- .../lib/common/OwnCloudBasicCredentials.java | 4 ++ .../lib/common/OwnCloudBearerCredentials.java | 70 ++++++++++--------- .../lib/common/OwnCloudClientFactory.java | 4 +- .../common/OwnCloudCredentialsFactory.java | 4 +- .../lib/common/accounts/AccountUtils.java | 3 +- .../lib/common/network/BearerAuthScheme.java | 12 +++- 6 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/com/owncloud/android/lib/common/OwnCloudBasicCredentials.java b/src/com/owncloud/android/lib/common/OwnCloudBasicCredentials.java index 4f7434a2..627a729f 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudBasicCredentials.java +++ b/src/com/owncloud/android/lib/common/OwnCloudBasicCredentials.java @@ -29,6 +29,8 @@ import java.util.List; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthPolicy; import org.apache.commons.httpclient.auth.AuthScope; +import org.apache.commons.httpclient.auth.AuthState; +import org.apache.commons.httpclient.auth.BasicScheme; public class OwnCloudBasicCredentials implements OwnCloudCredentials { @@ -50,6 +52,8 @@ public class OwnCloudBasicCredentials implements OwnCloudCredentials { @Override public void applyTo(OwnCloudClient client) { + AuthPolicy.registerAuthScheme(AuthState.PREEMPTIVE_AUTH_SCHEME, BasicScheme.class); + List authPrefs = new ArrayList(1); authPrefs.add(AuthPolicy.BASIC); client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); diff --git a/src/com/owncloud/android/lib/common/OwnCloudBearerCredentials.java b/src/com/owncloud/android/lib/common/OwnCloudBearerCredentials.java index f0bb13a7..4667747b 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudBearerCredentials.java +++ b/src/com/owncloud/android/lib/common/OwnCloudBearerCredentials.java @@ -28,48 +28,52 @@ import java.util.List; import org.apache.commons.httpclient.auth.AuthPolicy; import org.apache.commons.httpclient.auth.AuthScope; +import org.apache.commons.httpclient.auth.AuthState; import com.owncloud.android.lib.common.network.BearerAuthScheme; import com.owncloud.android.lib.common.network.BearerCredentials; public class OwnCloudBearerCredentials implements OwnCloudCredentials { - private String mAccessToken; - - public OwnCloudBearerCredentials(String accessToken) { - mAccessToken = accessToken != null ? accessToken : ""; - } + private String mUsername; + private String mAccessToken; - @Override - public void applyTo(OwnCloudClient client) { - AuthPolicy.registerAuthScheme(BearerAuthScheme.AUTH_POLICY, BearerAuthScheme.class); - - List authPrefs = new ArrayList(1); - authPrefs.add(BearerAuthScheme.AUTH_POLICY); - client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); - - client.getParams().setAuthenticationPreemptive(true); + public OwnCloudBearerCredentials(String username, String accessToken) { + mUsername = username != null ? username : ""; + mAccessToken = accessToken != null ? accessToken : ""; + } + + @Override + public void applyTo(OwnCloudClient client) { + AuthPolicy.registerAuthScheme(BearerAuthScheme.AUTH_POLICY, BearerAuthScheme.class); + AuthPolicy.registerAuthScheme(AuthState.PREEMPTIVE_AUTH_SCHEME, BearerAuthScheme.class); + + List authPrefs = new ArrayList<>(1); + authPrefs.add(BearerAuthScheme.AUTH_POLICY); + client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); + + client.getParams().setAuthenticationPreemptive(true); // true enforces BASIC AUTH ; library is stupid client.getParams().setCredentialCharset(OwnCloudCredentialsFactory.CREDENTIAL_CHARSET); - client.getState().setCredentials( - AuthScope.ANY, - new BearerCredentials(mAccessToken) - ); - } + client.getState().setCredentials( + AuthScope.ANY, + new BearerCredentials(mAccessToken) + ); + } - @Override - public String getUsername() { - // its unknown - return null; - } - - @Override - public String getAuthToken() { - return mAccessToken; - } + @Override + public String getUsername() { + // not relevant for authentication, but relevant for informational purposes + return mUsername; + } - @Override - public boolean authTokenExpires() { - return true; - } + @Override + public String getAuthToken() { + return mAccessToken; + } + + @Override + public boolean authTokenExpires() { + return true; + } } diff --git a/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java b/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java index 5d01e487..6109324e 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java +++ b/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java @@ -96,7 +96,7 @@ public class OwnCloudClientFactory { false); client.setCredentials( - OwnCloudCredentialsFactory.newBearerCredentials(accessToken) + OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken) ); } else if (isSamlSso) { // TODO avoid a call to getUserData here @@ -161,7 +161,7 @@ public class OwnCloudClientFactory { String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN); if (accessToken == null) throw new AuthenticatorException("WTF!"); client.setCredentials( - OwnCloudCredentialsFactory.newBearerCredentials(accessToken) + OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken) ); } else if (isSamlSso) { // TODO avoid a call to getUserData here diff --git a/src/com/owncloud/android/lib/common/OwnCloudCredentialsFactory.java b/src/com/owncloud/android/lib/common/OwnCloudCredentialsFactory.java index e7cf12fd..289b68b2 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudCredentialsFactory.java +++ b/src/com/owncloud/android/lib/common/OwnCloudCredentialsFactory.java @@ -40,8 +40,8 @@ public class OwnCloudCredentialsFactory { return new OwnCloudBasicCredentials(username, password, preemptiveMode); } - public static OwnCloudCredentials newBearerCredentials(String authToken) { - return new OwnCloudBearerCredentials(authToken); + public static OwnCloudCredentials newBearerCredentials(String username, String authToken) { + return new OwnCloudBearerCredentials(username, authToken); } public static OwnCloudCredentials newSamlSsoCredentials(String username, String sessionCookie) { diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java index b575d31d..a4dad289 100644 --- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -48,6 +48,7 @@ public class AccountUtils { private static final String TAG = AccountUtils.class.getSimpleName(); public static final String WEBDAV_PATH_4_0 = "/remote.php/webdav"; + public static final String ODAV_PATH = "/remote.php/webdav"; public static final String STATUS_PATH = "/status.php"; /** @@ -171,7 +172,7 @@ public class AccountUtils { AccountTypeUtils.getAuthTokenTypeAccessToken(account.type), false); - credentials = OwnCloudCredentialsFactory.newBearerCredentials(accessToken); + credentials = OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken); } else if (isSamlSso) { String accessToken = am.blockingGetAuthToken( diff --git a/src/com/owncloud/android/lib/common/network/BearerAuthScheme.java b/src/com/owncloud/android/lib/common/network/BearerAuthScheme.java index 75a5cc75..c87b19d3 100644 --- a/src/com/owncloud/android/lib/common/network/BearerAuthScheme.java +++ b/src/com/owncloud/android/lib/common/network/BearerAuthScheme.java @@ -26,6 +26,7 @@ package com.owncloud.android.lib.common.network; import java.util.Map; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.auth.AuthChallengeParser; @@ -33,6 +34,7 @@ import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.auth.AuthenticationException; import org.apache.commons.httpclient.auth.InvalidCredentialsException; import org.apache.commons.httpclient.auth.MalformedChallengeException; +import org.apache.commons.httpclient.util.EncodingUtil; import com.owncloud.android.lib.common.utils.Log_OC; @@ -218,9 +220,15 @@ public class BearerAuthScheme implements AuthScheme /*extends RFC2617Scheme*/ { } StringBuffer buffer = new StringBuffer(); buffer.append(credentials.getAccessToken()); - - //return "Bearer " + EncodingUtil.getAsciiString(EncodingUtil.getBytes(buffer.toString(), charset)); + + Log_OC.v(TAG, "OAUTH2: string to authorize: " + "Bearer " + buffer.toString()); return "Bearer " + buffer.toString(); + //return "Bearer " + EncodingUtil.getAsciiString(EncodingUtil.getBytes(buffer.toString(), charset)); + /*return "Bearer " + EncodingUtil.getAsciiString( + Base64.encodeBase64( + EncodingUtil.getBytes(buffer.toString(), charset) + ) + );*/ } /**