/* * Copyright (C) 2013 Chris Lacy * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.socialnetlib.android; import org.tweetalib.android.model.TwitterUser; import java.util.List; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.auth.OAuthAuthorization; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import twitter4j.internal.http.HttpParameter; public class TwitterApi extends SocialNetApi { public static final String TWITTER_VERIFY_CREDENTIALS_JSON = "https://api.twitter.com/1.1/account/verify_credentials.json"; private Twitter mSocNetApi; private OAuthAuthorization mOAuth; public TwitterApi(SocialNetConstant.Type type, String consumerKey, String consumerSecret, String currentAccountKey) { super(type, consumerKey, consumerSecret, currentAccountKey); } @Override /* * Warning: SYNCHRONOUS call. This exists just so we can get the screename * after a sign in */ public TwitterUser verifyCredentialsSync(String token, String secret) { TwitterUser twitterUser = null; clearApiInstance(); try { setOAuthTokenWithSecret(token, secret, true); Twitter twitter = getAndConfigureApiInstance(); twitterUser = new TwitterUser(twitter.verifyCredentials()); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TwitterException e) { // TODO Auto-generated catch block e.printStackTrace(); } return twitterUser; } @Override public void init() { mSocNetApi = null; mOAuth = null; } Twitter getAndConfigureApiInstance() { if (mCurrentOAuthToken == null || mCurrentOAuthSecret == null) { mSocNetApi = null; mOAuth = null; } else if (mSocNetApi == null) { ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.setDebugEnabled(true) .setOAuthConsumerKey(mAppConsumerKey) .setOAuthConsumerSecret(mAppConsumerSecret) .setOAuthAccessToken(mCurrentOAuthToken) .setOAuthAccessTokenSecret(mCurrentOAuthSecret) .setMediaProvider("TWITTER") // .setJSONStoreEnabled(true) .setIncludeEntitiesEnabled(true); Configuration configuration = configurationBuilder.build(); mSocNetApi = new TwitterFactory(configuration).getInstance(); // mOAuth = new // TwitterFactory(configuration).getOAuthAuthorization(); } return mSocNetApi; } @Override void clearApiInstance() { mSocNetApi = null; mOAuth = null; } public SocialNetConstant.Type getSocialNetType() { return SocialNetConstant.Type.Twitter; } /* * Used for https://dev.twitter.com/docs/auth/oauth/oauth-echo */ public String generateTwitterVerifyCredentialsAuthorizationHeader() { String verifyCredentialsUrl = TWITTER_VERIFY_CREDENTIALS_JSON; List<HttpParameter> oauthSignatureParams = mOAuth .generateOAuthSignatureHttpParams("GET", verifyCredentialsUrl); return "OAuth realm=\"https://api.twitter.com/\"," + OAuthAuthorization.encodeParameters(oauthSignatureParams, ",", true); } }