package net.miz_hi.smileessence.auth;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import net.miz_hi.smileessence.auth.Consumers.Consumer;
import net.miz_hi.smileessence.core.EnumRequestCode;
import net.miz_hi.smileessence.core.MyExecutor;
import net.miz_hi.smileessence.view.activity.WebViewActivity;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
public class AuthorizeHelper
{
private Activity activity;
private Consumer consumer;
private Twitter twitter;
private RequestToken req;
public static final String CALLBACK_OAUTH = "oauth://smileessence";
public static final String OAUTH_VERIFIER = "oauth_verifier";
public AuthorizeHelper(Activity activity, Consumer consumer)
{
this.activity = activity;
this.consumer = consumer;
}
public void oauthSend()
{
try
{
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumer.key, consumer.secret);
Future<RequestToken> f = MyExecutor.submit(new Callable<RequestToken>()
{
@Override
public RequestToken call() throws Exception
{
return twitter.getOAuthRequestToken(CALLBACK_OAUTH);
}
});
req = f.get();
Intent intent = new Intent(activity, WebViewActivity.class);
intent.setData(Uri.parse(req.getAuthorizationURL()));
activity.startActivityForResult(intent, EnumRequestCode.AUTHORIZE.ordinal());
}
catch (Exception e)
{
e.printStackTrace();
}
}
public Account oauthReceive(Uri uri)
{
Account account = null;
try
{
final String verifier = uri.getQueryParameter(OAUTH_VERIFIER);
AccessToken accessToken;
Future<AccessToken> f = MyExecutor.submit(new Callable<AccessToken>()
{
@Override
public AccessToken call() throws Exception
{
return twitter.getOAuthAccessToken(req, verifier);
}
});
accessToken = f.get();
if (accessToken != null)
{
account = new Account(accessToken, consumer);
AuthenticationDB db = AuthenticationDB.instance();
db.save(account);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return account;
}
}