PageRenderTime 62ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/apps/mongo/app/controllers/Auth.java

https://github.com/nuandy/othello
Java | 186 lines | 133 code | 53 blank | 0 comment | 27 complexity | 975f07ffea0fbc168365b92df4a5e52b MD5 | raw file
  1. package mongo.app.controllers;
  2. import java.io.*;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.util.List;
  6. import java.util.ArrayList;
  7. import java.util.Map;
  8. import java.util.HashMap;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.log4j.*;
  11. import com.google.gson.Gson;
  12. import src.main.othello.web.controller.impl.AbstractControllerImpl;
  13. import com.mongodb.util.JSON;
  14. import mongo.app.models.User;
  15. import mongo.app.models.UserOid;
  16. import mongo.app.models.MongoDB;
  17. import mongo.app.models.Util;
  18. public class Auth extends AbstractControllerImpl {
  19. private static Logger logger = Logger.getLogger(Auth.class);
  20. public void doMain(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  21. if (request.getParameter("route").equals("login")) {
  22. this.login(request, response);
  23. } else if (request.getParameter("route").equals("register")) {
  24. this.register(request, response);
  25. } else if (request.getParameter("route").equals("logout")) {
  26. this.logout(request, response);
  27. }
  28. }
  29. public Boolean allowed(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  30. String cookieValue = Util.getCookieValue(request.getCookies(), "myapptoken", "");
  31. List<Object> results = new ArrayList<Object>();
  32. MongoDB.connect();
  33. MongoDB.getCollection("user");
  34. Map query = new HashMap();
  35. query.put("auth_token", cookieValue);
  36. results = MongoDB.getDocuments(query);
  37. if (!results.isEmpty()) {
  38. String result = JSON.serialize(results.get(0));
  39. Gson gson = new Gson();
  40. User user = gson.fromJson(result, User.class);
  41. if (user.getAuthToken() != null) {
  42. return true;
  43. }
  44. }
  45. return false;
  46. }
  47. public void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  48. String email = request.getParameter("email");
  49. String password = request.getParameter("password");
  50. if (StringUtils.isNotBlank(email) && StringUtils.isNotBlank(password)) {
  51. List<Object> results = new ArrayList<Object>();
  52. MongoDB.connect();
  53. MongoDB.getCollection("user");
  54. Map query = new HashMap();
  55. query.put("email", email);
  56. query.put("password", password);
  57. results = MongoDB.getDocuments(query);
  58. if (!results.isEmpty()) {
  59. String result = JSON.serialize(results.get(0));
  60. Gson gson = new Gson();
  61. User user = gson.fromJson(result, User.class);
  62. if (StringUtils.isNotBlank(user.getId())) {
  63. this.setUserCookie(user, request, response);
  64. response.sendRedirect("success.jsp");
  65. }
  66. } else {
  67. request.setAttribute("failed", true);
  68. super.forward("app/views/login.jsp", request, response);
  69. }
  70. } else {
  71. request.setAttribute("failed", true);
  72. super.forward("app/views/login.jsp", request, response);
  73. }
  74. }
  75. public void register(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  76. String email = request.getParameter("email");
  77. String fullname = request.getParameter("fullname");
  78. String password = request.getParameter("password");
  79. if (StringUtils.isNotBlank(email) && StringUtils.isNotBlank(fullname) && StringUtils.isNotBlank(password)) {
  80. if (Util.validateEmail(email) == true && password.length() > 7) {
  81. List<String> indexNames = new ArrayList<String>();
  82. indexNames.add("email");
  83. indexNames.add("fullname");
  84. Map document = new HashMap();
  85. document.put("email", email);
  86. document.put("fullname", fullname);
  87. document.put("status", 1);
  88. document.put("password", password);
  89. MongoDB.connect();
  90. MongoDB.getCollection("user");
  91. MongoDB.setIndex(indexNames);
  92. MongoDB.setDocument(document);
  93. request.setAttribute("registered", true);
  94. super.forward("app/views/login.jsp", request, response);
  95. } else if (Util.validateEmail(email) == false) {
  96. request.setAttribute("bad_email", true);
  97. super.forward("app/views/register.jsp", request, response);
  98. } else if (password.length() < 8) {
  99. request.setAttribute("bad_password", true);
  100. super.forward("app/views/register.jsp", request, response);
  101. } else {
  102. request.setAttribute("failed", true);
  103. super.forward("app/views/register.jsp", request, response);
  104. }
  105. } else {
  106. request.setAttribute("failed", true);
  107. super.forward("app/views/register.jsp", request, response);
  108. }
  109. }
  110. public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  111. Cookie userCookie = new Cookie("myapptoken", "");
  112. userCookie.setMaxAge(0);
  113. response.addCookie(userCookie);
  114. request.setAttribute("signedout", true);
  115. super.forward("app/views/login.jsp", request, response);
  116. }
  117. public static void setUserCookie(User user, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  118. String data = Util.encryptCookie(user);
  119. Cookie userCookie = new Cookie("myapptoken", data);
  120. userCookie.setMaxAge(3600);
  121. response.addCookie(userCookie);
  122. Map document = new HashMap();
  123. document.put("status", user.getStatus());
  124. document.put("fullname", user.getName());
  125. document.put("email", user.getEmail());
  126. document.put("password", user.getPassword());
  127. document.put("created_at", user.getCreatedAt());
  128. document.put("auth_token", data);
  129. MongoDB.connect();
  130. MongoDB.getCollection("user");
  131. MongoDB.updateDocumentByEmail(user.getEmail(), document);
  132. }
  133. }