String sessionToken = ((State) state).sessionToken(); if (sessionToken != null) { try { Map<String, Map<String, String>> authData = ((State) state).authData(); if (authData.size() > 0) { try {
@Test public void testGetAsync() throws Exception { File file = new File(temporaryFolder.getRoot(), "test"); JSONObject json = new JSONObject(); ParseFileUtils.writeJSONObjectToFile(file, json); ParseUser.State.Builder builder = new ParseUser.State.Builder(); builder.put("foo", "bar"); ParseUserCurrentCoder coder = mock(ParseUserCurrentCoder.class); when(coder.decode(any(ParseUser.State.Builder.class), any(JSONObject.class), any(ParseDecoder.class))) .thenReturn(builder); FileObjectStore<ParseUser> store = new FileObjectStore<>(ParseUser.class, file, coder); ParseUser user = ParseTaskUtils.wait(store.getAsync()); assertEquals("bar", user.getState().get("foo")); }
static State createFromParcel(Parcel source, ParseParcelDecoder decoder) { String className = source.readString(); if ("_User".equals(className)) { return new ParseUser.State(source, className, decoder); } return new State(source, className, decoder); }
@Test public void testDecodeSuccessWithSessionTokenAndAuthData() throws Exception { JSONObject facebookAuthDataJson = new JSONObject() .put("id", "facebookId") .put("access_token", "facebookAccessToken"); JSONObject twitterAuthDataJson = new JSONObject() .put("id", "twitterId") .put("access_token", "twitterAccessToken"); JSONObject authDataJson = new JSONObject() .put("facebook", facebookAuthDataJson) .put("twitter", twitterAuthDataJson); JSONObject objectJson = new JSONObject() .put(KEY_SESSION_TOKEN, "sessionToken") .put(KEY_AUTH_DATA, authDataJson); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); ParseUser.State.Builder builder = coder.decode(new ParseUser.State.Builder(), objectJson, ParseDecoder.get()); // We use the builder to build a state to verify the content in the builder ParseUser.State state = builder.build(); assertEquals("sessionToken", state.sessionToken()); Map<String, Map<String, String>> authData = state.authData(); Map<String, String> facebookAuthData = authData.get("facebook"); assertEquals("facebookId", facebookAuthData.get("id")); assertEquals("facebookAccessToken", facebookAuthData.get("access_token")); Map<String, String> twitterAuthData = authData.get("twitter"); assertEquals("twitterId", twitterAuthData.get("id")); assertEquals("twitterAccessToken", twitterAuthData.get("access_token")); }
@Test public void testLoginWithAsyncWithoutExistingLazyUser() throws ParseException { ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(false)).thenReturn(Task.<ParseUser>forResult(null)); when(currentUserController.setAsync(any(ParseUser.class))) .thenReturn(Task.<Void>forResult(null)); ParseUser.State userState = mock(ParseUser.State.class); when(userState.className()).thenReturn("_User"); when(userState.objectId()).thenReturn("1234"); when(userState.isComplete()).thenReturn(true); ParseUserController userController = mock(ParseUserController.class); when(userController.logInAsync(anyString(), anyMapOf(String.class, String.class))) .thenReturn(Task.forResult(userState)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); ParseCorePlugins.getInstance().registerUserController(userController); String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("token", "123"); ParseUser user = ParseTaskUtils.wait(ParseUser.logInWithInBackground(authType, authData)); verify(currentUserController).getAsync(false); verify(userController).logInAsync(authType, authData); verify(currentUserController).setAsync(user); assertSame(userState, user.getState()); verifyNoMoreInteractions(currentUserController); verifyNoMoreInteractions(userController); }
/* 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); }
@Test public void testLoginAsyncWithUserStateNotCreated() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 200, "OK"); // Make test user state and operationSet ParseUser.State state = new ParseUser.State.Builder() .put("username", "testUserName") .put("password", "testPassword") .build(); ParseOperationSet operationSet = new ParseOperationSet(); operationSet.put("username", new ParseSetOperation("testUserName")); operationSet.put("password", new ParseSetOperation("testPassword")); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait(controller.logInAsync(state, operationSet)); // Verify user state verifyBasicUserState(mockResponse, newState); assertFalse(newState.isNew()); assertTrue(newState.isComplete()); }
@Test public void testLoginAsyncWithUserStateCreated() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 201, "OK"); // Make test user state and operationSet ParseUser.State state = new ParseUser.State.Builder() .put("username", "testUserName") .put("password", "testPassword") .build(); ParseOperationSet operationSet = new ParseOperationSet(); operationSet.put("username", new ParseSetOperation("testUserName")); operationSet.put("password", new ParseSetOperation("testPassword")); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait(controller.logInAsync(state, operationSet)); // Verify user state verifyBasicUserState(mockResponse, newState); assertTrue(newState.isNew()); assertFalse(newState.isComplete()); }
@Test public void testSignUpAsync() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(generateBasicMockResponse(), 200, "OK"); // Make test user state and operationSet ParseUser.State state = new ParseUser.State.Builder() .put("username", "testUserName") .put("password", "testPassword") .build(); ParseOperationSet operationSet = new ParseOperationSet(); operationSet.put("username", new ParseSetOperation("testUserName")); operationSet.put("password", new ParseSetOperation("testPassword")); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait( controller.signUpAsync(state, operationSet, "sessionToken")); verifyBasicUserState(mockResponse, newState); assertFalse(newState.isComplete()); assertTrue(newState.isNew()); }
/* 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 testLoginAsyncWithAuthTypeNotCreated() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); mockResponse.put("authData", generateMockAuthData()); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 200, "OK"); // Make test user auth data Map<String, String> facebookAuthInfoMap = new HashMap<>(); facebookAuthInfoMap.put("token", "test"); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait( controller.logInAsync("facebook", facebookAuthInfoMap)); // Verify user state verifyBasicUserState(mockResponse, newState); assertFalse(newState.isNew()); assertTrue(newState.isComplete()); }
@Test public void testLoginAsyncWithAuthTypeCreated() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); mockResponse.put("authData", generateMockAuthData()); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 201, "OK"); // Make test user auth data Map<String, String> facebookAuthInfoMap = new HashMap<>(); facebookAuthInfoMap.put("token", "test"); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait( controller.logInAsync("facebook", facebookAuthInfoMap)); // Verify user state verifyBasicUserState(mockResponse, newState); assertTrue(newState.isNew()); assertTrue(newState.isComplete()); }
@Override public Task<ParseUser.State> logInAsync( ParseUser.State state, ParseOperationSet operations) { JSONObject objectJSON = coder.encode(state, operations, PointerEncoder.get()); final ParseRESTUserCommand command = ParseRESTUserCommand.serviceLogInUserCommand( objectJSON, state.sessionToken(), revocableSession); return command.executeAsync(client).onSuccess(new Continuation<JSONObject, ParseUser.State>() { @Override public ParseUser.State then(Task<JSONObject> task) { JSONObject result = task.getResult(); // TODO(grantland): Does the server really respond back with complete object data if the // object isn't new? boolean isNew = command.getStatusCode() == STATUS_CODE_CREATED; boolean isComplete = !isNew; return coder.decode(new ParseUser.State.Builder(), result, ParseDecoder.get()) .isComplete(isComplete) .isNew(isNew) .build(); } }); }
@Test public void testEncodeDecodeWithNullValues() { ParseUser.State state = new ParseUser.State.Builder() .sessionToken(null) .authData(null) .build(); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); JSONObject object = coder.encode(state, null, PointerEncoder.get()); ParseUser.State.Builder builder = coder.decode(new ParseUser.State.Builder(), object, ParseDecoder.get()); state = builder.build(); assertNull(state.sessionToken()); assertEquals(0, state.authData().size()); } }
public String sessionToken() { return (String) get(KEY_SESSION_TOKEN); }
/** * Whether the ParseUser has been authenticated on this device. This will be true if the ParseUser * was obtained via a logIn or signUp method. Only an authenticated ParseUser can be saved (with * altered attributes) and deleted. */ public boolean isAuthenticated() { synchronized (mutex) { ParseUser current = ParseUser.getCurrentUser(); return isLazy() || (getState().sessionToken() != null && current != null && getObjectId().equals(current.getObjectId())); } }
@Test public void testGetUserAsync() throws Exception { // Make mock response and client JSONObject mockResponse = generateBasicMockResponse(); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 201, "OK"); NetworkUserController controller = new NetworkUserController(restClient, true); ParseUser.State newState = ParseTaskUtils.wait(controller.getUserAsync("sessionToken")); // Verify user state verifyBasicUserState(mockResponse, newState); assertTrue(newState.isComplete()); assertFalse(newState.isNew()); }
/* package */ Builder(State state) { super(state); isNew = state.isNew(); }
@SuppressWarnings("unchecked") public Map<String, Map<String, String>> authData() { Map<String, Map<String, String>> authData = (Map<String, Map<String, String>>) get(KEY_AUTH_DATA); if (authData == null) { // We'll always return non-null for now since we don't have any null checking in place. // Be aware not to get and set without checking size or else we'll be adding a value that // wasn't there in the first place. authData = new HashMap<>(); } return authData; }
@SuppressWarnings("unchecked") @Override public State build() { return new State(this); }