Skip to content

Commit

Permalink
SHIBUI-1031: 1034
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Dec 11, 2018
1 parent 642393f commit 2a6bf14
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 1 deletion.
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 @@ -37,7 +38,8 @@ public class User extends AbstractAuditable {

private String lastName;

@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 2a6bf14

Please sign in to comment.