package com.mediafire.sdk.util;
import com.mediafire.sdk.MFRuntimeException;
import com.mediafire.sdk.requests.ApiPostRequest;
import com.mediafire.sdk.requests.UploadPostRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class RequestUtil {
private static final String UTF8 = "UTF-8";
private RequestUtil() {
// no instantiation, utility class
}
public static Map<String, String> makeHeadersFromApiRequest(ApiPostRequest apiPostRequest) {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Accept-Charset", "UTF-8");
headers.put("Content-Length", String.valueOf(apiPostRequest.getQueryString(true).getBytes().length));
headers.put("Content-Type", "application/x-www-form-urlencoded;charset=" + UTF8);
return headers;
}
public static byte[] makeQueryPayloadFromApiRequest(ApiPostRequest apiPostRequest) {
return apiPostRequest.getQueryString(true).getBytes();
}
public static String makeQueryStringFromMap(Map<String, Object> query, boolean encoded) {
try {
StringBuilder sb = new StringBuilder();
for (String key : query.keySet()) {
sb.append(constructQueryKVPair(key, query.get(key), encoded));
}
return sb.toString().replaceFirst("&", "");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new MFRuntimeException("SDK error while encoding using charset " + UTF8, e);
}
}
public static String makeUrlFromApiRequest(ApiPostRequest apiPostRequest) {
return apiPostRequest.getScheme() + "://" + apiPostRequest.getDomain() + apiPostRequest.getPath();
}
public static String makeUrlFromUploadRequest(UploadPostRequest uploadRequest) {
return makeUrlFromApiRequest(uploadRequest) + "?" + uploadRequest.getQueryString(true);
}
private static String constructQueryKVPair(String key, Object value, boolean encoded) throws UnsupportedEncodingException {
if (encoded) {
return "&" + key + "=" + URLEncoder.encode(String.valueOf(value), UTF8);
} else {
return "&" + key + "=" + value;
}
}
public static String makeSignatureForApiRequest(long secretKey, String time, ApiPostRequest apiPostRequest) {
long secretKeyMod256 = secretKey % 256;
String path = apiPostRequest.getPath();
String queryMap = apiPostRequest.getQueryString(false);
String hashTarget = secretKeyMod256 + time + path + "?" + queryMap;
return HashUtil.md5(hashTarget);
}
}