package de.rwth.idsg.brsm.web.rest;
import com.codahale.metrics.annotation.Timed;
import de.rwth.idsg.brsm.domain.User;
import de.rwth.idsg.brsm.repository.UserRepository;
import de.rwth.idsg.brsm.security.AuthoritiesConstants;
import de.rwth.idsg.brsm.security.SecurityUtils;
import de.rwth.idsg.brsm.service.UserService;
import de.rwth.idsg.brsm.web.rest.dto.UserDTO;
import de.rwth.idsg.brsm.web.rest.dto.UserRegistrationDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
/**
* REST controller for managing users.
*/
@RestController
@RequestMapping("/app")
public class UserResource {
private final Logger log = LoggerFactory.getLogger(UserResource.class);
@Inject
private UserRepository userRepository;
@Inject
private UserService userService;
/**
* GET /rest/users/:login -> get the "login" user.
*/
@RequestMapping(value = "/rest/users/{login}",
method = RequestMethod.GET,
produces = "application/json")
@Timed
@RolesAllowed(AuthoritiesConstants.ADMIN)
public User getUser(@PathVariable String login, HttpServletResponse response) {
log.debug("REST request to get User : {}", login);
User user = userRepository.findOne(login);
if (user == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
return user;
}
/**
* POST /rest/account/create -> create new user.
*/
@RequestMapping(value="/rest/users",
method = RequestMethod.POST,
produces = "application/json")
@Timed
public void createUser(@RequestBody UserRegistrationDTO user, HttpServletResponse response) {
log.debug("REST request to create {}", user);
if (SecurityUtils.isAuthenticated()) {
if (!userService.createLender(user)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
} else {
userService.createUser(user);
}
}
/**
* DELETE /rest/users -> remove target user
* @param user to be deleted
*/
@RequestMapping(value="/rest/users",
method = RequestMethod.DELETE,
produces = "application/json")
@Timed
// set to ADMIN out of precaution, change later?
@RolesAllowed(AuthoritiesConstants.ADMIN)
public void delete(@RequestBody UserDTO user) {
log.debug("REST request to delete user: {}", user);
userService.deleteUser(user.getLogin());
}
}