11package com .github .scribejava .apis .service ;
22
3- import java .io .UnsupportedEncodingException ;
4- import java .net .URLDecoder ;
5- import org .apache .commons .codec .CharEncoding ;
6- import static org .apache .commons .codec .digest .DigestUtils .md5Hex ;
73import com .github .scribejava .core .builder .api .DefaultApi20 ;
84import com .github .scribejava .core .model .OAuth2AccessToken ;
95import com .github .scribejava .core .model .OAuthConfig ;
106import com .github .scribejava .core .model .OAuthRequest ;
7+ import com .github .scribejava .core .model .Parameter ;
8+ import com .github .scribejava .core .model .ParameterList ;
119import com .github .scribejava .core .oauth .OAuth20Service ;
12- import java .util .Arrays ;
10+
11+ import org .apache .commons .codec .CharEncoding ;
12+
13+ import java .io .UnsupportedEncodingException ;
14+ import java .net .URLDecoder ;
15+ import java .util .Collections ;
16+ import java .util .List ;
17+
18+ import static org .apache .commons .codec .digest .DigestUtils .md5Hex ;
1319
1420public class OdnoklassnikiServiceImpl extends OAuth20Service {
1521
@@ -23,20 +29,19 @@ public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) {
2329 try {
2430 final String tokenDigest = md5Hex (accessToken .getAccessToken () + getConfig ().getApiSecret ());
2531
26- final String completeUrl = request .getCompleteUrl ();
27- final int queryIndex = completeUrl .indexOf ('?' );
28- if (queryIndex != -1 ) {
29- final String [] params = completeUrl .substring (queryIndex + 1 ).split ("&" );
30- Arrays .sort (params );
31- final StringBuilder builder = new StringBuilder ();
32- for (String param : params ) {
33- builder .append (param );
34- }
35-
36- final String sigSource = URLDecoder .decode (builder .toString (), CharEncoding .UTF_8 ) + tokenDigest ;
37- request .addQuerystringParameter ("sig" , md5Hex (sigSource ).toLowerCase ());
32+ final ParameterList queryParams = request .getQueryStringParams ();
33+ queryParams .addAll (request .getBodyParams ());
34+ final List <Parameter > allParams = queryParams .getParams ();
35+
36+ Collections .sort (allParams );
37+ final StringBuilder builder = new StringBuilder ();
38+ for (Parameter param : allParams ) {
39+ builder .append (param .getKey ()).append ('=' ).append (param .getValue ());
3840 }
3941
42+ final String sigSource = URLDecoder .decode (builder .toString (), CharEncoding .UTF_8 ) + tokenDigest ;
43+ request .addQuerystringParameter ("sig" , md5Hex (sigSource ).toLowerCase ());
44+
4045 super .signRequest (accessToken , request );
4146 } catch (UnsupportedEncodingException unex ) {
4247 throw new IllegalStateException (unex );
0 commit comments