package org.kalipo.web.rest; import com.codahale.metrics.annotation.Timed; import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiResponse; import com.wordnik.swagger.annotations.ApiResponses; import org.kalipo.config.Constants; import org.kalipo.domain.User; import org.kalipo.security.AuthoritiesConstants; import org.kalipo.service.UserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.annotation.security.RolesAllowed; import javax.inject.Inject; import javax.validation.constraints.NotNull; import javax.ws.rs.QueryParam; import java.util.Arrays; import java.util.List; import java.util.Optional; /** * REST controller for managing users. */ @RestController @RequestMapping("/app") public class UserResource { private final Logger log = LoggerFactory.getLogger(UserResource.class); @Inject private UserService userService; /** * GET /rest/users/:login -> get the "login" user. */ @RequestMapping(value = "/rest/users/{login}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @ApiOperation(value = "Get existing user") @ApiResponses(value = { @ApiResponse(code = 400, message = "Invalid ID supplied"), @ApiResponse(code = 404, message = "User not found") }) @RolesAllowed(AuthoritiesConstants.ADMIN) public ResponseEntity<User> getUser(@PathVariable String login) { log.debug("REST request to get User : {}", login); return Optional.ofNullable(userService.findOne(login)) .map(user -> new ResponseEntity<>(user, HttpStatus.OK)) .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } /** * PUT /rest/users/:login -> update the "login" user. */ @RequestMapping(value = "/rest/users/{login}", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @ApiOperation(value = "Update existing user") @ApiResponses(value = { @ApiResponse(code = 400, message = "Invalid ID supplied"), @ApiResponse(code = 404, message = "User not found") }) @RolesAllowed(AuthoritiesConstants.ADMIN) public ResponseEntity<User> updateUser(@PathVariable @NotNull String login, @NotNull @RequestBody User user) throws KalipoException { log.debug("REST request to update User : {}", login); user.setLogin(login); return new ResponseEntity<User>(userService.updateUser(user), HttpStatus.OK); } /** * POST /rest/users/:login/ban -> ban the "login" user. * todo rename "ban", cause this is already used in thread */ @RequestMapping(value = "/rest/users/{login}/ban", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @Timed ResponseEntity<User> ban(@PathVariable String login) throws KalipoException { log.debug("REST request to ban User : {}", login); return new ResponseEntity<>(userService.ban(login), HttpStatus.OK); } }