package de.passau.uni.sec.compose.id.core.service; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.passau.uni.sec.compose.id.common.exception.IdManagementException; import de.passau.uni.sec.compose.id.common.exception.IdManagementException.Level; import de.passau.uni.sec.compose.id.core.domain.IPrincipal; import de.passau.uni.sec.compose.id.core.event.Event; import de.passau.uni.sec.compose.id.core.event.ListEntitiesInGroupEvent; import de.passau.uni.sec.compose.id.core.event.ListUsersInGroupEvent; import de.passau.uni.sec.compose.id.core.persistence.entities.EntityGroupMembership; import de.passau.uni.sec.compose.id.core.persistence.entities.Group; import de.passau.uni.sec.compose.id.core.persistence.entities.Membership; import de.passau.uni.sec.compose.id.core.persistence.repository.EntityGroupMembershipRepository; import de.passau.uni.sec.compose.id.core.persistence.repository.GroupRepository; import de.passau.uni.sec.compose.id.core.persistence.repository.MembershipRepository; import de.passau.uni.sec.compose.id.core.service.security.Authorization; import de.passau.uni.sec.compose.id.rest.messages.EntityGroupMembershipResponseMessage; import de.passau.uni.sec.compose.id.rest.messages.MembershipResponseMessage; import de.passau.uni.sec.compose.id.rest.messages.UsersInGroupMessage; @Service public class ListEntitiesGroupService extends AbstractListEntityService { private static Logger LOG = LoggerFactory.getLogger(ListEntitiesGroupService.class); @Autowired GroupRepository groupRepository; @Autowired EntityGroupMembershipRepository membershipRepository; @Autowired Authorization authz; @Override public Object postACListAllEntities(Event event) throws IdManagementException { ListEntitiesInGroupEvent lsitEvent = ((ListEntitiesInGroupEvent)event); Group group = groupRepository.getOne(lsitEvent.getId()); List<EntityGroupMembership> membs = membershipRepository.findByGroup(group); List<EntityGroupMembershipResponseMessage> response = new LinkedList<EntityGroupMembershipResponseMessage>(); for(EntityGroupMembership memb: membs) { if(memb.isApprovedByGroupOwner() && memb.isApprovedBySelfOwner()) response.add(new EntityGroupMembershipResponseMessage(memb)); } UsersInGroupMessage ret = new UsersInGroupMessage(); ret.setApprovedMemberships(response); return ret; } @Override public void verifyACListAllEntities(Event event) throws IdManagementException { Collection<IPrincipal> p = event.getPrincipals(); if(p == null || p.size()==0) throw new IdManagementException("Authentication required.",null, LOG," Attempt to access GET without providing credentials",Level.DEBUG, 401); } }