package org.fenixedu.bennu.portal.api;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.fenixedu.bennu.core.groups.Group;
import org.fenixedu.bennu.core.rest.BennuRestResource;
import org.fenixedu.bennu.core.util.CoreConfiguration;
import org.fenixedu.bennu.portal.domain.PortalConfiguration;
import com.google.gson.JsonElement;
@Path("/bennu-portal/configuration")
public class PortalConfigurationResource extends BennuRestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public JsonElement viewConfig() {
accessControl(Group.managers());
return view(PortalConfiguration.getInstance());
}
@GET
@Path("logo")
public Response logo(@HeaderParam("If-None-Match") String ifNoneMatch) {
final PortalConfiguration instance = PortalConfiguration.getInstance();
if (instance != null && instance.getLogo() != null) {
EntityTag etag = buildETag(instance);
if (etag.toString().equals(ifNoneMatch)) {
return Response.notModified(etag).build();
}
return Response.ok(instance.getLogo(), instance.getLogoType())
.header(HttpHeaders.CACHE_CONTROL, CoreConfiguration.getConfiguration().staticCacheControl()).tag(etag)
.build();
}
throw new WebApplicationException(Status.NOT_FOUND);
}
private EntityTag buildETag(PortalConfiguration instance) {
return EntityTag.valueOf("W/\"" + instance.getLogo().length + "-" + instance.getExternalId() + "\"");
}
@GET
@Path("favicon")
public Response favicon() {
final PortalConfiguration instance = PortalConfiguration.getInstance();
if (instance != null && instance.getFavicon() != null) {
return Response.ok(instance.getFavicon(), instance.getFaviconType())
.header(HttpHeaders.CACHE_CONTROL, CoreConfiguration.getConfiguration().staticCacheControl()).build();
}
throw new WebApplicationException(Status.NOT_FOUND);
}
@PUT
@Path("{oid}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public JsonElement updateConfig(JsonElement jsonData, @PathParam("oid") String oid) {
accessControl(Group.managers());
return view(update(jsonData, readDomainObject(oid)));
}
}