package jnpf.yozo.client; import jnpf.util.StringUtil; import jnpf.yozo.utils.SecretSignatureUtils; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Iterator; import java.util.Map; public class UaaAppAuthenticator implements AppAuthenticator { public static final String OPEN_PARAM_PREFIX = "y_"; public static final String OPEN_PARAM_APPID = "y_appid"; public static final String OPEN_PARAM_SIGN = "y_SIGN"; private String signParamName; private String paramNamePrefix; private String appidParamName; public UaaAppAuthenticator() { } public UaaAppAuthenticator(String signParamName, String paramNamePrefix, String appidParamName) { this.signParamName = signParamName; this.paramNamePrefix = paramNamePrefix; this.appidParamName = appidParamName; } public String getSignParamName() { return this.signParamName; } public void setSignParamName(String signParamName) { this.signParamName = signParamName; } public String getParamNamePrefix() { return this.paramNamePrefix; } public void setParamNamePrefix(String paramNamePrefix) { this.paramNamePrefix = paramNamePrefix; } public String getAppidParamName() { return this.appidParamName; } public void setAppidParamName(String appidParamName) { this.appidParamName = appidParamName; } public String generateSign(String secret, Map params) throws NoSuchAlgorithmException, InvalidKeyException { String fullParamStr = this.uniqSortParams(params); return SecretSignatureUtils.hmacSHA256(fullParamStr, secret); } private String uniqSortParams(Map params) { boolean prefix = StringUtil.isNotEmpty(this.paramNamePrefix); params.remove(this.signParamName); String[] paramKeys = new String[params.size()]; int idx = 0; Iterator var5 = params.keySet().iterator(); while(true) { String param; do { if (!var5.hasNext()) { Arrays.sort(paramKeys, 0, idx); StringBuilder builder = new StringBuilder(); for (String key : paramKeys) { String[] values = params.get(key); if (values != null && values.length > 0) { Arrays.sort(values); for (String val : values) { builder.append(key).append("=").append(val); } } else { builder.append(key).append("="); } } return builder.toString(); } param = var5.next(); } while(prefix && param.startsWith(this.paramNamePrefix)); paramKeys[idx++] = param; } } }