package org.datasurvey.web.rest; import java.util.*; import java.util.Collections; import org.datasurvey.service.UserService; import org.datasurvey.service.dto.UserDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import tech.jhipster.web.util.PaginationUtil; @RestController @RequestMapping("/api") public class PublicUserResource { private static final List ALLOWED_ORDERED_PROPERTIES = Collections.unmodifiableList( Arrays.asList("id", "login", "firstName", "lastName", "email", "activated", "langKey") ); private final Logger log = LoggerFactory.getLogger(PublicUserResource.class); private final UserService userService; public PublicUserResource(UserService userService) { this.userService = userService; } /** * {@code GET /users} : get all users with only the public informations - calling this are allowed for anyone. * * @param pageable the pagination information. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body all users. */ @GetMapping("/users") public ResponseEntity> getAllPublicUsers(Pageable pageable) { log.debug("REST request to get all public User names"); if (!onlyContainsAllowedProperties(pageable)) { return ResponseEntity.badRequest().build(); } final Page page = userService.getAllPublicUsers(pageable); HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } private boolean onlyContainsAllowedProperties(Pageable pageable) { return pageable.getSort().stream().map(Sort.Order::getProperty).allMatch(ALLOWED_ORDERED_PROPERTIES::contains); } /** * Gets a list of all roles. * @return a string list of all roles. */ @GetMapping("/authorities") public List getAuthorities() { return userService.getAuthorities(); } }