private void handleAccountManagerAuth(@NonNull Intent data) { final String token = data.getStringExtra(EXTRA_TOKEN); final String account = data.getStringExtra(EXTRA_ACCOUNT); if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(account)) { authPreferences.setOauth2Token(account, token, null); onAuthenticated(); } else { String error = data.getStringExtra(AccountManagerAuthActivity.EXTRA_ERROR); if (!TextUtils.isEmpty(error)) { showDialog(ACCOUNT_MANAGER_TOKEN_ERROR); } } }
private void refreshUsingOAuth2Client(String name, String refreshToken) throws TokenRefreshException { try { final OAuth2Token token = oauth2Client.refreshToken(refreshToken); authPreferences.setOauth2Token(name, token.accessToken, isEmpty(token.refreshToken) ? refreshToken : token.refreshToken); } catch (IOException e) { throw new TokenRefreshException(e); } } }
@Subscribe public void onOAuth2Callback(OAuth2CallbackTask.OAuth2CallbackEvent event) { if (event.valid()) { authPreferences.setOauth2Token(event.token.userName, event.token.accessToken, event.token.refreshToken); onAuthenticated(); } else { showDialog(OAUTH2_ACCESS_TOKEN_ERROR); } }
@Test public void testStoreUriWithXOAuth2() throws Exception { PreferenceManager .getDefaultSharedPreferences(RuntimeEnvironment.application) .edit() .putString("server_address", "imap.gmail.com:993") .putString("server_protocol", "+ssl+") .putString("server_authentication", "xoauth") .commit(); authPreferences.setOauth2Token("user", "token", null); assertThat(authPreferences.getStoreUri()).isEqualTo("imap+ssl+://XOAUTH2:user:dXNlcj11c2VyAWF1dGg9QmVhcmVyIHRva2VuAQE%253D@imap.gmail.com:993"); } }
private void refreshUsingAccountManager(String token, String name) throws TokenRefreshException { if (accountManager == null) throw new TokenRefreshException("account manager is null"); invalidateToken(token); try { Bundle bundle = getAuthToken(new Account(name, GOOGLE_TYPE)); if (bundle != null) { String newToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); if (!isEmpty(newToken)) { authPreferences.setOauth2Token(name, newToken, null); } else { throw new TokenRefreshException("no new token obtained"); } } else { throw new TokenRefreshException("no bundle received from accountmanager"); } } catch (AccountsException e) { Log.w(TAG, e); throw new TokenRefreshException(e); } catch (IOException e) { Log.w(TAG, e); throw new TokenRefreshException(e); } }
@Test public void shouldSetNewTokenAfterRefresh() throws Exception { when(authPreferences.getOauth2Token()).thenReturn("token"); when(authPreferences.getOauth2Username()).thenReturn("username"); AccountManagerFuture<Bundle> future = mock(AccountManagerFuture.class); when(accountManager.getAuthToken( new Account("username", GOOGLE_TYPE), AUTH_TOKEN_TYPE, null,true, null, null) ).thenReturn(future); Bundle bundle = new Bundle(); bundle.putString(AccountManager.KEY_AUTHTOKEN, "newToken"); when(future.getResult()).thenReturn(bundle); refresher.refreshOAuth2Token(); verify(authPreferences).setOauth2Token("username", "newToken", null); }
@Test public void shouldUseOAuth2ClientWhenRefreshTokenIsPresent() throws Exception { when(authPreferences.getOauth2Token()).thenReturn("token"); when(authPreferences.getOauth2RefreshToken()).thenReturn("refresh"); when(authPreferences.getOauth2Username()).thenReturn("username"); when(oauth2Client.refreshToken("refresh")).thenReturn(new OAuth2Token("newToken", "type", null, 0, null)); refresher.refreshOAuth2Token(); verify(authPreferences).setOauth2Token("username", "newToken", "refresh"); }
@Test public void shouldUpdateRefreshTokenIfPresentInResponse() throws Exception { when(authPreferences.getOauth2Token()).thenReturn("token"); when(authPreferences.getOauth2RefreshToken()).thenReturn("refresh"); when(authPreferences.getOauth2Username()).thenReturn("username"); when(oauth2Client.refreshToken("refresh")).thenReturn(new OAuth2Token("newToken", "type", "newRefresh", 0, null)); refresher.refreshOAuth2Token(); verify(authPreferences).setOauth2Token("username", "newToken", "newRefresh"); } }