in src/main/java/com/twitter/joauth/Normalizer.java [76:133]
public String normalize(
String scheme,
String host,
int port,
String verb,
String path,
List<Request.Pair> params,
OAuthParams.OAuth1Params oAuth1Params
) {
// We only need the stringbuilder for the duration of this method
StringBuilder paramsBuilder = new StringBuilder(512);
// first, concatenate the params and the oAuth1Params together.
// the parameters are already URLEncoded, so we leave them alone
ArrayList<Request.Pair> sigParams = new ArrayList<Request.Pair>();
sigParams.addAll(params);
sigParams.addAll(oAuth1Params.toList(false));
Collections.sort(sigParams, new Comparator<Request.Pair>() {
@Override
public int compare(Request.Pair thisPair, Request.Pair thatPair) {
// sort params first by key, then by value
int keyCompare = thisPair.key.compareTo(thatPair.key);
if (keyCompare == 0) {
return thisPair.value.compareTo(thatPair.value);
} else {
return keyCompare;
}
}
});
if (!sigParams.isEmpty()) {
Request.Pair head = sigParams.get(0);
paramsBuilder.append(head.key).append('=').append(head.value);
for (int i=1; i<sigParams.size(); i++) {
Request.Pair pair = sigParams.get(i);
paramsBuilder.append('&').append(pair.key).append('=').append(pair.value);
}
}
StringBuilder requestUrlBuilder = new StringBuilder(512);
requestUrlBuilder.append(scheme.toLowerCase());
requestUrlBuilder.append("://");
requestUrlBuilder.append(host.toLowerCase());
if (includePortString(port, scheme)) {
requestUrlBuilder.append(":").append(port);
}
requestUrlBuilder.append(path);
StringBuilder normalizedBuilder = new StringBuilder(512);
normalizedBuilder.append(verb.toUpperCase());
normalizedBuilder.append('&').append(UrlCodec.encode(requestUrlBuilder.toString()));
normalizedBuilder.append('&').append(UrlCodec.encode(paramsBuilder.toString()));
return normalizedBuilder.toString();
}