Select Git revision
RootController.java
RootController.java 2.98 KiB
package de.itvsh.goofy;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import java.time.Instant;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.info.BuildProperties;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import de.itvsh.goofy.common.ModelBuilder;
import de.itvsh.goofy.common.downloadtoken.DownloadTokenController;
import de.itvsh.goofy.common.user.CurrentUserService;
import de.itvsh.goofy.common.user.UserId;
import de.itvsh.goofy.common.user.UserProfileController;
import de.itvsh.goofy.common.user.UserRole;
import de.itvsh.goofy.vorgang.VorgangController;
@RestController
@RequestMapping("/api")
public class RootController {
static final String REL_VORGAENGE = "vorgaenge";
static final String REL_SEARCH = "search";
static final String REL_SEARCH_USER = "search-user-profiles";
static final String REL_MY_VORGAENGE = "myVorgaenge";
static final String REL_SEARCH_MY_VORGAENGE = "searchMyVorgaenge";
static final String REL_DOWNLOAD_TOKEN = "downloadToken";
@Autowired(required = false)
public BuildProperties buildProperties;
@Autowired
private CurrentUserService currentUserService;
@GetMapping
public EntityModel<RootResource> getRootResource() {
return ModelBuilder.fromEntity(new RootResource())
.ifMatch(this::hasRole).addLinks(
linkTo(RootController.class).withSelfRel(),
linkTo(VorgangController.class).withRel(REL_VORGAENGE),
linkTo(methodOn(UserProfileController.class).findUsers(null)).withRel(REL_SEARCH_USER),
linkTo(DownloadTokenController.class).withRel(REL_DOWNLOAD_TOKEN),
buildVorgangListByPageLink(REL_SEARCH, Optional.empty()))
.ifMatch(this::hasVerwaltungRole).addLinks(
buildVorgangListByPageLink(REL_MY_VORGAENGE, Optional.of(currentUserService.getUserId())),
buildVorgangListByPageLink(REL_SEARCH_MY_VORGAENGE, Optional.of(currentUserService.getUserId())))
.buildModel();
}
boolean hasRole() {
return hasVerwaltungRole() || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER);
}
boolean hasVerwaltungRole() {
return currentUserService.hasRole(UserRole.VERWALTUNG_USER)
|| currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE);
}
private Link buildVorgangListByPageLink(String linkRel, Optional<UserId> assignedTo) {
return linkTo(methodOn(VorgangController.class).getVorgangListByPage(0, null, null, assignedTo)).withRel(linkRel);
}
class RootResource {
public String getVersion() {
return buildProperties == null ? "--" : buildProperties.getVersion();
}
public Instant getBuildTime() {
return buildProperties == null ? null : buildProperties.getTime();
}
public String getJavaVersion() {
return System.getProperty("java.version");
}
}
}