Skip to content

Feature/provisioning api #176

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Aug 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ branches:
- staging-test

# ciTest is configured to skip the various timeout tests that don't work in travis
script: ./gradlew clean -DCLOUDINARY_URL=$CLOUDINARY_URL ciTest -p cloudinary-${MODULE} -i
script: ./gradlew clean -DCLOUDINARY_URL=$CLOUDINARY_URL -DCLOUDINARY_PROVISIONING_CONFIG=$CLOUDINARY_PROVISIONING_CONFIG ciTest -p cloudinary-${MODULE} -i

4 changes: 4 additions & 0 deletions cloudinary-core/src/main/java/com/cloudinary/Api.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
public class Api {


public AbstractApiStrategy getStrategy() {
return strategy;
}

public enum HttpMethod {GET, POST, PUT, DELETE;}
public final static Map<Integer, Class<? extends Exception>> CLOUDINARY_API_ERROR_CLASSES = new HashMap<Integer, Class<? extends Exception>>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class Cloudinary {
"com.cloudinary.http42.UploaderStrategy",
"com.cloudinary.http43.UploaderStrategy",
"com.cloudinary.http44.UploaderStrategy"));
private static List<String> API_STRATEGIES = new ArrayList<String>(Arrays.asList(
public static List<String> API_STRATEGIES = new ArrayList<String>(Arrays.asList(
"com.cloudinary.android.ApiStrategy",
"com.cloudinary.http42.ApiStrategy",
"com.cloudinary.http43.ApiStrategy",
Expand Down
412 changes: 412 additions & 0 deletions cloudinary-core/src/main/java/com/cloudinary/provisioning/Account.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.cloudinary.provisioning;

import com.cloudinary.utils.StringUtils;

import java.net.URI;

public class AccountConfiguration {
private static final String SEPARATOR = ":";
String accountId;
String provisioningApiKey;
String provisioningApiSecret;

public AccountConfiguration(String accountId, String provisioningApiKey, String provisioningApiSecret) {
this.accountId = accountId;
this.provisioningApiKey = provisioningApiKey;
this.provisioningApiSecret = provisioningApiSecret;
}

public static AccountConfiguration from(String accountUrl) {
URI uri = URI.create(accountUrl);

String accountId = uri.getHost();
if (StringUtils.isBlank(accountId)) throw new IllegalArgumentException("Account id must be provided in account url");

if (uri.getUserInfo() == null) throw new IllegalArgumentException("Full credentials (key+secret) must be provided in account url");
String[] credentials = uri.getUserInfo().split(":");
if (credentials.length < 2 ||
StringUtils.isBlank(credentials[0]) ||
StringUtils.isBlank(credentials[1])) {
throw new IllegalArgumentException("Full credentials (key+secret) must be provided in account url");
}

return new AccountConfiguration(accountId, credentials[0], credentials[1]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ public void init(Api api) {

@SuppressWarnings("rawtypes")
public abstract ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String, ? extends Object> params, Map options) throws Exception;

public abstract ApiResponse callAccountApi(HttpMethod method, Iterable<String> uri, Map<String, ? extends Object> params, Map options) throws Exception;
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package com.cloudinary.http42;

import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.Arrays;
import java.util.Map;

import com.cloudinary.Api;
import com.cloudinary.Api.HttpMethod;
import com.cloudinary.Cloudinary;
import com.cloudinary.api.ApiResponse;
import com.cloudinary.api.exceptions.GeneralError;
import com.cloudinary.http42.api.Response;
import com.cloudinary.strategies.AbstractApiStrategy;
import com.cloudinary.utils.Base64Coder;
import com.cloudinary.utils.ObjectUtils;
import com.cloudinary.utils.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URIBuilder;
Expand All @@ -19,15 +22,11 @@
import org.cloudinary.json.JSONException;
import org.cloudinary.json.JSONObject;

import com.cloudinary.Api;
import com.cloudinary.Api.HttpMethod;
import com.cloudinary.Cloudinary;
import com.cloudinary.api.ApiResponse;
import com.cloudinary.api.exceptions.GeneralError;
import com.cloudinary.http42.api.Response;
import com.cloudinary.utils.Base64Coder;
import com.cloudinary.utils.ObjectUtils;
import com.cloudinary.utils.StringUtils;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.Arrays;
import java.util.Map;

public class ApiStrategy extends AbstractApiStrategy {

Expand All @@ -50,6 +49,28 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
apiUrl = apiUrl + "/" + component;
}

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

@Override
public ApiResponse callAccountApi(HttpMethod method, Iterable<String> uri, Map<String, ?> params, Map options) throws Exception {
String prefix = ObjectUtils.asString(options.get("upload_prefix"), "https://api.cloudinary.com");
String apiKey = ObjectUtils.asString(options.get("provisioning_api_key"));
if (apiKey == null) throw new IllegalArgumentException("Must supply provisioning_api_key");
String apiSecret = ObjectUtils.asString(options.get("provisioning_api_secret"));
if (apiSecret == null) throw new IllegalArgumentException("Must supply provisioning_api_secret");
String contentType = ObjectUtils.asString(options.get("content_type"), "urlencoded");
int timeout = ObjectUtils.asInteger(options.get("timeout"), this.api.cloudinary.config.timeout);

String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1"), "/");
for (String component : uri) {
apiUrl = apiUrl + "/" + component;
}

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

private ApiResponse getApiResponse(HttpMethod method, Map<String, ?> params, String apiKey, String apiSecret, String contentType, int timeout, String apiUrl) throws Exception {
URIBuilder apiUrlBuilder = new URIBuilder(apiUrl);
if (!contentType.equals("json")) {
for (Map.Entry<String, ? extends Object> param : params.entrySet()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.cloudinary.test;

public class AccountApiTest extends AbstractAccountApiTest {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.cloudinary.test;

public class ContextTest extends AbstractContextTest {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.cloudinary.utils.StringUtils;
import org.apache.http.Consts;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
Expand All @@ -22,7 +21,6 @@
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.cloudinary.json.JSONException;
import org.cloudinary.json.JSONObject;

Expand All @@ -32,7 +30,6 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

Expand Down Expand Up @@ -95,6 +92,10 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,

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

return getApiResponse(request);
}

private ApiResponse getApiResponse(HttpUriRequest request) throws Exception {
String responseData = null;
int code = 0;
CloseableHttpResponse response = client.execute(request);
Expand Down Expand Up @@ -128,6 +129,29 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
}
}

@Override
public ApiResponse callAccountApi(HttpMethod method, Iterable<String> uri, Map<String, ?> params, Map options) throws Exception {
if (options == null)
options = ObjectUtils.emptyMap();

String prefix = ObjectUtils.asString(options.get("upload_prefix"), "https://api.cloudinary.com");
String apiKey = ObjectUtils.asString(options.get("provisioning_api_key"));
if (apiKey == null) throw new IllegalArgumentException("Must supply provisioning_api_key");
String apiSecret = ObjectUtils.asString(options.get("provisioning_api_secret"));
if (apiSecret == null) throw new IllegalArgumentException("Must supply provisioning_api_secret");

String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1"), "/");
for (String component : uri) {
apiUrl = apiUrl + "/" + component;
}

HttpUriRequest request = prepareRequest(method, apiUrl, params, options);

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

return getApiResponse(request);
}

/**
* Prepare a request with the URL and parameters based on the HTTP method used
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.cloudinary.test;

public class AccountApiTest extends AbstractAccountApiTest {
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,

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

return getApiResponse(request);
}

private ApiResponse getApiResponse(HttpUriRequest request) throws Exception {
String responseData = null;
int code = 0;
CloseableHttpResponse response = client.execute(request);
Expand Down Expand Up @@ -127,6 +131,29 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
}
}

@Override
public ApiResponse callAccountApi(HttpMethod method, Iterable<String> uri, Map<String, ?> params, Map options) throws Exception {
if (options == null)
options = ObjectUtils.emptyMap();

String prefix = ObjectUtils.asString(options.get("upload_prefix"), "https://api.cloudinary.com");
String apiKey = ObjectUtils.asString(options.get("provisioning_api_key"));
if (apiKey == null) throw new IllegalArgumentException("Must supply provisioning_api_key");
String apiSecret = ObjectUtils.asString(options.get("provisioning_api_secret"));
if (apiSecret == null) throw new IllegalArgumentException("Must supply provisioning_api_secret");

String apiUrl = StringUtils.join(Arrays.asList(prefix, "v1_1"), "/");
for (String component : uri) {
apiUrl = apiUrl + "/" + component;
}

HttpUriRequest request = prepareRequest(method, apiUrl, params, options);

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

return getApiResponse(request);
}

/**
* Prepare a request with the URL and parameters based on the HTTP method used
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.cloudinary.test;

public class AccountApiTest extends AbstractAccountApiTest {
}
Loading