Skip to content

Commit

Permalink
SHIBUI-1262 [1303]
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed May 21, 2019
1 parent 043a886 commit 729af52
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor;
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation;
import edu.internet2.tier.shibboleth.admin.ui.domain.versioning.Version;
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects;
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository;
import edu.internet2.tier.shibboleth.admin.ui.security.model.User;
import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository;
import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository;
import edu.internet2.tier.shibboleth.admin.ui.security.service.UserService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService;
import org.opensaml.core.xml.io.MarshallingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -34,6 +36,7 @@
import javax.annotation.PostConstruct;
import javax.xml.ws.Response;
import java.net.URI;
import java.util.List;
import java.util.stream.Collectors;

@RestController
Expand All @@ -52,20 +55,17 @@ public class EntityDescriptorController {
@Autowired
RestTemplateBuilder restTemplateBuilder;

private UserRepository userRepository;

private RoleRepository roleRepository;

private UserService userService;

private RestTemplate restTemplate;

private EntityDescriptorVersionService versionService;

private static Logger LOGGER = LoggerFactory.getLogger(EntityDescriptorController.class);

public EntityDescriptorController(UserRepository userRepository, RoleRepository roleRepository, UserService userService) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
public EntityDescriptorController(UserService userService, EntityDescriptorVersionService versionService) {
this.userService = userService;
this.versionService = versionService;
}

@PostConstruct
Expand Down Expand Up @@ -220,6 +220,40 @@ public ResponseEntity<?> deleteOne(@PathVariable String resourceId) {
}
}

//Versioning endpoints

@GetMapping("/EntityDescriptor/{resourceId}/Versions")
public ResponseEntity<?> getAllVersions(@PathVariable String resourceId) {
EntityDescriptor ed = entityDescriptorRepository.findByResourceId(resourceId);
if (ed == null) {
return ResponseEntity.notFound().build();
}
List<Version> versions = versionService.findVersionsForEntityDescriptor(resourceId);
if (versions.isEmpty()) {
return ResponseEntity.notFound().build();
}
if(isAuthorizedFor(ed.getCreatedBy())) {
return ResponseEntity.ok(versions);
}
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}

@GetMapping("/EntityDescriptor/{resourceId}/Versions/{versionId}")
public ResponseEntity<?> getSpecificVersion(@PathVariable String resourceId, @PathVariable String versionId) {
EntityDescriptorRepresentation edRepresentation =
versionService.findSpecificVersionOfEntityDescriptor(resourceId, versionId);

if (edRepresentation == null) {
return ResponseEntity.notFound().build();
}
if(isAuthorizedFor(edRepresentation.getCreatedBy())) {
return ResponseEntity.ok(edRepresentation);
}
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}

//Private methods

private static URI getResourceUriFor(EntityDescriptor ed) {
return ServletUriComponentsBuilder
.fromCurrentServletMapping().path("/api/EntityDescriptor")
Expand Down Expand Up @@ -267,4 +301,11 @@ private ResponseEntity<?> handleUploadingEntityDescriptorXml(byte[] rawXmlBytes,
.body(entityDescriptorService.createRepresentationFromDescriptor(persistedEd));
}

private boolean isAuthorizedFor(String username) {
User u = userService.getCurrentUser();
return (u != null) &&
(u.getRole().equals("ROLE_ADMIN")
|| (u.getUsername().equals(username)));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ public interface EntityDescriptorVersionService {

List<Version> findVersionsForEntityDescriptor(String resourceId);

EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionToken);
EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorReposit
import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository
import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository
import edu.internet2.tier.shibboleth.admin.ui.security.service.UserService
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService
import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityDescriptorServiceImpl
import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityServiceImpl
import edu.internet2.tier.shibboleth.admin.ui.util.RandomGenerator
Expand Down Expand Up @@ -69,6 +70,7 @@ class EntityDescriptorControllerTests extends Specification {
RoleRepository roleRepository = Mock()

UserService userService
EntityDescriptorVersionService versionService = Mock()

def setup() {
generator = new TestObjectGenerator()
Expand All @@ -78,7 +80,7 @@ class EntityDescriptorControllerTests extends Specification {
userService = new UserService(roleRepository, userRepository)
service = new JPAEntityDescriptorServiceImpl(openSamlObjects, new JPAEntityServiceImpl(openSamlObjects), userService)

controller = new EntityDescriptorController(userRepository, roleRepository, userService)
controller = new EntityDescriptorController(userService, versionService)
controller.entityDescriptorRepository = entityDescriptorRepository
controller.openSamlObjects = openSamlObjects
controller.entityDescriptorService = service
Expand Down

0 comments on commit 729af52

Please sign in to comment.