Skip to content

Commit

Permalink
[SHIBUI-1058]
Browse files Browse the repository at this point in the history
Renamed UserRoleService to UserService. Moved getCurrentUser to
UserService. Updated UsersController to use UserService to get the
currently logged in user.
  • Loading branch information
Bill Smith committed Jan 22, 2019
1 parent 2795f70 commit 64b130c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import edu.internet2.tier.shibboleth.admin.ui.scheduled.EntityDescriptorFilesScheduledTasks;
import edu.internet2.tier.shibboleth.admin.ui.scheduled.MetadataProvidersScheduledTasks;
import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository;
import edu.internet2.tier.shibboleth.admin.ui.security.service.UserRoleService;
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.DefaultMetadataResolversPositionOrderContainerService;
import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryService;
import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryServiceImpl;
Expand Down Expand Up @@ -198,7 +199,7 @@ public ModelRepresentationConversions modelRepresentationConversions() {
}

@Bean
public UserRoleService userRoleService(RoleRepository roleRepository) {
return new UserRoleService(roleRepository);
public UserService userService(RoleRepository roleRepository, UserRepository userRepository) {
return new UserService(roleRepository, userRepository);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
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 org.apache.commons.lang.StringUtils;
import org.opensaml.core.xml.io.MarshallingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -16,7 +17,6 @@
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -31,7 +31,6 @@

import javax.annotation.PostConstruct;
import java.net.URI;
import java.util.Optional;
import java.util.stream.Collectors;

@RestController
Expand All @@ -50,13 +49,22 @@ public class EntityDescriptorController {
@Autowired
RestTemplateBuilder restTemplateBuilder;

@Autowired
private UserRepository userRepository;

private RoleRepository roleRepository;

private UserService userService;

private RestTemplate restTemplate;

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

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

@PostConstruct
public void initRestTemplate() {
this.restTemplate = restTemplateBuilder.build();
Expand Down Expand Up @@ -100,7 +108,7 @@ public ResponseEntity<?> upload(@RequestParam String metadataUrl, @RequestParam

@PutMapping("/EntityDescriptor/{resourceId}")
public ResponseEntity<?> update(@RequestBody EntityDescriptorRepresentation edRepresentation, @PathVariable String resourceId) {
User currentUser = getCurrentUser();
User currentUser = userService.getCurrentUser();
EntityDescriptor existingEd = entityDescriptorRepository.findByResourceId(resourceId);
if (existingEd == null) {
return ResponseEntity.notFound().build();
Expand Down Expand Up @@ -131,7 +139,7 @@ public ResponseEntity<?> update(@RequestBody EntityDescriptorRepresentation edRe
@GetMapping("/EntityDescriptors")
@Transactional(readOnly = true)
public ResponseEntity<?> getAll() {
User currentUser = getCurrentUser();
User currentUser = userService.getCurrentUser();
if (currentUser != null) {
if (currentUser.getRole().equals("ROLE_ADMIN")) {
return ResponseEntity.ok(entityDescriptorRepository.findAllByCustomQueryAndStream()
Expand All @@ -150,7 +158,7 @@ public ResponseEntity<?> getAll() {

@GetMapping("/EntityDescriptor/{resourceId}")
public ResponseEntity<?> getOne(@PathVariable String resourceId) {
User currentUser = getCurrentUser();
User currentUser = userService.getCurrentUser();
EntityDescriptor ed = entityDescriptorRepository.findByResourceId(resourceId);
if (ed == null) {
return ResponseEntity.notFound().build();
Expand All @@ -167,7 +175,7 @@ public ResponseEntity<?> getOne(@PathVariable String resourceId) {

@GetMapping(value = "/EntityDescriptor/{resourceId}", produces = "application/xml")
public ResponseEntity<?> getOneXml(@PathVariable String resourceId) throws MarshallingException {
User currentUser = getCurrentUser();
User currentUser = userService.getCurrentUser();
EntityDescriptor ed = entityDescriptorRepository.findByResourceId(resourceId);
if (ed == null) {
return ResponseEntity.notFound().build();
Expand Down Expand Up @@ -217,17 +225,4 @@ private ResponseEntity<?> handleUploadingEntityDescriptorXml(byte[] rawXmlBytes,
.body(entityDescriptorService.createRepresentationFromDescriptor(persistedEd));
}

private User getCurrentUser() {
User user = null;
if (SecurityContextHolder.getContext() != null && SecurityContextHolder.getContext().getAuthentication() != null) {
String principal = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (StringUtils.isNotBlank(principal)) {
Optional<User> persistedUser = userRepository.findByUsername(principal);
if (persistedUser.isPresent()) {
user = persistedUser.get();
}
}
}
return user;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
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.UserRoleService;
import edu.internet2.tier.shibboleth.admin.ui.security.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -22,7 +22,6 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpClientErrorException;

import java.security.Principal;
import java.util.List;
import java.util.Optional;

Expand All @@ -41,12 +40,12 @@ public class UsersController {

private UserRepository userRepository;
private RoleRepository roleRepository;
private UserRoleService userRoleService;
private UserService userService;

public UsersController(UserRepository userRepository, RoleRepository roleRepository, UserRoleService userRoleService) {
public UsersController(UserRepository userRepository, RoleRepository roleRepository, UserService userService) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
this.userRoleService = userRoleService;
this.userService = userService;
}

@Transactional(readOnly = true)
Expand All @@ -57,9 +56,10 @@ public List<User> getAll() {

@Transactional(readOnly = true)
@GetMapping("/current")
public ResponseEntity<?> getCurrentUser(Principal principal) {
if (principal != null && principal.getName() != null) {
return ResponseEntity.ok(userRepository.findByUsername(principal.getName()));
public ResponseEntity<?> getCurrentUser() {
User user = userService.getCurrentUser();
if (user != null) {
return ResponseEntity.ok(user);
} else {
return ResponseEntity.notFound().build();
}
Expand Down Expand Up @@ -91,7 +91,7 @@ ResponseEntity<?> saveOne(@RequestBody User user) {
}
//TODO: modify this such that additional encoders can be used
user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt()));
userRoleService.updateUserRole(user);
userService.updateUserRole(user);
User savedUser = userRepository.save(user);
return ResponseEntity.ok(savedUser);
}
Expand All @@ -114,7 +114,7 @@ ResponseEntity<?> updateOne(@PathVariable(value = "username") String username, @
}
if (StringUtils.isNotBlank(user.getRole())) {
persistedUser.setRole(user.getRole());
userRoleService.updateUserRole(persistedUser);
userService.updateUserRole(persistedUser);
}
User savedUser = userRepository.save(persistedUser);
return ResponseEntity.ok(savedUser);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
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 org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.HashSet;
import java.util.Optional;
Expand All @@ -13,12 +14,14 @@
/**
* @author Bill Smith (wsmith@unicon.net)
*/
public class UserRoleService {
public class UserService {

private RoleRepository roleRepository;
private UserRepository userRepository;

public UserRoleService(RoleRepository roleRepository) {
public UserService(RoleRepository roleRepository, UserRepository userRepository) {
this.roleRepository = roleRepository;
this.userRepository = userRepository;
}

/**
Expand All @@ -43,4 +46,18 @@ public void updateUserRole(User user) {
throw new RuntimeException(String.format("User with username [%s] has no role defined and therefor cannot be updated!", user.getUsername()));
}
}

public User getCurrentUser() {
User user = null;
if (SecurityContextHolder.getContext() != null && SecurityContextHolder.getContext().getAuthentication() != null) {
String principal = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (StringUtils.isNotBlank(principal)) {
Optional<User> persistedUser = userRepository.findByUsername(principal);
if (persistedUser.isPresent()) {
user = persistedUser.get();
}
}
}
return user;
}
}

0 comments on commit 64b130c

Please sign in to comment.