Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Dec 12, 2018
2 parents 1e988c2 + 656bab1 commit e1c8907
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,27 @@ class DevConfig {

@Transactional
@PostConstruct
void createDevAdminUsers() {
void createDevUsers() {
if (adminUserRepository.count() == 0) {
def user = new User().with {
def users = [new User().with {
username = 'admin'
password = '{noop}adminpass'
name = 'Joe the admin'
emailAddress = 'joe@institution.edu'
roles.add(new Role(name: 'ROLE_ADMIN'))
it
}, new User().with {
username = 'nonadmin'
password = '{noop}nonadminpass'
name = 'Peter non admin'
emailAddress = 'peter@institution.edu'
roles.add(new Role(name: 'ROLE_USER'))
it
}]
users.each {
adminUserRepository.save(it)
}

adminUserRepository.save(user)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package edu.internet2.tier.shibboleth.admin.ui.security.controller;

import edu.internet2.tier.shibboleth.admin.ui.security.model.User;
import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
* Implementation of the REST resource endpoints exposing system users.
*
* @author Dmitriy Kopylenko
*/
@RestController
@RequestMapping("/api/security/users")
public class UsersController {

private UserRepository userRepository;

public UsersController(UserRepository userRepository) {
this.userRepository = userRepository;
}

@GetMapping
List<User> getAll() {
return userRepository.findAll();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down Expand Up @@ -31,6 +32,8 @@ public class Role extends AbstractAuditable {
@Column(unique = true)
private String name;

//Ignore properties annotation here is to prevent stack overflow recursive error during JSON serialization
@JsonIgnoreProperties("roles")
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "roles", fetch = FetchType.EAGER)
private Set<User> users = new HashSet<>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable;
import lombok.*;
Expand Down Expand Up @@ -33,11 +34,12 @@ public class User extends AbstractAuditable {
@Column(nullable = false)
private String password;

private String firstName;
private String name;

private String lastName;
private String emailAddress;

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
//Ignore properties annotation here is to prevent stack overflow recursive error during JSON serialization
@JsonIgnoreProperties("users")
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package edu.internet2.tier.shibboleth.admin.ui.security.controller

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.web.client.TestRestTemplate
import org.springframework.test.context.ActiveProfiles
import spock.lang.Specification

/**
* @author Dmitriy Kopylenko
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles(["no-auth", "dev"])
class UsersControllerIntegrationTests extends Specification {

@Autowired
private TestRestTemplate restTemplate

static RESOURCE_URI = '/api/security/users'

def "GET users"() {
when: 'GET request is made for ALL users in the system'
def result = this.restTemplate.getForEntity(RESOURCE_URI, Object)

then: "Request completed successfully"
result.statusCodeValue == 200
result.body[0].username == 'admin'
result.body[0].roles[0].name == 'ROLE_ADMIN'
}
}

0 comments on commit e1c8907

Please sign in to comment.