use of io.gravitee.repository.management.model.Group in project gravitee-management-rest-api by gravitee-io.
the class GroupService_FindByEventTest method shouldGetGroupsByEvents.
@Test
public void shouldGetGroupsByEvents() throws Exception {
Group grp1 = new Group();
grp1.setId("grp1");
grp1.setName("grp1");
grp1.setEventRules(Collections.singletonList(new GroupEventRule(GroupEvent.API_CREATE)));
Group grp2 = new Group();
grp2.setId("grp2");
grp2.setName("grp2");
grp2.setEventRules(Collections.singletonList(new GroupEventRule(GroupEvent.API_CREATE)));
HashSet<Group> findAll = new HashSet<>();
findAll.add(grp1);
findAll.add(grp2);
when(groupRepository.findAllByEnvironment(Mockito.any())).thenReturn(findAll);
when(membershipService.getRoles(any(), any(), any(), any())).thenReturn(Collections.emptySet());
Set<GroupEntity> groupEntities = groupService.findByEvent(API_CREATE);
assertNotNull(groupEntities);
assertFalse(groupEntities.isEmpty());
assertEquals(2, groupEntities.size());
List<String> groupIds = groupEntities.stream().map(GroupEntity::getId).collect(Collectors.toList());
assertTrue(groupIds.containsAll(Arrays.asList("grp1", "grp2")));
}
use of io.gravitee.repository.management.model.Group in project gravitee-management-rest-api by gravitee-io.
the class GroupService_FindByEventTest method shouldNotGetGroupsByEvents.
@Test
public void shouldNotGetGroupsByEvents() throws Exception {
Group grp1 = new Group();
grp1.setId("grp1");
grp1.setEventRules(Collections.singletonList(new GroupEventRule(GroupEvent.APPLICATION_CREATE)));
Group grp2 = new Group();
grp2.setId("grp2");
grp2.setEventRules(Collections.singletonList(new GroupEventRule(GroupEvent.APPLICATION_CREATE)));
HashSet<Group> findAll = new HashSet<>();
findAll.add(grp1);
findAll.add(grp2);
when(groupRepository.findAllByEnvironment(any())).thenReturn(findAll);
Set<GroupEntity> groupEntities = groupService.findByEvent(API_CREATE);
assertNotNull(groupEntities);
assertTrue(groupEntities.isEmpty());
}
use of io.gravitee.repository.management.model.Group in project gravitee-management-rest-api by gravitee-io.
the class GroupService_IsUserAuthorizedToAccessTest method shouldNotBeAuthorizedForPublicApiIfMemberOfUnauthorizedGroups.
@Test
public void shouldNotBeAuthorizedForPublicApiIfMemberOfUnauthorizedGroups() throws TechnicalException {
when(api.getVisibility()).thenReturn(Visibility.PUBLIC);
when(api.getId()).thenReturn("apiId");
Group grp1 = new Group();
Group grp2 = new Group();
grp1.setId("grp1");
grp2.setId("grp2");
when(groupRepository.findAll()).thenReturn(new HashSet<>(Arrays.asList(grp1, grp2)));
when(api.getGroups()).thenReturn(new HashSet<>(Arrays.asList("grp1", "grp2")));
when(membershipService.getMember(MembershipReferenceType.API, api.getId(), "user", RoleScope.API)).thenReturn(null);
when(membershipService.getMember(MembershipReferenceType.GROUP, "grp2", "user", RoleScope.API)).thenReturn(null);
boolean userAuthorizedToAccess = groupService.isUserAuthorizedToAccessApiData(api, Collections.singletonList("grp1"), "user");
assertFalse(userAuthorizedToAccess);
verify(membershipService, times(2)).getMember(any(), any(), any(), any());
verify(membershipService, times(1)).getMember(MembershipReferenceType.API, api.getId(), "user", RoleScope.API);
verify(membershipService, times(1)).getMember(MembershipReferenceType.GROUP, "grp2", "user", RoleScope.API);
verify(api, never()).getGroups();
verify(groupRepository, times(1)).findAll();
}
use of io.gravitee.repository.management.model.Group in project gravitee-management-rest-api by gravitee-io.
the class CurrentUserResource method getCurrentUser.
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get the authenticated user")
@ApiResponses({ @ApiResponse(code = 200, message = "Authenticated user", response = UserDetails.class), @ApiResponse(code = 401, message = "Unauthorized user"), @ApiResponse(code = 500, message = "Internal server error") })
public Response getCurrentUser() {
if (isAuthenticated()) {
final UserDetails details = getAuthenticatedUserDetails();
final String userId = details.getUsername();
final String password = details.getPassword() != null ? details.getPassword() : "";
UserEntity userEntity;
try {
userEntity = userService.findByIdWithRoles(userId);
} catch (final UserNotFoundException unfe) {
final String unfeMessage = "User '{}' does not exist.";
if (LOG.isDebugEnabled()) {
LOG.info(unfeMessage, userId, unfe);
} else {
LOG.info(unfeMessage, userId);
}
response.addCookie(cookieGenerator.generate(TokenAuthenticationFilter.AUTH_COOKIE_NAME, null));
return status(Response.Status.UNAUTHORIZED).build();
}
List<GrantedAuthority> authorities = new ArrayList<>(details.getAuthorities());
UserDetails userDetails = new UserDetails(userEntity.getId(), password, authorities);
userDetails.setId(userEntity.getId());
// in case of memory user, look at the repository layer to get value updated by the user through the MyAccount page
userDetails.setFirstname(IDP_SOURCE_MEMORY.equals(userEntity.getSource()) && userEntity.getFirstname() != null ? userEntity.getFirstname() : details.getFirstname());
userDetails.setLastname(IDP_SOURCE_MEMORY.equals(userEntity.getSource()) && userEntity.getLastname() != null ? userEntity.getLastname() : details.getLastname());
userDetails.setSource(userEntity.getSource());
userDetails.setSourceId(userEntity.getSourceId());
userDetails.setPrimaryOwner(userEntity.isPrimaryOwner());
userDetails.setCreatedAt(userEntity.getCreatedAt());
userDetails.setUpdatedAt(userEntity.getUpdatedAt());
userDetails.setLastConnectionAt(userEntity.getLastConnectionAt());
if (details.getEmail() == null && IDP_SOURCE_MEMORY.equals(userEntity.getSource()) && userEntity.getEmail() != null) {
userDetails.setEmail(userEntity.getEmail());
} else {
userDetails.setEmail(details.getEmail());
}
boolean newsletterEnabled = environment.getProperty("newsletter.enabled", boolean.class, true);
if (newsletterEnabled && userEntity.getNewsletterSubscribed() == null && userEntity.getFirstConnectionAt() != null) {
long diffInMs = Math.abs(new Date().getTime() - userEntity.getFirstConnectionAt().getTime());
long diff = TimeUnit.DAYS.convert(diffInMs, TimeUnit.MILLISECONDS);
userDetails.setDisplayNewsletterSubscription(diff >= 7);
} else {
userDetails.setDisplayNewsletterSubscription(false);
}
// convert UserEntityRoles to UserDetailsRoles
userDetails.setRoles(userEntity.getRoles().stream().map(userEntityRole -> {
UserDetailRole userDetailRole = new UserDetailRole();
userDetailRole.setScope(userEntityRole.getScope().name());
userDetailRole.setName(userEntityRole.getName());
userDetailRole.setPermissions(userEntityRole.getPermissions());
return userDetailRole;
}).collect(Collectors.toList()));
final Set<MembershipEntity> memberships = membershipService.getMembershipsByMemberAndReference(MembershipMemberType.USER, userId, MembershipReferenceType.GROUP);
if (!memberships.isEmpty()) {
final Map<String, Set<String>> userGroups = new HashMap<>();
environmentService.findByOrganization(GraviteeContext.getCurrentOrganization()).forEach(environment -> {
try {
final Set<Group> groups = groupRepository.findAllByEnvironment(environment.getId());
userGroups.put(environment.getId(), new HashSet<>());
memberships.stream().map(MembershipEntity::getReferenceId).forEach(groupId -> {
final Optional<Group> optionalGroup = groups.stream().filter(group -> groupId.equals(group.getId())).findFirst();
optionalGroup.ifPresent(entity -> userGroups.get(environment.getId()).add(entity.getName()));
});
userDetails.setGroupsByEnvironment(userGroups);
} catch (TechnicalException e) {
LOG.error("Error while trying to get groups of the user " + userId, e);
}
});
}
userDetails.setFirstLogin(1 == userEntity.getLoginCount());
if (userEntity.getCustomFields() != null) {
userDetails.setCustomFields(userEntity.getCustomFields());
}
return ok(userDetails, MediaType.APPLICATION_JSON).build();
} else {
return ok().build();
}
}
use of io.gravitee.repository.management.model.Group in project gravitee-management-rest-api by gravitee-io.
the class GroupService_UpdateTest method shouldUpdateGroup.
@Test
public void shouldUpdateGroup() throws Exception {
UpdateGroupEntity updatedGroupEntity = new UpdateGroupEntity();
updatedGroupEntity.setDisableMembershipNotifications(true);
updatedGroupEntity.setEmailInvitation(true);
updatedGroupEntity.setEventRules(null);
updatedGroupEntity.setLockApiRole(true);
updatedGroupEntity.setLockApplicationRole(true);
updatedGroupEntity.setMaxInvitation(100);
updatedGroupEntity.setName("my-group-name");
updatedGroupEntity.setRoles(Maps.<RoleScope, String>builder().put(RoleScope.API, "OWNER").build());
updatedGroupEntity.setSystemInvitation(false);
when(groupRepository.findById(GROUP_ID)).thenReturn(Optional.of(Mockito.mock(Group.class)));
when(permissionService.hasPermission(RolePermission.ENVIRONMENT_GROUP, "DEFAULT", CREATE, UPDATE, DELETE)).thenReturn(true);
when(membershipService.getRoles(any(), any(), any(), any())).thenReturn(Collections.emptySet());
groupService.update(GROUP_ID, updatedGroupEntity);
verify(groupRepository).update(argThat(group -> group.isDisableMembershipNotifications() && group.isEmailInvitation() && group.getEventRules() == null && group.isLockApiRole() && group.isLockApplicationRole() && group.getMaxInvitation() == 100 && group.getName().equals("my-group-name") && !group.isSystemInvitation()));
verify(membershipService).addRoleToMemberOnReference(argThat(membershipReference -> membershipReference.getType() == MembershipReferenceType.API && membershipReference.getId() == null), argThat(membershipMember -> membershipMember.getMemberId().equals(GROUP_ID) && membershipMember.getReference() == null && membershipMember.getMemberType() == MembershipMemberType.GROUP), argThat(membershipRole -> membershipRole.getScope() == RoleScope.API && membershipRole.getName().equals("OWNER")));
}
Aggregations