1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-08 00:16:09 +00:00

add oauth operations

This commit is contained in:
theScrabi 2018-06-18 11:02:43 +02:00 committed by davigonz
parent b1f2c0cbef
commit 8540eed348
2 changed files with 69 additions and 71 deletions

View File

@ -31,19 +31,20 @@ import android.net.Uri;
import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials; import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.authentication.OwnCloudCredentials; import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import okhttp3.HttpUrl;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class OAuth2GetAccessTokenOperation extends RemoteOperation { public class OAuth2GetAccessTokenOperation extends RemoteOperation {
@ -83,28 +84,34 @@ public class OAuth2GetAccessTokenOperation extends RemoteOperation {
@Override @Override
protected RemoteOperationResult run(OwnCloudClient client) { protected RemoteOperationResult run(OwnCloudClient client) {
RemoteOperationResult result = null; RemoteOperationResult result = null;
PostMethod postMethod = null;
try { try {
NameValuePair[] nameValuePairs = new NameValuePair[4];
nameValuePairs[0] = new NameValuePair(OAuth2Constants.KEY_GRANT_TYPE, mGrantType); final RequestBody requestBody = new MultipartBody.Builder()
nameValuePairs[1] = new NameValuePair(OAuth2Constants.KEY_CODE, mCode); .setType(MultipartBody.FORM)
nameValuePairs[2] = new NameValuePair(OAuth2Constants.KEY_REDIRECT_URI, mRedirectUri); .addFormDataPart(OAuth2Constants.KEY_GRANT_TYPE, mGrantType)
nameValuePairs[3] = new NameValuePair(OAuth2Constants.KEY_CLIENT_ID, mClientId); .addFormDataPart(OAuth2Constants.KEY_CODE, mCode)
.addFormDataPart(OAuth2Constants.KEY_REDIRECT_URI, mRedirectUri)
.addFormDataPart(OAuth2Constants.KEY_CLIENT_ID, mClientId)
.build();
Uri.Builder uriBuilder = client.getBaseUri().buildUpon(); Uri.Builder uriBuilder = client.getBaseUri().buildUpon();
uriBuilder.appendEncodedPath(mAccessTokenEndpointPath); uriBuilder.appendEncodedPath(mAccessTokenEndpointPath);
postMethod = new PostMethod(uriBuilder.build().toString()); final PostMethod postMethod = new PostMethod(HttpUrl.parse(
postMethod.setRequestBody(nameValuePairs); client.getBaseUri().buildUpon()
.appendEncodedPath(mAccessTokenEndpointPath)
.build()
.toString()));
OwnCloudCredentials oauthCredentials = new OwnCloudBasicCredentials( postMethod.setRequestBody(requestBody);
mClientId,
mClientSecret
); // Do the B***S*** Switch and execute
OwnCloudCredentials oauthCredentials =
new OwnCloudBasicCredentials(mClientId, mClientSecret);
OwnCloudCredentials oldCredentials = switchClientCredentials(oauthCredentials); OwnCloudCredentials oldCredentials = switchClientCredentials(oauthCredentials);
client.executeHttpMethod(postMethod);
client.executeMethod(postMethod);
switchClientCredentials(oldCredentials); switchClientCredentials(oldCredentials);
String response = postMethod.getResponseBodyAsString(); String response = postMethod.getResponseBodyAsString();
@ -117,25 +124,21 @@ public class OAuth2GetAccessTokenOperation extends RemoteOperation {
result = new RemoteOperationResult(ResultCode.OAUTH2_ERROR); result = new RemoteOperationResult(ResultCode.OAUTH2_ERROR);
} else { } else {
result = new RemoteOperationResult(true, postMethod); result = new RemoteOperationResult(ResultCode.OK);
ArrayList<Object> data = new ArrayList<>(); ArrayList<Object> data = new ArrayList<>();
data.add(accessTokenResult); data.add(accessTokenResult);
result.setData(data); result.setData(data);
} }
} else { } else {
result = new RemoteOperationResult(false, postMethod); result = new RemoteOperationResult(ResultCode.OK);
client.exhaustResponse(postMethod.getResponseBodyAsStream()); client.exhaustResponse(postMethod.getResponseAsStream());
} }
} catch (Exception e) { } catch (Exception e) {
result = new RemoteOperationResult(e); result = new RemoteOperationResult(e);
} finally {
if (postMethod != null)
postMethod.releaseConnection(); // let the connection available for other methods
} }
return result; return result;
} }

View File

@ -31,13 +31,17 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.common.utils.Log_OC;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
import okhttp3.HttpUrl;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class OAuth2RefreshAccessTokenOperation extends RemoteOperation { public class OAuth2RefreshAccessTokenOperation extends RemoteOperation {
private static final String TAG = OAuth2RefreshAccessTokenOperation.class.getSimpleName(); private static final String TAG = OAuth2RefreshAccessTokenOperation.class.getSimpleName();
@ -73,70 +77,61 @@ public class OAuth2RefreshAccessTokenOperation extends RemoteOperation {
@Override @Override
protected RemoteOperationResult run(OwnCloudClient client) { protected RemoteOperationResult run(OwnCloudClient client) {
RemoteOperationResult result = null;
PostMethod postMethod = null;
try { try {
NameValuePair[] nameValuePairs = new NameValuePair[3];
nameValuePairs[0] = new NameValuePair( final RequestBody requestBody = new MultipartBody.Builder()
OAuth2Constants.KEY_GRANT_TYPE, .setType(MultipartBody.FORM)
OAuth2GrantType.REFRESH_TOKEN.getValue() // always for this operation .addFormDataPart(OAuth2Constants.KEY_GRANT_TYPE,
); OAuth2GrantType.REFRESH_TOKEN.getValue())
nameValuePairs[1] = new NameValuePair(OAuth2Constants.KEY_CLIENT_ID, mClientId); .addFormDataPart(OAuth2Constants.KEY_CLIENT_ID, mClientId)
nameValuePairs[2] = new NameValuePair(OAuth2Constants.KEY_REFRESH_TOKEN, mRefreshToken); .addFormDataPart(OAuth2Constants.KEY_REFRESH_TOKEN, mRefreshToken)
.build();
Uri.Builder uriBuilder = client.getBaseUri().buildUpon(); Uri.Builder uriBuilder = client.getBaseUri().buildUpon();
uriBuilder.appendEncodedPath(mAccessTokenEndpointPath); uriBuilder.appendEncodedPath(mAccessTokenEndpointPath);
postMethod = new PostMethod(uriBuilder.build().toString()); final PostMethod postMethod = new PostMethod(HttpUrl.parse(
postMethod.setRequestBody(nameValuePairs); client.getBaseUri().buildUpon()
.appendEncodedPath(mAccessTokenEndpointPath)
.build()
.toString()));
postMethod.setRequestBody(requestBody);
OwnCloudCredentials oauthCredentials = new OwnCloudBasicCredentials(
mClientId,
mClientSecret
);
OwnCloudCredentials oldCredentials = switchClientCredentials(oauthCredentials); final OwnCloudCredentials oauthCredentials =
new OwnCloudBasicCredentials(mClientId, mClientSecret);
client.executeMethod(postMethod);
// Do the B***S*** switch
final OwnCloudCredentials oldCredentials = switchClientCredentials(oauthCredentials);
client.executeHttpMethod(postMethod);
switchClientCredentials(oldCredentials); switchClientCredentials(oldCredentials);
String response = postMethod.getResponseBodyAsString(); final String responseData = postMethod.getResponseBodyAsString();
Log_OC.d(TAG, "OAUTH2: raw response from POST TOKEN: " + response); Log_OC.d(TAG, "OAUTH2: raw response from POST TOKEN: " + responseData);
if (response != null && response.length() > 0) { if (responseData != null && responseData.length() > 0) {
JSONObject tokenJson = new JSONObject(response); final JSONObject tokenJson = new JSONObject(responseData);
Map<String, String> accessTokenResult =
final Map<String, String> accessTokenResult =
mResponseParser.parseAccessTokenResult(tokenJson); mResponseParser.parseAccessTokenResult(tokenJson);
if (accessTokenResult.get(OAuth2Constants.KEY_ERROR) != null || final ArrayList<Object> resultData = new ArrayList<>(1);
accessTokenResult.get(OAuth2Constants.KEY_ACCESS_TOKEN) == null) { resultData.add(accessTokenResult);
result = new RemoteOperationResult(ResultCode.OAUTH2_ERROR); final RemoteOperationResult result = new RemoteOperationResult(ResultCode.OK);
result.setData(resultData);
return (accessTokenResult.get(OAuth2Constants.KEY_ERROR) != null ||
accessTokenResult.get(OAuth2Constants.KEY_ACCESS_TOKEN) == null)
? new RemoteOperationResult(ResultCode.OAUTH2_ERROR)
: result;
} else { } else {
result = new RemoteOperationResult(true, postMethod); return new RemoteOperationResult(postMethod);
ArrayList<Object> data = new ArrayList<>();
data.add(accessTokenResult);
result.setData(data);
}
} else {
result = new RemoteOperationResult(false, postMethod);
client.exhaustResponse(postMethod.getResponseBodyAsStream());
} }
} catch (Exception e) { } catch (Exception e) {
result = new RemoteOperationResult(e); return new RemoteOperationResult(e);
} finally {
if (postMethod != null) {
postMethod.releaseConnection(); // let the connection available for other methods
} }
} }
return result;
}
private OwnCloudCredentials switchClientCredentials(OwnCloudCredentials newCredentials) { private OwnCloudCredentials switchClientCredentials(OwnCloudCredentials newCredentials) {
OwnCloudCredentials previousCredentials = getClient().getCredentials(); OwnCloudCredentials previousCredentials = getClient().getCredentials();
getClient().setCredentials(newCredentials); getClient().setCredentials(newCredentials);