![JAR search and dependency download from the Maven repository](/logo.png)
com.azuqua.java.Azuqua Maven / Gradle / Ivy
package com.azuqua.java;
import com.azuqua.java.callbacks.AsyncRequest;
import com.azuqua.java.callbacks.OrgFLOsRequest;
import com.azuqua.java.models.AzuquaError;
import com.azuqua.java.models.FLO;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
/**
* Created by SASi on 14-Jul-16.
*/
public class Azuqua {
final private static char[] hexArray = "0123456789ABCDEF".toCharArray();
private Gson gson = new Gson();
private RequestHandler requestHandler;
private String accessKey;
private String accessSecret;
private Routes routes = new Routes();
public Azuqua(String accessKey, String accessSecret) {
this.accessKey = accessKey;
this.accessSecret = accessSecret;
}
public Azuqua(String accessKey, String accessSecret, String protocol, String host, int port) {
this.accessKey = accessKey;
this.accessSecret = accessSecret;
routes.setProtocol(protocol);
routes.setHost(host);
routes.setPort(port);
}
public void getFLOs(final OrgFLOsRequest orgFLOsRequest) {
String timeStamp = getISOTime();
String signedData = signDate("", Routes.METHOD_GET, Routes.ORG_FLOS, accessSecret, timeStamp);
requestHandler = new RequestHandler(routes, Routes.ORG_FLOS, Routes.METHOD_GET, "", timeStamp, signedData,
accessKey, new AsyncRequest() {
@Override
public void onResponse(String response) {
Type collectionType = new TypeToken>() {
}.getType();
List flos = gson.fromJson(response, collectionType);
orgFLOsRequest.onResponse(flos);
}
@Override
public void onError(AzuquaError azuquaError) {
orgFLOsRequest.onError(azuquaError);
}
});
requestHandler.execute();
}
public void readFLO(String alias, final AsyncRequest asyncRequest) {
String path = Routes.FLO_READ.replace(":alias", alias);
String timeStamp = getISOTime();
String signedData = signDate("", Routes.METHOD_GET, path, accessSecret, timeStamp);
requestHandler = new RequestHandler(routes, path, Routes.METHOD_GET, "", timeStamp, signedData, accessKey, new AsyncRequest() {
@Override
public void onResponse(String response) {
asyncRequest.onResponse(response);
}
@Override
public void onError(AzuquaError azuquaError) {
asyncRequest.onError(azuquaError);
}
});
requestHandler.execute();
}
public void invokeFLO(String alias, String data, AsyncRequest asyncRequest) {
runFLO(alias, data, asyncRequest);
}
public void runFLO(String alias, String data, final AsyncRequest asyncRequest) {
String path = Routes.FLO_INVOKE.replace(":alias", alias);
String timeStamp = getISOTime();
String signedData = signDate(data, Routes.METHOD_POST, path, accessSecret, timeStamp);
requestHandler = new RequestHandler(routes, path, Routes.METHOD_POST, data, timeStamp, signedData, accessKey, new AsyncRequest() {
@Override
public void onResponse(String response) {
asyncRequest.onResponse(response);
}
@Override
public void onError(AzuquaError error) {
asyncRequest.onError(error);
}
});
requestHandler.execute();
}
/**
* Time Stamp
*/
private String getISOTime() {
TimeZone timeZone = TimeZone.getTimeZone("UTC");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormat.setTimeZone(timeZone);
return dateFormat.format(new Date());
}
/**
* Generate Hex from byte data
*/
private String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
/**
* Generate HASH
*/
private String signDate(String data, String method, String path, String accessSecret, String timeStamp) {
Mac hMac = null;
SecretKeySpec key = null;
String meta = method.toLowerCase() + ":" + path + ":" + timeStamp;
String dataToDigest = meta + data;
String hash = null;
try {
hMac = Mac.getInstance("HmacSHA256");
key = new SecretKeySpec(accessSecret.getBytes("UTF-8"), "HmacSHA256");
hMac.init(key);
byte[] digest = hMac.doFinal(dataToDigest.getBytes("UTF-8"));
hash = bytesToHex(digest).toLowerCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return hash;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy