package com.airbnb.airpal.resources; import com.airbnb.airpal.service.LoginView; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.apache.shiro.web.util.WebUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; import java.io.IOException; import java.net.URI; @Path("/") public class SessionResource { @GET public Response redirectToApp() { return Response.temporaryRedirect(URI.create("/app")) .status(Response.Status.MOVED_PERMANENTLY) .build(); } @GET @Path("/login") @Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON}) public LoginView getLogin() { return new LoginView(); } @POST @Path("/login") public void doLogin( @Context HttpServletRequest request, @Context HttpServletResponse response, @FormParam("username") String username, @FormParam("password") String password) throws IOException { Subject currentUser = SecurityUtils.getSubject(); if (!currentUser.isAuthenticated()) { AuthenticationToken token = new UsernamePasswordToken(username, password); currentUser.login(token); } WebUtils.redirectToSavedRequest(request, response, "/app"); } @GET @Path("/postlogin") @Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON}) public Response getLoginNoRemember() { return Response.temporaryRedirect(URI.create("/app")).cookie(new NewCookie("rememberMe", null)).build(); } }