private void restoreAnonymity(Map<String, String> anonymousData) { synchronized (mutex) { if (anonymousData != null) { putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousData); } } }
private static void setLazy(ParseUser user) { Map<String, String> anonymousAuthData = new HashMap<>(); anonymousAuthData.put("anonymousToken", "anonymousTest"); user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData); }
private static void setLazy(ParseUser user) { Map<String, String> anonymousAuthData = new HashMap<>(); anonymousAuthData.put("anonymousToken", "anonymousTest"); user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData); }
/* package for tests */ ParseUser lazyLogIn(String authType, Map<String, String> authData) { // Note: if authType != ParseAnonymousUtils.AUTH_TYPE the user is not "lazy". ParseUser user = ParseObject.create(ParseUser.class); synchronized (user.mutex) { user.setIsCurrentUser(true); user.putAuthData(authType, authData); } synchronized (mutex) { currentUserMatchesDisk = false; currentUser = user; } return user; } }
private void stripAnonymity() { synchronized (mutex) { if (ParseAnonymousUtils.isLinked(this)) { if (getObjectId() != null) { putAuthData(ParseAnonymousUtils.AUTH_TYPE, null); } else { removeAuthData(ParseAnonymousUtils.AUTH_TYPE); } } } }
/** * Unlinks this user from a third party authentication source. * <p/> * <strong>Note:</strong> This shouldn't be called directly unless developing a third party authentication * library. * * @param authType The name of the third party authentication source. * @return A {@code Task} is resolved when unlinking completes. * @see AuthenticationCallback */ public Task<Void> unlinkFromInBackground(final String authType) { if (authType == null) { return Task.forResult(null); } synchronized (mutex) { if (!getAuthData().containsKey(authType)) { return Task.forResult(null); } putAuthData(authType, null); } return saveInBackground(); }
private Task<Void> linkWithAsync( final String authType, final Map<String, String> authData, final Task<Void> toAwait, final String sessionToken) { synchronized (mutex) { final boolean isLazy = isLazy(); final Map<String, String> oldAnonymousData = getAuthData(ParseAnonymousUtils.AUTH_TYPE); stripAnonymity(); putAuthData(authType, authData); return saveAsync(sessionToken, isLazy, toAwait).continueWithTask(new Continuation<Void, Task<Void>>() { @Override public Task<Void> then(Task<Void> task) { synchronized (mutex) { if (task.isFaulted() || task.isCancelled()) { removeAuthData(authType); restoreAnonymity(oldAnonymousData); return task; } return synchronizeAuthDataAsync(authType); } } }); } }
@Test public void testLoginWithAsyncWithLinkedLazyUser() throws Exception { // Register a mock currentUserController to make getCurrentUser work ParseUser currentUser = new ParseUser(); currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>()); setLazy(currentUser); ParseUser partialMockCurrentUser = spy(currentUser); when(partialMockCurrentUser.getSessionToken()).thenReturn("oldSessionToken"); doReturn(Task.<ParseUser>forResult(null)) .when(partialMockCurrentUser) .resolveLazinessAsync(Matchers.<Task<Void>>any()); ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(false)).thenReturn(Task.forResult(partialMockCurrentUser)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("token", "123"); ParseUser userAfterLogin = ParseTaskUtils.wait(ParseUser.logInWithInBackground(authType, authData)); // Make sure we stripAnonymity assertNull(userAfterLogin.getAuthData().get(ParseAnonymousUtils.AUTH_TYPE)); // Make sure we update authData assertEquals(authData, userAfterLogin.getAuthData().get("facebook")); // Make sure we resolveLaziness verify(partialMockCurrentUser, times(1)).resolveLazinessAsync(Matchers.<Task<Void>>any()); }
@Test public void testLoginWithAsyncWithLinkedLazyUseAndResolveLazinessFailure() throws Exception { // Register a mock currentUserController to make getCurrentUser work ParseUser currentUser = new ParseUser(); Map<String, String> oldAnonymousAuthData = new HashMap<>(); oldAnonymousAuthData.put("oldKey", "oldToken"); currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, oldAnonymousAuthData); ParseUser partialMockCurrentUser = spy(currentUser); when(partialMockCurrentUser.getSessionToken()).thenReturn("oldSessionToken"); doReturn(Task.<ParseUser>forError(new Exception())) .when(partialMockCurrentUser) .resolveLazinessAsync(Matchers.<Task<Void>>any()); ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(false)).thenReturn(Task.forResult(partialMockCurrentUser)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("token", "123"); Task<ParseUser> loginTask = ParseUser.logInWithInBackground(authType, authData); loginTask.waitForCompletion(); // Make sure we try to resolveLaziness verify(partialMockCurrentUser, times(1)).resolveLazinessAsync(Matchers.<Task<Void>>any()); // Make sure we do not save new authData assertNull(partialMockCurrentUser.getAuthData().get("facebook")); // Make sure we restore anonymity after resolve laziness failure assertEquals(oldAnonymousAuthData, partialMockCurrentUser.getAuthData() .get(ParseAnonymousUtils.AUTH_TYPE)); // Make sure task fails assertTrue(loginTask.isFaulted()); }
Map<String, String> oldAnonymousAuthData = new HashMap<>(); oldAnonymousAuthData.put("oldKey", "oldToken"); currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, oldAnonymousAuthData); Map<String, String> anonymousAuthData = new HashMap<>(); anonymousAuthData.put("key", "token"); user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData); verify(partialMockCurrentUser, times(1)).setPassword("oldPassword"); verify(partialMockCurrentUser, times(1)).putAuthData( ParseAnonymousUtils.AUTH_TYPE, oldAnonymousAuthData);
user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData); ParseUser partialMockUser = spy(user); Exception saveException = new Exception();
Map<String, String> anonymousAuthData = new HashMap<>(); anonymousAuthData.put("key", "token"); user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData);
user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>()); ParseUser partialMockUser = spy(user); doReturn(Task.<Void>forResult(null))
currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>()); currentUser.setObjectId("objectId"); // Make it not lazy. ParseUser partialMockCurrentUser = spy(currentUser);
@Test public void testSignUpAsyncWithSignUpSameAnonymousUser() throws Exception { ParseUser user = new ParseUser(); user.setUsername("userName"); user.setPassword("password"); Map<String, String> anonymousAuthData = new HashMap<>(); anonymousAuthData.put("key", "token"); user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData); // Register a mock currentUserController to make getCurrentUser work ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(anyBoolean())).thenReturn(Task.forResult(user)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Attempt to merge currentUser with itself."); ParseTaskUtils.wait(user.signUpAsync(Task.<Void>forResult(null))); }
ParseUser user = new ParseUser(); setLazy(user); user.putAuthData("facebook", new HashMap<String, String>());
ParseUser user = new ParseUser(); setLazy(user); user.putAuthData("facebook", new HashMap<String, String>());
ParseUser user = new ParseUser(); setLazy(user); user.putAuthData("facebook", new HashMap<String, String>());