/* package for tests */ Task<Void> cleanUpAuthDataAsync() { ParseAuthenticationManager controller = getAuthenticationManager(); Map<String, Map<String, String>> authData; synchronized (mutex) { authData = getState().authData(); if (authData.size() == 0) { return Task.forResult(null); // Nothing to see or do here... } } List<Task<Void>> tasks = new ArrayList<>(); Iterator<Map.Entry<String, Map<String, String>>> i = authData.entrySet().iterator(); while (i.hasNext()) { Map.Entry<String, Map<String, String>> entry = i.next(); if (entry.getValue() == null) { i.remove(); tasks.add(controller.restoreAuthenticationAsync(entry.getKey(), null).makeVoid()); } } State newState = getState().newBuilder() .authData(authData) .build(); setState(newState); return Task.whenAll(tasks); }
private Task<Void> setSessionTokenInBackground(String newSessionToken) { synchronized (mutex) { State state = getState(); if (newSessionToken.equals(state.sessionToken())) { return Task.forResult(null); } State.Builder builder = state.newBuilder() .sessionToken(newSessionToken); setState(builder.build()); return saveCurrentUserAsync(this); } }
/* package */ Task<Void> logOutAsync(boolean revoke) { ParseAuthenticationManager controller = getAuthenticationManager(); List<Task<Void>> tasks = new ArrayList<>(); final String oldSessionToken; synchronized (mutex) { oldSessionToken = getState().sessionToken(); for (Map.Entry<String, Map<String, String>> entry : getAuthData().entrySet()) { tasks.add(controller.deauthenticateAsync(entry.getKey())); } State newState = getState().newBuilder() .sessionToken(null) .isNew(false) .build(); isCurrentUser = false; setState(newState); } if (revoke) { tasks.add(ParseSession.revokeAsync(oldSessionToken)); } return Task.whenAll(tasks); }
@Test public void testSetCurrentUserStateWithoutAuthData() { // Set user initial state String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("facebookToken", "facebookTest"); ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .put("oldKey", "oldValue") .put("key", "value") .putAuthData(authType, authData) .build(); ParseUser user = ParseObject.from(userState); user.setIsCurrentUser(true); // Build new state ParseUser.State newUserState = new ParseUser.State.Builder() .objectId("testAgain") .put("key", "valueAgain") .build(); user.setState(newUserState); // Make sure we keep the authData assertEquals(1, user.getAuthData().size()); assertEquals(authData, user.getAuthData().get(authType)); // Make sure old state is replaced assertFalse(user.has("oldKey")); // Make sure new state is set assertEquals("testAgain", user.getObjectId()); assertEquals("valueAgain", user.get("key")); }
@Test public void testSetStateDoesNotAddNonExistentAuthData() { // Set user initial state ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .put("oldKey", "oldValue") .put("key", "value") .build(); ParseUser user = ParseObject.from(userState); user.setIsCurrentUser(true); // Build new state ParseUser.State newUserState = new ParseUser.State.Builder() .objectId("testAgain") .put("key", "valueAgain") .build(); user.setState(newUserState); // Make sure we do not add authData when it did not exist before assertFalse(user.keySet().contains("authData")); assertEquals(1, user.keySet().size()); assertEquals(0, user.getAuthData().size()); // Make sure old state is replaced assertFalse(user.has("oldKey")); // Make sure new state is set assertEquals("testAgain", user.getObjectId()); assertEquals("valueAgain", user.get("key")); }