package com.alipay.easysdk.kms.aliyun.credentials.utils;
|
|
import com.alipay.easysdk.kms.aliyun.credentials.http.MethodType;
|
|
import java.io.UnsupportedEncodingException;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
public class ParameterUtils {
|
private final static String TIME_ZONE = "UTC";
|
private final static String FORMAT_ISO8601 = "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
private final static String SEPARATOR = "&";
|
public static final String ENCODING = "UTF-8";
|
private static final String ALGORITHM_NAME = "HmacSHA1";
|
|
public static String getUniqueNonce() {
|
StringBuilder uniqueNonce = new StringBuilder();
|
UUID uuid = UUID.randomUUID();
|
uniqueNonce.append(uuid.toString());
|
uniqueNonce.append(System.currentTimeMillis());
|
uniqueNonce.append(Thread.currentThread().getId());
|
return uniqueNonce.toString();
|
}
|
|
public static String getISO8601Time(Date date) {
|
SimpleDateFormat df = new SimpleDateFormat(FORMAT_ISO8601);
|
df.setTimeZone(new SimpleTimeZone(0, TIME_ZONE));
|
return df.format(date);
|
}
|
|
public static Date getUTCDate(String date) throws ParseException {
|
SimpleDateFormat df = new SimpleDateFormat(FORMAT_ISO8601);
|
df.setTimeZone(new SimpleTimeZone(0, TIME_ZONE));
|
return df.parse(date);
|
}
|
|
public String composeStringToSign(MethodType method, Map<String, String> queries) throws UnsupportedEncodingException {
|
String[] sortedKeys = queries.keySet().toArray(new String[]{});
|
Arrays.sort(sortedKeys);
|
StringBuilder canonicalizedQueryString = new StringBuilder();
|
|
for (String key : sortedKeys) {
|
if (!StringUtils.isEmpty(queries.get(key))) {
|
canonicalizedQueryString.append("&")
|
.append(AcsURLEncoder.percentEncode(key)).append("=")
|
.append(AcsURLEncoder.percentEncode(queries.get(key)));
|
}
|
}
|
|
return method.toString() +
|
SEPARATOR +
|
AcsURLEncoder.percentEncode("/") +
|
SEPARATOR +
|
AcsURLEncoder.percentEncode(canonicalizedQueryString.toString().substring(1));
|
}
|
|
public String composeUrl(String endpoint, Map<String, String> queries, String protocol) throws UnsupportedEncodingException {
|
StringBuilder urlBuilder = new StringBuilder("");
|
urlBuilder.append(protocol);
|
urlBuilder.append("://").append(endpoint);
|
urlBuilder.append("/?");
|
StringBuilder builder = new StringBuilder("");
|
|
for (Map.Entry<String, String> entry : queries.entrySet()) {
|
String key = entry.getKey();
|
String val = entry.getValue();
|
if (val == null) {
|
continue;
|
}
|
builder.append(AcsURLEncoder.encode(key));
|
builder.append("=").append(AcsURLEncoder.encode(val));
|
builder.append("&");
|
}
|
|
int strIndex = builder.length();
|
builder.deleteCharAt(strIndex - 1);
|
String query = builder.toString();
|
return urlBuilder.append(query).toString();
|
}
|
}
|