Search code examples
javaandroidoauth-2.0signpost

Why this error: Could not find class 'oauth.signpost.http.HttpParameters


I've been struggling of the past day to get OAuth implemented for my android app. I've ran into problem after problem. I just want to sign a request , send it to a web service and get a response back (I believe this is the two legged approach).

I've download signpost:

-signpost-core-1.2.1.2

-signpost-commonshttp4-1.2.1.2

I've added the jars to my library build path.

Is there somewhere specific I need to place these jar files in order for them to work?

The part that I've been having the most trouble with is generating a signature and finally signing the request. Errors keep getting thrown for the HttpParemeters.

Is there a way for me to programatically generate a baseString ?

Can someone direct me to a two legged Oauth android specific example that works ?

My Code below:

public void excecuteSigning(String targetURL){
        String SOAP_ACTION = "http://amebatv.com/api/authDevice";
        System.setProperty("http.keepAlive", "false");      
        HttpURLConnection _request = null;  
        DefaultHttpClient httpclient = null;

    try{ 

        CONSUMER_SECRET  = app_pref.getString("consumerSecret", "");
        CONSUMER_KEY = app_pref.getString("consumerKey", "");   
        String oaut_token = app_pref.getString("accessToken", "");
        String tokenSecret = app_pref.getString("tokenSecret", "");
        String deviceId = deviceInfo.getSerial();


        CommonsHttpOAuthConsumer  consumer = new CommonsHttpOAuthConsumer (CONSUMER_KEY,CONSUMER_SECRET);
        consumer.setTokenWithSecret(oaut_token, tokenSecret); 

        //HttpRequest request;
        HttpParameters requestParameters = new HttpParameters();
        requestParameters.put("file", "vacation.jpg");
        requestParameters.put(OAuth.OAUTH_CONSUMER_KEY, "dpf43f3p2l4k3l03");
        requestParameters.put(OAuth.OAUTH_NONCE, "kllo9940pd9333jh");
        requestParameters.put(OAuth.OAUTH_SIGNATURE_METHOD, "HMAC-SHA1");
        requestParameters.put(OAuth.OAUTH_TIMESTAMP, "1191242096");
        requestParameters.put(OAuth.OAUTH_TOKEN, "nnch734d00sl2jdk");
        requestParameters.put(OAuth.OAUTH_VERSION, "1.0");
        requestParameters.put("size", "original");


        HttpPost request = new HttpPost(targetURL);
        SignatureBaseString baseString = new SignatureBaseString((HttpRequest) request, requestParameters);

        String base = baseString.generate();
        System.out.println(":"+base);

        System.out.println(computeHmac(base,"kd94hf93k423kf44&pfkkdhi9sl3r4s00"));

       httpclient = new DefaultHttpClient();

        ContentProducer cp = new ContentProducer() {
            public void writeTo(OutputStream outstream) throws IOException {
                Writer writer = new OutputStreamWriter(outstream, "UTF-8");
                writeXml(writer);
            }
        };

       HttpParameters params = new HttpParameters();
       HttpEntity entity = new EntityTemplate(cp);
       HttpPost request = new HttpPost(targetURL);         

       request.addHeader("Authorization",AUTH_HEADER);
       request.addHeader("Content-Type", "text/xml; charset=utf-8");
       //request.addHeader("Content-Length",""+soapXML.getBytes().length);
       request.addHeader("SOAPAction",SOAP_ACTION);
       request.setEntity(entity);

        // sign the request
        consumer.sign(request);
        // send the request
        //request.connect();
        HttpResponse response = httpclient.execute(request);

        //get response               
        //StringBuffer response = new StringBuffer();
        InputStream instream = null;    
        BufferedReader br = null;        
         try{            
             int respcode = response.getStatusLine().getStatusCode();
             Log.i("Server Response", ""+respcode);

             //get XML from InputStream
            if(respcode>= 200){ 
                instream =  response.getEntity().getContent();                  
                client.buildDoc(instream);      
            }
            else{
                Log.i("Server Response", ""+respcode);
                //instream = request.getErrorStream();
                }

        }catch(Exception e){
            Log.i("SPLASH","Unable to create connection stream");
            e.printStackTrace();
        }
         finally {      
          if(instream != null) {
            Log.i("SPLASH","Disconnecting stream");
            instream.close();
          }
         }
             */
    }
    catch(Exception e){
        Log.i("SPLASH","Unable to create connection");
        e.printStackTrace();
    }finally {      
          if(httpclient != null) {
            Log.i("SPLASH","Disconnecting");
            httpclient.getConnectionManager().shutdown();
          }
    }
}

/*
 * Method:computeHmac()
 * @params: String, String
 * return: String 
 */
public String computeHmac(String baseString, String key)
                                throws NoSuchAlgorithmException, 
                                InvalidKeyException, 
                                IllegalStateException, 
                                UnsupportedEncodingException
    {

        Mac mac = Mac.getInstance("HmacSHA1");
        SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
        mac.init(secret);
        byte[] digest = mac.doFinal(baseString.getBytes());
        return Base64.encodeToString(digest,Base64.URL_SAFE);
    }

Solution

  • Libraries need to be in the libs folder (with an s!) Then they are automatically added to the build path of your project.