Skip to content

Commit 35a6504

Browse files
committed
Add OAuth support for Upload API
1 parent 046777f commit 35a6504

File tree

7 files changed

+54
-37
lines changed

7 files changed

+54
-37
lines changed

cloudinary-core/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ plugins {
99
task ciTest( type: Test )
1010

1111
dependencies {
12+
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.4'
1213
testImplementation "org.hamcrest:java-hamcrest:2.0.0.0"
1314
testImplementation group: 'pl.pragmatists', name: 'JUnitParams', version: '1.0.5'
1415
testImplementation group: 'junit', name: 'junit', version: '4.12'
@@ -108,4 +109,4 @@ if (hasProperty("ossrhPassword")) {
108109
}
109110
}
110111
}
111-
}
112+
}

cloudinary-core/src/main/java/com/cloudinary/strategies/AbstractUploaderStrategy.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import com.cloudinary.Cloudinary;
44
import com.cloudinary.ProgressCallback;
55
import com.cloudinary.Uploader;
6+
import com.cloudinary.Util;
67
import com.cloudinary.utils.ObjectUtils;
78
import com.cloudinary.utils.StringUtils;
89
import org.cloudinary.json.JSONException;
910
import org.cloudinary.json.JSONObject;
1011

12+
import org.apache.http.client.methods.HttpPost;
13+
1114
import java.io.IOException;
1215
import java.util.Arrays;
1316
import java.util.HashMap;
@@ -99,4 +102,21 @@ protected boolean requiresSigning(String action, Map options) {
99102

100103
return !unsigned && !deleteByToken;
101104
}
102-
}
105+
106+
protected HttpPost createPostMethod(String action, Map<String, Object> params, Map options) {
107+
String oauthToken = ObjectUtils.asString(options.get("oauth_token"), cloudinary().config.oauthToken);
108+
if (requiresSigning(action, options) && oauthToken == null) {
109+
uploader.signRequestParams(params, options);
110+
} else {
111+
Util.clearEmpty(params);
112+
}
113+
114+
String apiUrl = buildUploadUrl(action, options);
115+
116+
HttpPost postMethod = new HttpPost(apiUrl);
117+
if (oauthToken != null) {
118+
postMethod.setHeader("Authorization", "Bearer " + oauthToken);
119+
}
120+
return postMethod;
121+
}
122+
}

cloudinary-http42/src/main/java/com/cloudinary/http42/UploaderStrategy.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,6 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
4242

4343
boolean returnError = ObjectUtils.asBoolean(options.get("return_error"), false);
4444

45-
if (requiresSigning(action, options)) {
46-
uploader.signRequestParams(params, options);
47-
} else {
48-
Util.clearEmpty(params);
49-
}
50-
51-
String apiUrl = buildUploadUrl(action, options);
52-
5345
ClientConnectionManager connectionManager = (ClientConnectionManager) this.uploader.cloudinary().config.properties.get("connectionManager");
5446
HttpClient client = new DefaultHttpClient(connectionManager);
5547

@@ -59,7 +51,7 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
5951
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
6052
}
6153

62-
HttpPost postMethod = new HttpPost(apiUrl);
54+
HttpPost postMethod = createPostMethod(action, params, options);
6355
postMethod.setHeader("User-Agent", this.cloudinary().getUserAgent() + " ApacheHTTPComponents/4.2");
6456

6557
Map<String, String> extraHeaders = (Map<String, String>) options.get("extra_headers");

cloudinary-http43/src/main/java/com/cloudinary/http43/UploaderStrategy.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,7 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
6767

6868
boolean returnError = ObjectUtils.asBoolean(options.get("return_error"), false);
6969

70-
if (requiresSigning(action, options)) {
71-
uploader.signRequestParams(params, options);
72-
} else {
73-
Util.clearEmpty(params);
74-
}
75-
76-
String apiUrl = buildUploadUrl(action, options);
77-
78-
HttpPost postMethod = new HttpPost(apiUrl);
70+
HttpPost postMethod = createPostMethod(action, params, options);
7971
ApiUtils.setTimeouts(postMethod, options);
8072

8173
Map<String, String> extraHeaders = (Map<String, String>) options.get("extra_headers");

cloudinary-http44/src/main/java/com/cloudinary/http44/UploaderStrategy.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,8 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
6868

6969
boolean returnError = ObjectUtils.asBoolean(options.get("return_error"), false);
7070

71-
if (requiresSigning(action, options)) {
72-
uploader.signRequestParams(params, options);
73-
} else {
74-
Util.clearEmpty(params);
75-
}
76-
77-
String apiUrl = buildUploadUrl(action, options);
71+
HttpPost postMethod = createPostMethod(action, params, options);
7872

79-
HttpPost postMethod = new HttpPost(apiUrl);
8073
ApiUtils.setTimeouts(postMethod, options);
8174

8275
Map<String, String> extraHeaders = (Map<String, String>) options.get("extra_headers");

cloudinary-http45/src/main/java/com/cloudinary/http45/UploaderStrategy.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,7 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
6464

6565
boolean returnError = ObjectUtils.asBoolean(options.get("return_error"), false);
6666

67-
if (requiresSigning(action, options)) {
68-
uploader.signRequestParams(params, options);
69-
} else {
70-
Util.clearEmpty(params);
71-
}
72-
73-
String apiUrl = buildUploadUrl(action, options);
74-
75-
HttpPost postMethod = new HttpPost(apiUrl);
67+
HttpPost postMethod = createPostMethod(action, params, options);
7668
ApiUtils.setTimeouts(postMethod, options);
7769

7870
Map<String, String> extraHeaders = (Map<String, String>) options.get("extra_headers");

cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractUploaderTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.cloudinary.utils.ObjectUtils;
77
import com.cloudinary.utils.Rectangle;
88
import org.cloudinary.json.JSONArray;
9+
import org.hamcrest.CoreMatchers;
910
import org.junit.*;
1011
import org.junit.rules.TestName;
1112

@@ -785,6 +786,32 @@ public void testAccessibilityAnalysisUpload() throws IOException {
785786
assertNotNull(result.get("accessibility_analysis"));
786787
}
787788

789+
@Test(expected = RuntimeException.class)
790+
public void testOAuthInUploadOptions() throws Exception {
791+
try {
792+
cloudinary.config.oauthToken = "some_invalid_token";
793+
cloudinary.uploader().upload(SRC_TEST_IMAGE, asMap("accessibility_analysis", true, "tags", Arrays.asList(SDK_TEST_TAG, UPLOADER_TAG), "oauth_token", "foo"));
794+
} catch(RuntimeException e) {
795+
assertThat(e.getMessage(), CoreMatchers.containsString("Invalid token"));
796+
throw e;
797+
} finally {
798+
cloudinary.config.oauthToken = null;
799+
}
800+
}
801+
802+
@Test(expected = RuntimeException.class)
803+
public void testOAuthInUploadConfig() throws Exception {
804+
try {
805+
cloudinary.config.oauthToken = "some_invalid_token";
806+
cloudinary.uploader().upload(SRC_TEST_IMAGE, asMap("accessibility_analysis", true, "tags", Arrays.asList(SDK_TEST_TAG, UPLOADER_TAG)));
807+
} catch(RuntimeException e) {
808+
assertThat(e.getMessage(), CoreMatchers.containsString("Invalid token"));
809+
throw e;
810+
} finally {
811+
cloudinary.config.oauthToken = null;
812+
}
813+
}
814+
788815
private void addToDeleteList(String type, String id) {
789816
Set<String> ids = toDelete.get(type);
790817
if (ids == null) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy