package com.sdk.snippets.modules; import android.content.Context; import android.os.Bundle; import android.util.Log; import com.quickblox.auth.session.BaseService; import com.quickblox.auth.session.QBSession; import com.quickblox.core.QBEntityCallback; import com.digits.sdk.android.AuthCallback; import com.digits.sdk.android.Digits; import com.digits.sdk.android.DigitsException; import com.digits.sdk.android.DigitsOAuthSigning; import com.digits.sdk.android.DigitsSession; import com.quickblox.core.exception.BaseServiceException; import com.quickblox.core.exception.QBResponseException; import com.quickblox.core.helper.Lo; import com.quickblox.auth.QBAuth; import com.quickblox.auth.model.QBProvider; import com.quickblox.users.model.QBUser; import com.sdk.snippets.core.ApplicationConfig; import com.sdk.snippets.core.SnippetAsync; import com.sdk.snippets.core.Snippet; import com.sdk.snippets.core.Snippets; import com.twitter.sdk.android.core.TwitterAuthConfig; import com.twitter.sdk.android.core.TwitterAuthToken; import com.twitter.sdk.android.core.TwitterCore; import java.util.Map; import io.fabric.sdk.android.Fabric; /** * Created by vfite on 22.01.14. */ public class SnippetsAuth extends Snippets{ private static final String TAG = SnippetsAuth.class.getSimpleName(); private TwitterAuthConfig authConfig; public SnippetsAuth(Context context) { super(context); snippets.add(createSession); snippets.add(createSessionSynchronous); // snippets.add(createSessionWithUser); snippets.add(createSessionWithUserSynchronous); // snippets.add(createSessionWithSocialProvider); snippets.add(createSessionWithSocialProviderSynchronous); // snippets.add(createSessionWithTwitterDigits); snippets.add(createSessionWithTwitterDigitsSynchronous); // snippets.add(destroySession); snippets.add(destroySessionSynchronous); // snippets.add(getSession); snippets.add(getSessionSynchronous); } // /////////////////////////////////// Create session ///////////////////////////////////////////// // Snippet createSession = new Snippet("create session") { @Override public void execute() { QBAuth.createSession().performAsync(new QBEntityCallback<QBSession>() { @Override public void onSuccess(QBSession session, Bundle params) { Log.i(TAG, "session created, token = " + session.getToken()); } @Override public void onError(QBResponseException e) { handleErrors(e); } }); } }; Snippet createSessionSynchronous = new SnippetAsync("create session (synchronous)", context) { @Override public void executeAsync() { QBSession session = null; try { session = QBAuth.createSession().perform(); } catch (QBResponseException e) { setException(e); } if(session != null){ Log.i(TAG, "session created, token = " + session.getToken()); } } }; // /////////////////////////////// Create session with user /////////////////////////////////////// // Snippet createSessionWithUser = new Snippet("create session", "with user") { @Override public void execute() { QBAuth.createSession(new QBUser(ApplicationConfig.getInstance().getTestUserLogin1(), ApplicationConfig.getInstance().getTestUserPassword1())).performAsync(new QBEntityCallback<QBSession>() { @Override public void onSuccess(QBSession session, Bundle args) { Log.i(TAG, "session created, token = " + session.getToken()); } @Override public void onError(QBResponseException errors) { handleErrors(errors); } }); try { BaseService.createFromExistentToken("31ed199120fb998dc472aea785a1825809ad5c04", null); } catch (BaseServiceException e) { e.printStackTrace(); } } }; Snippet createSessionWithUserSynchronous = new SnippetAsync("create session (synchronous)", "with user", context) { @Override public void executeAsync() { QBSession session = null; try { QBUser user = new QBUser(ApplicationConfig.getInstance().getTestUserLogin1(), ApplicationConfig.getInstance().getTestUserPassword1()); session = QBAuth.createSession(user).perform(); } catch (QBResponseException e) { setException(e); } if(session != null){ Log.i(TAG, "session created, token = " + session.getToken()); } } }; // ////////////////////////// Create session with social provider ///////////////////////////////// // Snippet createSessionWithSocialProvider = new Snippet("create session", "with social provider") { @Override public void execute() { String facebookAccessToken = "AAAEra8jNdnkBABYf3ZBSAz9dgLfyK7tQNttIoaZA1cC40niR6HVS0nYuufZB0ZCn66VJcISM8DO2bcbhEahm2nW01ZAZC1YwpZB7rds37xW0wZDZD"; QBAuth.createSessionUsingSocialProvider(QBProvider.FACEBOOK, facebookAccessToken, null).performAsync(new QBEntityCallback<QBSession>() { @Override public void onSuccess(QBSession session, Bundle args) { Log.i(TAG, "session created, token = "+session.getToken()); } @Override public void onError(QBResponseException eroors) { handleErrors(eroors); } }); } }; Snippet createSessionWithSocialProviderSynchronous = new SnippetAsync("create session (synchronous)", "with social provider", context) { @Override public void executeAsync() { QBSession session = null; try { String facebookAccessToken = "AAAEra8jNdnkBABYf3ZBSAz9dgLfyK7tQNttIoaZA1cC40niR6HVS0nYuufZB0ZCn66VJcISM8DO2bcbhEahm2nW01ZAZC1YwpZB7rds37xW0wZDZD"; session = QBAuth.createSessionUsingSocialProvider(QBProvider.FACEBOOK, facebookAccessToken, null).perform(); } catch (QBResponseException e) { setException(e); } if(session != null){ Log.i(TAG, "session created, token = " + session.getToken()); } } }; // ////////////////////////// Create session with Twitter Digits ///////////////////////////////// // Snippet createSessionWithTwitterDigits = new Snippet("create session", "with Twitter Digits") { @Override public void execute() { initTwitterDigits(); authenticateWithTwitterDigits(false); } }; Snippet createSessionWithTwitterDigitsSynchronous = new SnippetAsync("create session (synchronous)", "with Twitter Digits", context) { @Override public void executeAsync() { initTwitterDigits(); authenticateWithTwitterDigits(true); } }; private void initTwitterDigits() { if(authConfig == null) { // Note: Your consumer key and secret should be obfuscated in your source code before shipping. String consumerKey = "A1NXq7BxZ74NZ3dDzXA1HcSN7"; String consumerSecret = "Piuy52Kf2m2iHVKpfpffi6xjvOYVI904O6sl1c50TLpntTVsl6"; authConfig = new TwitterAuthConfig(consumerKey, consumerSecret); Fabric.with(context, new TwitterCore(authConfig), new Digits()); } } private void authenticateWithTwitterDigits(final boolean isSync) { Digits.authenticate(new AuthCallback() { @Override public void success(DigitsSession session, String phoneNumber) { Map<String, String> authHeaders = getAuthHeadersBySession(session); Lo.g(authHeaders); String xAuthServiceProvider = authHeaders.get("X-Auth-Service-Provider"); String xVerifyCredentialsAuthorization = authHeaders.get("X-Verify-Credentials-Authorization"); if(isSync){ QBSession qbSession = null; try { qbSession = QBAuth.createSessionUsingTwitterDigits(xAuthServiceProvider, xVerifyCredentialsAuthorization).perform(); } catch (QBResponseException e) { e.printStackTrace(); } if(session != null){ Log.i(TAG, "session created: " + qbSession); } }else{ QBAuth.createSessionUsingTwitterDigits(xAuthServiceProvider, xVerifyCredentialsAuthorization).performAsync(new QBEntityCallback<QBSession>() { @Override public void onSuccess(QBSession qbSession, Bundle params) { Log.i(TAG, "session created: "+qbSession); } @Override public void onError(QBResponseException errors) { handleErrors(errors); } }); } } @Override public void failure(DigitsException exception) { log(exception.getMessage()); } }, "+38"); } private Map<String, String> getAuthHeadersBySession(DigitsSession digitsSession) { TwitterAuthToken authToken = (TwitterAuthToken) digitsSession.getAuthToken(); DigitsOAuthSigning oauthSigning = new DigitsOAuthSigning(authConfig, authToken); return oauthSigning.getOAuthEchoHeadersForVerifyCredentials(); } // ///////////////////////////////////// Destroy session ////////////////////////////////////////// // Snippet destroySession = new Snippet("destroy session") { @Override public void execute() { QBAuth.deleteSession().performAsync(new QBEntityCallback<Void>() { @Override public void onSuccess(Void aVoid, Bundle bundle) { Log.i(TAG, "success"); } @Override public void onError(QBResponseException e) { handleErrors(e); } }); } }; Snippet destroySessionSynchronous = new SnippetAsync("delete session (synchronous)", context) { @Override public void executeAsync() { try { QBAuth.deleteSession().perform(); Log.i(TAG, "session destroyed "); } catch (QBResponseException e) { Log.i(TAG, "destroy fail"); setException(e); } } }; // ///////////////////////////////////// Get session ////////////////////////////////////////// // Snippet getSession = new Snippet("get session") { @Override public void execute() { QBAuth.getSession().performAsync(new QBEntityCallback<QBSession>() { @Override public void onSuccess(QBSession qbSession, Bundle bundle) { Log.i(TAG, "session: " + qbSession); } @Override public void onError(QBResponseException strings) { } }); } }; Snippet getSessionSynchronous = new SnippetAsync("get session (synchronous)", context) { @Override public void executeAsync() { try { QBSession session = QBAuth.getSession().perform(); Log.i(TAG, "session: " + session); } catch (QBResponseException e) { Log.i(TAG, "get session fail"); setException(e); } } }; }