package com.socioboard.t_board_pro.twitterapi; import java.net.URLEncoder; import java.security.Key; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.http.message.BasicNameValuePair; public class OAuthSignaturesGeneratorSorted { public static final String ENCODING = "UTF-8"; public static final String VERSION_1_0 = "1.0"; public static final String FORM_ENCODED = "application/x-www-form-urlencoded"; public static final String OAUTH_CONSUMER_KEY = "oauth_consumer_key"; public static final String OAUTH_TOKEN = "oauth_token"; public static final String OAUTH_TOKEN_SECRET = "oauth_token_secret"; public static final String OAUTH_SIGNATURE_METHOD = "oauth_signature_method"; public static final String OAUTH_SIGNATURE = "oauth_signature"; public static final String OAUTH_TIMESTAMP = "oauth_timestamp"; public static final String OAUTH_NONCE = "oauth_nonce"; public static final String OAUTH_VERSION = "oauth_version"; public static final String OAUTH_CALLBACK = "oauth_callback"; public static final String OAUTH_CALLBACK_CONFIRMED = "oauth_callback_confirmed"; public static final String OAUTH_VERIFIER = "oauth_verifier"; public static final String HMAC_SHA1 = "HMAC-SHA1"; public static final String RSA_SHA1 = "RSA-SHA1"; public String accesToken; public String tokenSecret; public String cKey,cSecret; public String url,method; public String currentTimeStamp,currentOnonce; public OAuthSignaturesGeneratorSorted(String accesToken, String tokenSecret, String cKey,String cSecret, String method) { super(); this.accesToken = accesToken; this.tokenSecret = tokenSecret; this.cKey = cKey; this.method = method; this.cSecret = cSecret; } public String getOauthSignature(List<BasicNameValuePair> peramPairs){ String oAuthSignature = null; // * * * 1 * * * * String GeneratedPerams = gentratedPerams(peramPairs); // * * * 2 * * * * String baseString = generateBaseString(GeneratedPerams); // * * * 3 * * * * String singningKey = genrateSigningKey(); // * * * 4 * * * * oAuthSignature = getCalcShaHash(baseString, singningKey); // * * * Done * * * * return oAuthSignature; } String gentratedPerams(List<BasicNameValuePair> peramPairs){ System.out.println("gentratedPerams() peramPairs = "+peramPairs); String GeneratedPerams = ""; peramPairs.add(new BasicNameValuePair( OAUTH_CONSUMER_KEY , URLEncoder.encode(getcKey()))); peramPairs.add(new BasicNameValuePair( OAUTH_NONCE, URLEncoder.encode(currentOnonce))); peramPairs.add(new BasicNameValuePair( OAUTH_SIGNATURE_METHOD, URLEncoder.encode(HMAC_SHA1))); peramPairs.add(new BasicNameValuePair( OAUTH_TIMESTAMP,URLEncoder.encode(currentTimeStamp))); peramPairs.add(new BasicNameValuePair( OAUTH_TOKEN, URLEncoder.encode(getAccesToken()))); peramPairs.add(new BasicNameValuePair( OAUTH_VERSION, URLEncoder.encode(VERSION_1_0 ))); Comparator<BasicNameValuePair> comp = new Comparator<BasicNameValuePair>() { // solution than making method synchronized @Override public int compare(BasicNameValuePair p1, BasicNameValuePair p2) { return p1.getName().compareTo(p2.getName()); } }; // and then Collections.sort(peramPairs, comp); for( int i = 0 ;i<peramPairs.size();++i){ if(i==0){ GeneratedPerams = GeneratedPerams +peramPairs.get(i).getName()+"=" + URLEncoder.encode(peramPairs.get(i).getValue()).replace("+", "%20") ; }else{ GeneratedPerams = GeneratedPerams +"&" +peramPairs.get(i).getName()+"=" + URLEncoder.encode(peramPairs.get(i).getValue()).replace("+", "%20") ; } } System.out.println("GeneratedPerams = "+ GeneratedPerams); return GeneratedPerams; } String generateBaseString(String peramsUrl) { String baseString = null; //System.out.println("URLEncoder.encode("+url+") = "+ URLEncoder.encode(url)); baseString = method+"&"+URLEncoder.encode(url )+"&"+URLEncoder.encode(peramsUrl ); //System.out.println("baseString = "+ baseString); return baseString; } String genrateSigningKey(){ String singningKey = null; singningKey = URLEncoder.encode(cSecret )+"&"+URLEncoder.encode(tokenSecret ); //System.out.println("genrateSigningKey = "+ singningKey); return singningKey; } public String getAccesToken() { return accesToken; } public void setAccesToken(String accesToken) { this.accesToken = accesToken; } public String getAcessSecret() { return tokenSecret; } public void setAcessSecret(String tokenSecret) { this.tokenSecret = tokenSecret; } public String getcKey() { return cKey; } public void setcKey(String cKey) { this.cKey = cKey; } public String getUrl() { return url; } public void setUrl(String url) { currentTimeStamp = calcTstamp(); currentOnonce = calcOnonce(); this.url = url; } public String calcTstamp() { return new String("" + System.currentTimeMillis() / 1000); } public String calcOnonce() { String oNonce = new String("" + (System.currentTimeMillis())/ 1000*55); System.out.println("getOnonce = "+ oNonce); return oNonce; } public String getCalcShaHash (String data, String key) { String oAuthSignature = null; try { Key signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1); Mac mac = Mac.getInstance(HMAC_SHA1); mac.init(signingKey); byte[] rawHmac = mac.doFinal(data.getBytes()); // Done String noUrlEncoding = Base64.encodeBytes(rawHmac); // Dircet oAuthSignature = noUrlEncoding; // perencoded // oAuthSignature = URLEncoder.encode(noUrlEncoding,"ISO-8859-1"); //System.out.println("getCalcShaHash = "+ oAuthSignature); } catch (Exception e) { e.printStackTrace(); //System.out.println("Exception = "+ e); } return oAuthSignature; } }