package com.github.scribejava.apis.service;
import com.github.scribejava.core.builder.api.DefaultApi20;
import com.github.scribejava.core.model.OAuth2AccessToken;
import com.github.scribejava.core.model.OAuthConfig;
import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Parameter;
import com.github.scribejava.core.model.ParameterList;
import com.github.scribejava.core.oauth.OAuth20Service;
import org.apache.commons.codec.CharEncoding;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collections;
import java.util.List;
import static org.apache.commons.codec.digest.DigestUtils.md5Hex;
public class OdnoklassnikiServiceImpl extends OAuth20Service {
public OdnoklassnikiServiceImpl(DefaultApi20 api, OAuthConfig config) {
super(api, config);
}
@Override
public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) {
//sig = lower(md5( sorted_request_params_composed_string + md5(access_token + application_secret_key)))
try {
final String tokenDigest = md5Hex(accessToken.getAccessToken() + getConfig().getApiSecret());
final ParameterList queryParams = request.getQueryStringParams();
queryParams.addAll(request.getBodyParams());
final List<Parameter> allParams = queryParams.getParams();
Collections.sort(allParams);
final StringBuilder builder = new StringBuilder();
for (Parameter param : allParams) {
builder.append(param.getKey()).append('=').append(param.getValue());
}
final String sigSource = URLDecoder.decode(builder.toString(), CharEncoding.UTF_8) + tokenDigest;
request.addQuerystringParameter("sig", md5Hex(sigSource).toLowerCase());
super.signRequest(accessToken, request);
} catch (UnsupportedEncodingException unex) {
throw new IllegalStateException(unex);
}
}
}