package eriji.com.oauth; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; import oauth.signpost.exception.OAuthCommunicationException; import oauth.signpost.exception.OAuthExpectationFailedException; import oauth.signpost.exception.OAuthMessageSignerException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import android.text.TextUtils; import android.util.Log; import com.ch_linghu.fanfoudroid.fanfou.Configuration; import com.ch_linghu.fanfoudroid.http.Response; import com.ch_linghu.fanfoudroid.http.ResponseException; public class XAuthClient extends OAuthClient { private static final String TAG = "XAuthClient"; private static final String CONSUMER_KEY = Configuration .getOAuthConsumerKey(); private static final String CONSUMER_SECRET = Configuration .getOAuthConsumerSecret(); private static final String BASE_URL = Configuration.getOAuthBaseUrl(); public XAuthClient(String consumer_key, String consumer_secret, String base_url, OAuthStore store) { super(consumer_key, consumer_secret, base_url, store); // TODO Auto-generated constructor stub } public void retrieveAccessToken(String username, String password) throws OAuthStoreException, ClientProtocolException, IOException, ResponseException { HttpClient client = new DefaultHttpClient(); HttpPost request = new HttpPost(BASE_URL + "/access_token"); CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer( CONSUMER_KEY, CONSUMER_SECRET); List<BasicNameValuePair> params = Arrays.asList(new BasicNameValuePair( "x_auth_username", username), new BasicNameValuePair( "x_auth_password", password), new BasicNameValuePair( "x_auth_mode", "client_auth")); UrlEncodedFormEntity entity = null; try { entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); } catch (UnsupportedEncodingException e) { throw new RuntimeException("wtf"); } request.setEntity(entity); try { consumer.sign(request); } catch (OAuthMessageSignerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (OAuthExpectationFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (OAuthCommunicationException e) { // TODO Auto-generated catch block e.printStackTrace(); } HttpResponse response = client.execute(request); String responseString = Response.entityToString(response.getEntity()); String[] tmp = TextUtils.split(responseString, "&"); if (tmp.length < 2) { Log.e(TAG, "something wrong with access token response: " + responseString); return; } String token = tmp[0].replace("oauth_token=", ""); String tokenSerect = tmp[1].replace("oauth_token_secret=", ""); mAccessToken = new OAuthAccessToken(token, tokenSerect); storeAccessToken(); logger.info("retrieve access token with request token " + mConsumer.getToken() + " " + mAccessToken + " " + mProvider.getAccessTokenEndpointUrl()); } // ///////////////////////// public static XAuthClient factory() { return new XAuthClient(Configuration.getOAuthConsumerKey(), Configuration.getOAuthConsumerSecret(), Configuration.getOAuthBaseUrl(), new OAuthSharedPreferencesStore()); } public static boolean auth(String username, String password) throws Exception { XAuthClient xauth = XAuthClient.factory(); xauth.retrieveAccessToken(username, password); return xauth.hasAccessToken(); } }