Skip to content

Commit dc3c5f1

Browse files
michalkcloudinaynitzanj
authored andcommitted
Encode URLs in API calls (#186)
1 parent e4cf92f commit dc3c5f1

File tree

5 files changed

+27
-15
lines changed

5 files changed

+27
-15
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,31 @@
22

33
import com.cloudinary.Api;
44
import com.cloudinary.Api.HttpMethod;
5+
import com.cloudinary.SmartUrlEncoder;
56
import com.cloudinary.api.ApiResponse;
6-
7+
import com.cloudinary.utils.StringUtils;
8+
import java.util.Arrays;
79
import java.util.Map;
810

11+
912
public abstract class AbstractApiStrategy {
1013
protected Api api;
1114

1215
public void init(Api api) {
1316
this.api = api;
1417
}
1518

19+
protected String createApiUrl (Iterable<String> uri, String prefix, String cloudName){
20+
21+
String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1", cloudName), "/");
22+
for (String component : uri) {
23+
component = SmartUrlEncoder.encode(component);
24+
apiUrl = apiUrl + "/" + component;
25+
26+
}
27+
return apiUrl;
28+
}
29+
1630
@SuppressWarnings("rawtypes")
1731
public abstract ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String, ? extends Object> params, Map options) throws Exception;
1832

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,7 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
4343
if (apiSecret == null) throw new IllegalArgumentException("Must supply api_secret");
4444
String contentType = ObjectUtils.asString(options.get("content_type"), "urlencoded");
4545
int timeout = ObjectUtils.asInteger(options.get("timeout"), this.api.cloudinary.config.timeout);
46-
String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1", cloudName), "/");
47-
48-
for (String component : uri) {
49-
apiUrl = apiUrl + "/" + component;
50-
}
46+
String apiUrl = createApiUrl(uri, prefix, cloudName);
5147

5248
return getApiResponse(method, params, apiKey, apiSecret, contentType, timeout, apiUrl);
5349
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,7 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
8484
if (apiSecret == null) throw new IllegalArgumentException("Must supply api_secret");
8585

8686

87-
String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1", cloudName), "/");
88-
for (String component : uri) {
89-
apiUrl = apiUrl + "/" + component;
90-
}
87+
String apiUrl = createApiUrl(uri, prefix, cloudName);
9188
HttpUriRequest request = prepareRequest(method, apiUrl, params, options);
9289

9390
request.setHeader("Authorization", "Basic " + Base64Coder.encodeString(apiKey + ":" + apiSecret));

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,7 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
8686
if (apiSecret == null) throw new IllegalArgumentException("Must supply api_secret");
8787

8888

89-
String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1", cloudName), "/");
90-
for (String component : uri) {
91-
apiUrl = apiUrl + "/" + component;
92-
}
89+
String apiUrl = createApiUrl(uri, prefix, cloudName);
9390
HttpUriRequest request = prepareRequest(method, apiUrl, params, options);
9491

9592
request.setHeader("Authorization", "Basic " + Base64Coder.encodeString(apiKey + ":" + apiSecret));
@@ -204,4 +201,4 @@ private HttpUriRequest prepareRequest(HttpMethod method, String apiUrl, Map<Stri
204201
setTimeouts(request, options);
205202
return request;
206203
}
207-
}
204+
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,14 @@ public void testRestore() throws Exception {
793793
assertEquals(resource.get("bytes"), 3381);
794794
}
795795

796+
@Test
797+
public void testEncodeUrlInApiCall() throws Exception {
798+
String apiTestEncodeUrlInApiCall = "sub^folder test";
799+
createdFolders.add(apiTestEncodeUrlInApiCall);
800+
Map result = api.createFolder(apiTestEncodeUrlInApiCall, null);
801+
assertEquals("sub^folder test", result.get("path"));
802+
}
803+
796804
@Test
797805
public void testUploadMapping() throws Exception {
798806
String aptTestUploadMapping = "api_test_upload_mapping" + SUFFIX;

0 commit comments

Comments
 (0)