private SecurityContextAccessor mockSecurityContext(ScimUser user) { SecurityContextAccessor sca = mock(SecurityContextAccessor.class); String id = user.getId(); when(sca.getUserId()).thenReturn(id); return sca; }
@Test public void deleteUserWithNoEtagSucceeds() throws Exception { ScimUser deleteMe = createUser(DELETE_ME, "Delete", "Me", "deleteme@blah.com").getBody(); @SuppressWarnings("rawtypes") ResponseEntity<Map> response = client.exchange(serverRunning.getUrl(userEndpoint + "/{id}"), HttpMethod.DELETE, new HttpEntity<Void>((Void) null), Map.class, deleteMe.getId()); assertEquals(HttpStatus.OK, response.getStatusCode()); }
@Test public void userInfoSucceeds() throws Exception { HttpHeaders headers = new HttpHeaders(); RestOperations client = serverRunning.getRestTemplate(); ResponseEntity<Void> result = client.exchange(serverRunning.getUrl("/userinfo"), HttpMethod.GET, new HttpEntity<Void>(null, headers), Void.class, joe.getId()); assertEquals(HttpStatus.OK, result.getStatusCode()); }
@Test(expected = IllegalArgumentException.class) public void cannotRetrieveUsersWithAnotherSqlInjectionAttack() { String password = jdbcTemplate.queryForObject("select password from users where username='joe'", String.class); assertNotNull(password); Collection<ScimUser> users = db.query("username eq \"joe\"\"; select id from users where id='''; select " + SQL_INJECTION_FIELDS + " from users where username='joe'", IdentityZoneHolder.get().getId()); assertEquals(password, users.iterator().next().getId()); }
private void assertMfaCredentialsNotExisting(ScimUser user, MfaProvider provider) { try { mfaCredentialsProvisioning.retrieve(user.getId(), provider.getId()); fail(); } catch (UserMfaConfigDoesNotExistException e) { //no op } }
private UaaUser getUaaUser(ScimUser scimUser) { Date today = new Date(); return new UaaUser(scimUser.getId(), scimUser.getUserName(), "N/A", scimUser.getPrimaryEmail(), null, scimUser.getGivenName(), scimUser.getFamilyName(), today, today, scimUser.getOrigin(), scimUser.getExternalId(), scimUser.isVerified(), scimUser.getZoneId(), scimUser.getSalt(), scimUser.getPasswordLastModified()); }
@Test void listUserTokens_for_self() throws Exception { String userId = user2.getId(); listTokens("/oauth/token/list/user/" + userId, tokensPerUser.getFirst(userId), emptyList(), status().isForbidden()); }
@Test public void clientCanChangeUserPasswordWithoutCurrentPassword() { SecurityContextAccessor sca = mockSecurityContext(joel); when(sca.isClient()).thenReturn(true); endpoints.setSecurityContextAccessor(sca); PasswordChangeRequest change = new PasswordChangeRequest(); change.setPassword("newpassword"); endpoints.changePassword(joel.getId(), change); }
@Test public void deleteUserUpdatesGroupMembership() { ScimUser exGuy = new ScimUser(null, "deleteme3", "Expendable", "Guy"); exGuy.addEmail("exguy3@imonlyheretobedeleted.com"); exGuy = dao.createUser(exGuy, "exguyspassword", IdentityZoneHolder.get().getId()); ScimGroup g = new ScimGroup(null,"test1",IdentityZoneHolder.get().getId()); g.setMembers(asList(new ScimGroupMember(exGuy.getId()))); g = groupEndpoints.createGroup(g, new MockHttpServletResponse()); validateGroupMembers(g, exGuy.getId(), true); endpoints.deleteUser(exGuy.getId(), "*", new MockHttpServletRequest(), new MockHttpServletResponse()); validateGroupMembers(groupEndpoints.getGroup(g.getId(), new MockHttpServletResponse()), exGuy.getId(), false); }
private ScimGroupMember addMember(ScimUser user, ScimGroup group) { ScimGroupMember gm = new ScimGroupMember(user.getId()); try { return groupMembershipManager.addMember(group.getId(), gm, IdentityZoneHolder.get().getId()); }catch (MemberAlreadyExistsException x) { return gm; } }
@Test public void testSetPasswordChangeRequired() { ScimUser user = new ScimUser(null, generator.generate()+ "@foo.com", "Jo", "User"); user.addEmail(user.getUserName()); ScimUser created = db.createUser(user, "j7hyqpassX", IdentityZoneHolder.get().getId()); assertFalse(db.checkPasswordChangeIndividuallyRequired(created.getId(), IdentityZoneHolder.get().getId())); db.updatePasswordChangeRequired(created.getId(), true, IdentityZoneHolder.get().getId()); assertTrue(db.checkPasswordChangeIndividuallyRequired(created.getId(), IdentityZoneHolder.get().getId())); db.updatePasswordChangeRequired(created.getId(), false, IdentityZoneHolder.get().getId()); assertFalse(db.checkPasswordChangeIndividuallyRequired(created.getId(), IdentityZoneHolder.get().getId())); }
@Test public void legacyTestFindIdsByEmailContains() { SearchResults<?> results = endpoints.findUsers("id", "emails.value sw 'j'", null, "ascending", 1, 100); assertEquals(1, results.getTotalResults()); assertTrue("Couldn't find id: " + results.getResources(), getSetFromMaps(results.getResources(), "id") .contains(joel.getId())); }
@Test public void update_invitedUser_whose_username_is_notEmail() throws Exception { ScimUser scimUser = getInvitedUser(); SAMLCredential credential = getUserCredential("marissa-invited", "Marissa-invited", null, "marissa.invited@test.org", null); when(consumer.processAuthenticationResponse(any())).thenReturn(credential); getAuthentication(); UaaUser user = userDatabase.retrieveUserById(scimUser.getId()); assertFalse(user.isVerified()); assertEquals("marissa-invited", user.getUsername()); assertEquals("marissa.invited@test.org", user.getEmail()); RequestContextHolder.resetRequestAttributes(); }
@Test void listUserTokens_using_TokensList_scope() throws Exception { String userId = user1withTokensListScope.getId(); listTokens("/oauth/token/list/user/" + userId, tokensPerUser.getFirst(userId), tokensPerUser.get(userId), status().isOk()); }
@Test(expected = ScimException.class) public void changePasswordRequestFailsForUserWithoutCurrentPassword() { endpoints.setSecurityContextAccessor(mockSecurityContext(joel)); PasswordChangeRequest change = new PasswordChangeRequest(); change.setPassword("newpassword"); endpoints.changePassword(joel.getId(), change); }
@BeforeEach public void setUp() throws Exception { ScimUser marissa = userProvisioning.query("username eq \"marissa\" and origin eq \"uaa\"", IdentityZoneHolder.get().getId()).get(0); UaaPrincipal uaaPrincipal = new UaaPrincipal(marissa.getId(), marissa.getUserName(), marissa.getPrimaryEmail(), marissa.getOrigin(), marissa.getExternalId(), IdentityZoneHolder.get().getId()); principal = new UaaAuthentication(uaaPrincipal, Collections.singletonList(UaaAuthority.fromAuthorities("uaa.user")), null); }
@Test public void delete_member_from_nonexistent_group() throws Exception { ScimUser user = createUserAndAddToGroups(IdentityZone.getUaa(), Collections.singleton("scim.read")); getMockMvc().perform(delete("/Groups/nonexistent-group/members/" + user.getId()) .header("Authorization", "Bearer " + scimWriteToken) .header("Content-Type", APPLICATION_JSON_VALUE)) .andExpect(status().isNotFound()); }
@Test void verification_link_is_authorized_endpoint() throws Exception { ScimUser joel = setUpScimUser(); MockHttpServletRequestBuilder get = MockMvcRequestBuilders.get("/Users/" + joel.getId() + "/verify-link") .param("redirect_uri", HTTP_REDIRECT_EXAMPLE_COM) .accept(APPLICATION_JSON); mockMvc.perform(get) .andExpect(status().isUnauthorized()); }
public void test_Delete_When_InternalUserManagement_Is_Disabled(String origin) { MockHttpServletRequest request = new MockHttpServletRequest(); request.setAttribute(DisableInternalUserManagementFilter.DISABLE_INTERNAL_USER_MANAGEMENT, true); ScimUser exGuy = new ScimUser(null, "deleteme", "Expendable", "Guy"); exGuy.setOrigin(origin); exGuy.addEmail("exguy@imonlyheretobedeleted.com"); exGuy = dao.createUser(exGuy, "exguyspassword", IdentityZoneHolder.get().getId()); endpoints.deleteUser(exGuy.getId(), "\"*", request, new MockHttpServletResponse()); }
@Test void testForcePasswordExpireAccountInvalid() throws Exception { ScimUser user = createUser(uaaAdminToken); UserAccountStatus alteredAccountStatus = new UserAccountStatus(); alteredAccountStatus.setPasswordChangeRequired(false); updateAccountStatus(user, alteredAccountStatus) .andExpect(status().isBadRequest()); assertFalse(usersRepository.checkPasswordChangeIndividuallyRequired(user.getId(), IdentityZoneHolder.get().getId())); }