Skip to content

Commit

Permalink
SHIBUI-2001
Browse files Browse the repository at this point in the history
Enable endpoint
  • Loading branch information
chasegawa committed Jul 30, 2021
1 parent bd86f72 commit afbe10e
Show file tree
Hide file tree
Showing 16 changed files with 392 additions and 265 deletions.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import edu.internet2.tier.shibboleth.admin.ui.security.model.Role
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 groovy.util.logging.Slf4j
import org.springframework.boot.context.event.ApplicationStartedEvent
import org.springframework.context.event.EventListener
Expand All @@ -19,11 +20,13 @@ class UserBootstrap {
private final ShibUIConfiguration shibUIConfiguration
private final UserRepository userRepository
private final RoleRepository roleRepository
private final UserService userService

UserBootstrap(ShibUIConfiguration shibUIConfiguration, UserRepository userRepository, RoleRepository roleRepository) {
UserBootstrap(ShibUIConfiguration shibUIConfiguration, UserRepository userRepository, RoleRepository roleRepository, UserService userService) {
this.shibUIConfiguration = shibUIConfiguration
this.userRepository = userRepository
this.roleRepository = roleRepository
this.userService = userService
}

@Transactional
Expand All @@ -50,7 +53,7 @@ class UserBootstrap {
it.emailAddress = email
it
}
userRepository.saveAndFlush(user)
userService.save(user)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,27 @@
package edu.internet2.tier.shibboleth.admin.ui.configuration;

import javax.servlet.http.HttpServletRequest;

import org.apache.lucene.analysis.Analyzer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.util.UrlPathHelper;

import com.fasterxml.jackson.databind.Module;

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.repository.MetadataResolverRepository;
Expand All @@ -13,49 +34,25 @@
import edu.internet2.tier.shibboleth.admin.ui.service.DefaultMetadataResolversPositionOrderContainerService;
import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryService;
import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityIdsSearchService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityIdsSearchServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityService;
import edu.internet2.tier.shibboleth.admin.ui.service.FileCheckingFileWritingService;
import edu.internet2.tier.shibboleth.admin.ui.service.FileWritingService;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterTargetService;
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.service.JPAFilterServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.JPAFilterTargetServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.JPAMetadataResolverServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService;
import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolversPositionOrderContainerService;
import edu.internet2.tier.shibboleth.admin.util.AttributeUtility;
import edu.internet2.tier.shibboleth.admin.util.LuceneUtility;
import edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions;
import org.apache.lucene.analysis.Analyzer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.util.UrlPathHelper;

import javax.servlet.http.HttpServletRequest;

@Configuration
@Import(SearchConfiguration.class)
@ComponentScan(basePackages="{ edu.internet2.tier.shibboleth.admin.ui.service }")
@EnableConfigurationProperties({CustomPropertiesConfiguration.class, ShibUIConfiguration.class})
public class CoreShibUiConfiguration {
private static final Logger logger = LoggerFactory.getLogger(CoreShibUiConfiguration.class);

@Bean
public OpenSamlObjects openSamlObjects() {
return new OpenSamlObjects();
Expand All @@ -66,25 +63,25 @@ public EntityService jpaEntityService() {
return new JPAEntityServiceImpl(openSamlObjects());
}

@Bean
public EntityDescriptorService jpaEntityDescriptorService(UserService userService) {
return new JPAEntityDescriptorServiceImpl(openSamlObjects(), jpaEntityService(), userService);
}
// @Bean
// public EntityDescriptorService JPAEntityDescriptorServiceImpl(UserService userService) {
// return new JPAEntityDescriptorServiceImpl(openSamlObjects(), jpaEntityService(), userService);
// }

@Bean
public FilterService jpaFilterService() {
return new JPAFilterServiceImpl();
}
// @Bean
// public FilterService jpaFilterService() {
// return new JPAFilterServiceImpl();
// }

@Bean
public FilterTargetService jpaFilterTargetService() {
return new JPAFilterTargetServiceImpl();
}

@Bean
public MetadataResolverService metadataResolverService() {
return new JPAMetadataResolverServiceImpl();
}
// @Bean
// public MetadataResolverService metadataResolverService() {
// return new JPAMetadataResolverServiceImpl();
// }

@Bean
public AttributeUtility attributeUtility() {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,25 @@
import javax.script.ScriptException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import edu.internet2.tier.shibboleth.admin.ui.domain.exceptions.MetadataFileNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.exception.EntityNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException;
import edu.internet2.tier.shibboleth.admin.ui.exception.InitializationException;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService;
import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService;

@RestController
@RequestMapping("/api/activate")
Expand All @@ -27,6 +33,9 @@ public class ActivateController {
@Autowired
private FilterService filterService;

@Autowired
private MetadataResolverService metadataResolverService;

@PatchMapping(path = "/entityDescriptor/{resourceId}/{mode}")
@Transactional
public ResponseEntity<?> enableEntityDescriptor(@PathVariable String resourceId, @PathVariable String mode) throws EntityNotFoundException, ForbiddenException {
Expand All @@ -42,5 +51,15 @@ public ResponseEntity<?> enableFilter(@PathVariable String metadataResolverId, @
MetadataFilter persistedFilter = filterService.updateFilterEnabledStatus(metadataResolverId, resourceId, status);
return ResponseEntity.ok(persistedFilter);
}
// Enable/disable for : , provider

@PatchMapping("/MetadataResolvers/{resourceId}/{mode}")
@Transactional
public ResponseEntity<?> enableProvider(@PathVariable String resourceId, @PathVariable String mode) throws EntityNotFoundException, ForbiddenException, MetadataFileNotFoundException, InitializationException {
boolean status = "enable".equalsIgnoreCase(mode);
MetadataResolver existingResolver = metadataResolverService.findByResourceId(resourceId);
existingResolver.setEnabled(status);
existingResolver = metadataResolverService.updateMetadataResolverEnabledStatus(existingResolver);

return ResponseEntity.ok(existingResolver);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.controller;

import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;

import javax.script.ScriptException;

import org.springframework.http.HttpStatus;
Expand All @@ -9,8 +11,10 @@
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import edu.internet2.tier.shibboleth.admin.ui.domain.exceptions.MetadataFileNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.exception.EntityNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException;
import edu.internet2.tier.shibboleth.admin.ui.exception.InitializationException;

@ControllerAdvice(assignableTypes = {ActivateController.class})
public class ActivateExceptionHandler extends ResponseEntityExceptionHandler {
Expand All @@ -25,8 +29,20 @@ public ResponseEntity<?> handleForbiddenAccess(ForbiddenException e, WebRequest
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(new ErrorResponse(String.valueOf(HttpStatus.FORBIDDEN.value()), e.getMessage()));
}

@ExceptionHandler({ InitializationException.class })
public ResponseEntity<?> handleInitializationException(InitializationException e, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), e.getMessage()));
}

@ExceptionHandler({ MetadataFileNotFoundException.class })
public ResponseEntity<?> handleMetadataFileNotFoundException(MetadataFileNotFoundException e, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse(INTERNAL_SERVER_ERROR.toString(), e.getLocalizedMessage()));
}

@ExceptionHandler({ ScriptException.class })
public ResponseEntity<?> handleScriptException(ScriptException e, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), e.getMessage()));
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.exception;

public class InitializationException extends Exception {
public InitializationException(Exception e) {
super(e);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.util.Optional;
import java.util.Set;

import javax.transaction.Transactional;

import org.apache.commons.lang.StringUtils;
import org.springframework.security.core.context.SecurityContextHolder;

Expand Down Expand Up @@ -80,4 +82,10 @@ public boolean currentUserHasExpectedRole(List<String> acceptedRoles) {
User user = getCurrentUser();
return acceptedRoles.contains(user.getRole());
}

@Transactional
public User save(User user) {
// NOTE: REPLACE ENTIRELY WITH 1740 code
return userRepository.save(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
Expand All @@ -78,6 +79,7 @@
*
* @since 1.0
*/
@Service
public class JPAEntityDescriptorServiceImpl implements EntityDescriptorService {
@Autowired
private EntityDescriptorRepository entityDescriptorRepository;
Expand All @@ -88,6 +90,7 @@ public class JPAEntityDescriptorServiceImpl implements EntityDescriptorService {
@Autowired
private EntityService entityService;

@Autowired
private UserService userService;

public JPAEntityDescriptorServiceImpl(OpenSamlObjects openSamlObjects, EntityService entityService, UserService userService) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import edu.internet2.tier.shibboleth.admin.ui.security.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import java.util.ArrayList;
Expand All @@ -26,6 +27,7 @@
* @since 1.0
* @author Bill Smith (wsmith@unicon.net)
*/
@Service
public class JPAFilterServiceImpl implements FilterService {
@Autowired
EntityDescriptorService entityDescriptorService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.opensaml.saml.metadata.resolver.MetadataResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileNotFoundException;
Expand All @@ -32,6 +33,7 @@
/**
* @author Bill Smith (wsmith@unicon.net)
*/
@Service
public class MetadataResolverConverterServiceImpl implements MetadataResolverConverterService {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@

import org.w3c.dom.Document;

import edu.internet2.tier.shibboleth.admin.ui.domain.exceptions.MetadataFileNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.exception.EntityNotFoundException;
import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException;
import edu.internet2.tier.shibboleth.admin.ui.exception.InitializationException;

public interface MetadataResolverService {
public void reloadFilters(String metadataResolverName);
public MetadataResolver findByResourceId(String resourceId) throws EntityNotFoundException;

public Document generateConfiguration();

public void reloadFilters(String metadataResolverName);

public MetadataResolver updateMetadataResolverEnabledStatus(MetadataResolver existingResolver) throws ForbiddenException, MetadataFileNotFoundException, InitializationException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.Internationalization
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.exceptions.MetadataFileNotFoundException
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.exception.EntityNotFoundException
import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException
import edu.internet2.tier.shibboleth.admin.ui.exception.InitializationException
import edu.internet2.tier.shibboleth.admin.ui.repository.FilterRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService
Expand Down Expand Up @@ -86,6 +90,18 @@ class MetadataFiltersControllerTests extends Specification {
Document generateConfiguration() {
return null
}

@Override
public MetadataResolver updateMetadataResolverEnabledStatus(MetadataResolver existingResolver) throws ForbiddenException, MetadataFileNotFoundException, InitializationException {
// This won't get called
return null
}

@Override
public MetadataResolver findByResourceId(String resourceId) throws EntityNotFoundException {
// This won't get called
return null
}
},
chainingMetadataResolver: new OpenSamlChainingMetadataResolver().with {
it.id = 'chain'
Expand Down
Loading

0 comments on commit afbe10e

Please sign in to comment.