package fr.inria.atlanmod.collaboro.web.servlets; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import fr.inria.atlanmod.collaboro.backend.CollaboroBackend; import fr.inria.atlanmod.collaboro.backend.CollaboroBackendFactory; import fr.inria.atlanmod.collaboro.history.User; @WebServlet(description = "Exposes the login service", urlPatterns = { "/login" }) public class LoginServlet extends AbstractSecurityServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { addResponseOptions(response); // Getting the parameter (in JSON) StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { throw new ServletException("There are no parameters in the login"); } // Getting the JSON object JsonParser parser = new JsonParser(); JsonObject jsonObject = (JsonObject) parser.parse(jb.toString()).getAsJsonObject(); String email = jsonObject.get("email").getAsString(); String password = jsonObject.get("password").getAsString(); String dsl = jsonObject.get("dsl").getAsString(); // Accesing the backend to validate the user User historyUser = CollaboroBackendFactory.loginUser(email, password, dsl); if(historyUser != null) { CollaboroBackend backend = CollaboroBackendFactory.getBackend(dsl, historyUser.getId()); String userId = historyUser.getId(); // Setting session and cookies HttpSession session = request.getSession(); session.setAttribute("user", historyUser); session.setAttribute("dsl", dsl); session.setMaxInactiveInterval(30*60); Cookie userName = new Cookie("collaboro_user", userId); userName.setMaxAge(30*60); // setting cookie to expiry in 30 mins response.addCookie(userName); response.setContentType("application/json"); PrintWriter out = response.getWriter(); JsonObject jsonResponse = buildJsonUserResponse(historyUser, dsl); out.print(jsonResponse.toString()); } else { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } } @Override protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { addResponseOptions(response); super.doOptions(request, response); } }