package com.leanengine.server.rest.resteasy; import com.leanengine.server.auth.AuthService; import com.leanengine.server.rest.PublicServiceRest; import org.jboss.resteasy.annotations.interception.ServerInterceptor; import org.jboss.resteasy.core.Headers; import org.jboss.resteasy.core.ResourceMethod; import org.jboss.resteasy.core.ServerResponse; import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.UnauthorizedException; import org.jboss.resteasy.spi.interception.PreProcessInterceptor; import org.jboss.resteasy.util.HttpResponseCodes; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.Provider; import java.util.logging.Logger; @Provider @ServerInterceptor public class RestSecurityInterceptor implements PreProcessInterceptor { private static final Logger log = Logger.getLogger(RestSecurityInterceptor.class.getName()); @Override public ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws UnauthorizedException { // pass public methods if (method.getResourceClass().equals(PublicServiceRest.class)) { return null; } // user not logged-in? if (AuthService.getCurrentAccount() == null) { ServerResponse response = new ServerResponse(); response.setStatus(HttpResponseCodes.SC_UNAUTHORIZED); MultivaluedMap<String, Object> headers = new Headers<Object>(); headers.add("Content-Type", "text/plain"); response.setMetadata(headers); response.setEntity("{\"code\":401, \"message\":\"HTTP error 401: Unauthorized to access " + request.getPreprocessedPath() + "\"" + ""); return response; } return null; } }