Commit ccd37ebf by Tuomas Riihimäki

Add authentication function and filters for eventuserlist

Yes, yes. I know.. Authentication with session is not strictly REST.
1 parent 2bef5751
...@@ -126,7 +126,7 @@ public class HostnameFilter implements Filter { ...@@ -126,7 +126,7 @@ public class HostnameFilter implements Filter {
*/ */
private static final String[] NOAUTH_RESTPATHS = new String[] { private static final String[] NOAUTH_RESTPATHS = new String[] {
"/reader/EventRole/", "/reader/EventRole/","/user/auth"
}; };
...@@ -197,6 +197,7 @@ public class HostnameFilter implements Filter { ...@@ -197,6 +197,7 @@ public class HostnameFilter implements Filter {
private boolean restAuth(HttpServletRequest httpRequest, ServletResponse response) { private boolean restAuth(HttpServletRequest httpRequest, ServletResponse response) {
String sp = httpRequest.getPathInfo(); String sp = httpRequest.getPathInfo();
for (String s : NOAUTH_RESTPATHS) { for (String s : NOAUTH_RESTPATHS) {
if (sp.startsWith(s)) { if (sp.startsWith(s)) {
......
...@@ -18,18 +18,35 @@ ...@@ -18,18 +18,35 @@
*/ */
package fi.codecrew.moya.rest; package fi.codecrew.moya.rest;
import java.security.Principal;
import javax.annotation.Resource;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam; import javax.ws.rs.FormParam;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import org.apache.http.HttpRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.CardTemplateBeanLocal; import fi.codecrew.moya.beans.CardTemplateBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal; import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.rest.pojo.userinfo.v1.EventUserRestPojo; import fi.codecrew.moya.rest.pojo.userinfo.v1.EventUserRestPojo;
...@@ -51,10 +68,59 @@ public class UserRestView { ...@@ -51,10 +68,59 @@ public class UserRestView {
@EJB @EJB
private CardTemplateBeanLocal cardbean; private CardTemplateBeanLocal cardbean;
@Context
private HttpServletRequest servletRequest;
@EJB
private PermissionBeanLocal permbean;
private static final Logger logger = LoggerFactory.getLogger(UserRestView.class);
@POST
@Path("/auth")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response auth(
@FormParam("username") String username,
@FormParam("password") String password) {
logger.info("Tried to login with rest {} , {}", username, password);
boolean success = true;
try {
Principal principal = servletRequest.getUserPrincipal();
if (principal != null) {
logger.info("Current username {}", principal.getName());
if (principal.getName() != null && !principal.getName().equals(username)) {
logger.info("Trying to logout from user {}", principal.getName());
servletRequest.logout();
}
}
if (principal == null || principal.getName() == null || !principal.getName().equals(username)) {
servletRequest.getSession(true);
servletRequest.login(username, password);
}
} catch (ServletException e) {
success = false;
}
ResponseBuilder ret = null;
if (success)
ret = Response.ok(PojoUtils.initEventUserRestPojo(permbean.getCurrentUser()));
else
ret = Response.status(Status.FORBIDDEN);
return ret.build();
}
@GET @GET
@Path("/eventusers") @Path("/eventusers")
public SimpleEventuserRoot getEventUsers() { public SimpleEventuserRoot getEventUsers(
UserSearchQuery q = new UserSearchQuery(0, 0, null, null, QuerySortOrder.UNSORTED); @DefaultValue("0") @QueryParam("pagesize") Integer pagesize,
@DefaultValue("0") @QueryParam("page") Integer page,
@QueryParam("search") String search
) {
UserSearchQuery q = new UserSearchQuery(page, pagesize, null, search, QuerySortOrder.UNSORTED);
SearchResult<EventUser> users = userbean.getThisEventsUsers(q); SearchResult<EventUser> users = userbean.getThisEventsUsers(q);
return PojoUtils.parseEventusers(users.getResults()); return PojoUtils.parseEventusers(users.getResults());
} }
...@@ -66,13 +132,13 @@ public class UserRestView { ...@@ -66,13 +132,13 @@ public class UserRestView {
return PojoUtils.initPrintedCardRestPojo(cardbean.checkPrintedCard(user)); return PojoUtils.initPrintedCardRestPojo(cardbean.checkPrintedCard(user));
} }
@GET @GET
@Path("/eventuser/{cardauthcode}") @Path("/eventuser/{cardauthcode}")
public EventUserRestPojo getEventUser(@PathParam("cardauthcode") String code) { public EventUserRestPojo getEventUser(@PathParam("cardauthcode") String code) {
EventUser user = userbean.getUserByAuthcode(code); EventUser user = userbean.getUserByAuthcode(code);
if(user != null) if (user != null)
return PojoUtils.initEventUserRestPojo(user); return PojoUtils.initEventUserRestPojo(user);
else else
return new EventUserRestPojo(); return new EventUserRestPojo();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!