package org.fenixedu.bennu.core.rest; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.bennu.core.domain.exceptions.BennuCoreDomainException; import org.fenixedu.bennu.core.domain.exceptions.DomainException; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.security.Authenticate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pt.ist.fenixframework.DomainObject; import pt.ist.fenixframework.FenixFramework; public abstract class BennuRestResource extends JsonAwareResource { private static final Logger LOG = LoggerFactory.getLogger(BennuRestResource.class); protected <T extends DomainObject> T readDomainObject(final String externalId) { boolean error = false; try { if (externalId == null || "null".equals(externalId)) { return null; } T obj = FenixFramework.getDomainObject(externalId); if (obj == null) { error = true; } else { return obj; } } catch (Throwable t) { error = true; } finally { if (error) { throw BennuCoreDomainException.resourceNotFound(externalId); } } LOG.error("Unreachable code"); return null; } protected User accessControl(Group group) { final User user = Authenticate.getUser(); if (group.isMember(user)) { return user; } throw new WebApplicationException(Status.NOT_FOUND); } /** * @deprecated Use {@link BennuRestResource#accessControl(Group) } instead. * @param accessExpression group expression to evaluate * @return The user logged in or exception */ @Deprecated protected User accessControl(String accessExpression) { try { return accessControl(Group.parse(accessExpression)); } catch (DomainException e) { throw new WebApplicationException(Status.NOT_FOUND); } } protected User verifyAndGetRequestAuthor() { return accessControl(Group.logged()); } protected Response ok() { return Response.ok().build(); } }