All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alipay.api.kms.aliyun.utils.ParameterUtils Maven / Gradle / Ivy

package com.alipay.api.kms.aliyun.utils;

import com.alibaba.fastjson.JSON;
import com.alipay.api.kms.aliyun.http.FormatType;
import com.alipay.api.kms.aliyun.http.MethodType;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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 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 static String composeStringToSign(MethodType method, Map 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 static Map refreshSignParameters(Map parameters, String accessKeyId, FormatType format) {
        Map immutableMap = new HashMap(parameters);
        immutableMap.put("Timestamp", getISO8601Time(new Date()));
        immutableMap.put("SignatureMethod", HmacSHA1Signer.getSignerName());
        immutableMap.put("SignatureVersion", HmacSHA1Signer.getSignerVersion());
        immutableMap.put("SignatureNonce", getUniqueNonce());
        immutableMap.put("AccessKeyId", accessKeyId);
        if (null != format) {
            immutableMap.put("Format", format.toString());
        }
        return immutableMap;
    }

    public static String concatQueryString(Map parameters) throws UnsupportedEncodingException {
        if (null == parameters) {
            return null;
        }
        StringBuilder urlBuilder = new StringBuilder();
        for (Map.Entry entry : parameters.entrySet()) {
            String key = entry.getKey();
            String val = entry.getValue();
            urlBuilder.append(AcsURLEncoder.encode(key));
            if (val != null) {
                urlBuilder.append("=").append(AcsURLEncoder.encode(val));
            }
            urlBuilder.append("&");
        }
        int strIndex = urlBuilder.length();
        if (parameters.size() > 0) {
            urlBuilder.deleteCharAt(strIndex - 1);
        }
        return urlBuilder.toString();
    }

    public static String composeUrl(String endpoint, Map queries, String protocol) throws UnsupportedEncodingException {
        StringBuilder urlBuilder = new StringBuilder();
        urlBuilder.append(protocol);
        urlBuilder.append("://").append(endpoint);
        if (-1 == urlBuilder.indexOf("?")) {
            urlBuilder.append("/?");
        }
        String query = concatQueryString(queries);
        return urlBuilder.append(query).toString();
    }

    public static byte[] getJsonData(Map params) throws UnsupportedEncodingException {
        String json = JSON.toJSONString(params);
        return json.getBytes("UTF-8");
    }

    public static byte[] getXmlData(Map params) throws UnsupportedEncodingException {
        StringBuilder xml = new StringBuilder();
        xml.append("");
        for (Map.Entry entry : params.entrySet()) {
            xml.append("<").append(entry.getKey()).append(">");
            xml.append(entry.getValue());
            xml.append("");
        }
        return xml.toString().getBytes("UTF-8");
    }

    public static byte[] getFormData(Map params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for (Map.Entry entry : params.entrySet()) {
            if (first) {
                first = false;
            } else {
                result.append("&");
            }
            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }
        return result.toString().getBytes("UTF-8");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy