r25 - in trunk: . src/main/java/org/chorem/bow src/main/webapp
Author: bbrossaud Date: 2010-05-14 17:09:05 +0200 (Fri, 14 May 2010) New Revision: 25 Url: http://chorem.org/repositories/revision/bow/25 Log: Session and temporary token works Modified: trunk/TODO.txt trunk/src/main/java/org/chorem/bow/ControllerServlet.java trunk/src/main/java/org/chorem/bow/TokenActions.java trunk/src/main/webapp/search.jsp Modified: trunk/TODO.txt =================================================================== --- trunk/TODO.txt 2010-05-14 09:52:06 UTC (rev 24) +++ trunk/TODO.txt 2010-05-14 15:09:05 UTC (rev 25) @@ -1,12 +1,12 @@ le 11 mai 2010 A faire pour le vendredi 28 mai: --> edition, suppression bookmark + tag (14 mai) --> triage multiple(nbre de clics, date d'ajout, Alpha) (14 mai) +-> edition, suppression bookmark + tag (14 mai) OK +-> triage multiple(nbre de clics, date d'ajout, Alpha) (14 mai) OK -> token temporaire (14 mai) -> completion ==> openSearch(xml) ==> meta(ex:<link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikip�dia (fr)" />) -> le && pour le nuage de tag (11 mai) OK --> gestion des sessions +-> gestion des sessions (14 mai) -> javascript ==> var script = document.createElement('script');script.src = url;script.type='text/javascript';document.body.appendChild(script); (11 mai) NOK -> Mise en forme (28 mai) \ No newline at end of file Modified: trunk/src/main/java/org/chorem/bow/ControllerServlet.java =================================================================== --- trunk/src/main/java/org/chorem/bow/ControllerServlet.java 2010-05-14 09:52:06 UTC (rev 24) +++ trunk/src/main/java/org/chorem/bow/ControllerServlet.java 2010-05-14 15:09:05 UTC (rev 25) @@ -11,13 +11,11 @@ import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sharengo.wikitty.Criteria; @@ -33,7 +31,6 @@ private static final Log log = LogFactory.getLog(ControllerServlet.class); protected Model model = new Model(); protected BookmarkActions bookmarkActions = new BookmarkActions(); - protected User user = null; protected TokenActions tokenActions = new TokenActions(); protected String error = ""; @@ -50,8 +47,9 @@ @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { -// try { - error = ""; + try { + HttpSession session = request.getSession(true); + User user = (User) session.getAttribute("user"); String action = request.getParameter("action"); response.setContentType("text/html"); request.setAttribute("bookmarkActions", bookmarkActions); @@ -61,7 +59,7 @@ if (log.isDebugEnabled()) { log.debug("Going to actionRegister"); } - this.actionRegister(request, response); + this.actionRegister(request, response, session); } else if (action.equals("registration")) { if (log.isDebugEnabled()) { if (log.isDebugEnabled()) { @@ -73,82 +71,90 @@ if (log.isDebugEnabled()) { log.debug("Going to actionLogin"); } - this.actionLogin(request, response); + this.actionLogin(request, response, session); + } else if (action.equals("logout")) { + if (log.isDebugEnabled()) { + log.debug("Going to actionLogin"); + } + this.actionLogout(request, response, session); } else if (action.equals("addUrl")) { if (log.isDebugEnabled()) { log.debug("Going to actionAddUrl"); } - this.actionAddUrl(request, response); + this.actionAddUrl(request, response, session); } else if (action.equals("search") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionSearch"); } - this.actionSearch(request, response); + this.actionSearch(request, response, user); } else if (action.equals("clickOnTag") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionClickOnTag"); } - this.actionClickOnTag(request, response); + this.actionClickOnTag(request, response, user); } else if (action.equals("generateToken") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionGenerateToken"); } try { - this.actionGenerateToken(request, response); + this.actionGenerateToken(request, response, user); } catch (NoSuchAlgorithmException ex) { log.error("No Such Algorithm", ex); request.getRequestDispatcher("error.jsp").forward(request, response); } - } else if (action.equals("deleteTag")) { + } else if (action.equals("deleteTag") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionDeleteTag"); } - this.actionDeleteTag(request, response); - } else if (action.equals("removeBookmark")) { + this.actionDeleteTag(request, response, user); + } else if (action.equals("removeBookmark") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionRemoveBookmark"); } - this.actionRemoveBookmark(request, response); - } else if (action.equals("editBookmark")) { + this.actionRemoveBookmark(request, response, user); + } else if (action.equals("editBookmark") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionEditBookmark"); } - this.actionEditBookmark(request, response); - } else if (action.equals("orderAsc")) { + this.actionEditBookmark(request, response, user); + } else if (action.equals("orderAsc") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionOrderAsc"); } - this.actionOrderAsc(request, response); - } else if (action.equals("orderDesc")) { + this.actionOrderAsc(request, response, user); + } else if (action.equals("orderDesc") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionOrderDesc"); } - this.actionOrderDesc(request, response); - } else if (action.equals("addClick")) { + this.actionOrderDesc(request, response, user); + } else if (action.equals("addClick") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionAddClic"); } this.actionAddClick(request, response); } else { - user = null; if (log.isDebugEnabled()) { log.debug("Going to home"); } request.getRequestDispatcher("home.jsp").forward(request, response); } } else { - user = null; if (log.isDebugEnabled()) { log.debug("Going to home"); } request.getRequestDispatcher("home.jsp").forward(request, response); } request.setAttribute("errorMessage", error); -// } catch (Exception eee) { -// request.getRequestDispatcher("error.jsp").forward(request, response); -// } + } catch (Exception eee) { + request.getRequestDispatcher("error.jsp").forward(request, response); + } } + protected void actionLogout(HttpServletRequest request, HttpServletResponse response, HttpSession session) + throws IOException, ServletException { + session.invalidate(); + request.getRequestDispatcher("home.jsp").forward(request, response); + } protected void actionAddClick(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { @@ -167,7 +173,7 @@ } } - protected void actionOrderAsc(HttpServletRequest request, HttpServletResponse response) + protected void actionOrderAsc(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { String type = request.getParameter("type"); if (type != null && !type.isEmpty()) { @@ -197,7 +203,7 @@ request.getRequestDispatcher("search.jsp").forward(request, response); } - protected void actionOrderDesc(HttpServletRequest request, HttpServletResponse response) + protected void actionOrderDesc(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { String type = request.getParameter("type"); if (type != null && !type.isEmpty()) { @@ -227,7 +233,7 @@ request.getRequestDispatcher("search.jsp").forward(request, response); } - protected void actionEditBookmark(HttpServletRequest request, HttpServletResponse response) + protected void actionEditBookmark(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { String nameAndTags = request.getParameter("nameAndTags"); String bookmarkId = request.getParameter("bookmarkId"); @@ -250,7 +256,7 @@ request.getRequestDispatcher("search.jsp").forward(request, response); } - protected void actionRemoveBookmark(HttpServletRequest request, HttpServletResponse response) + protected void actionRemoveBookmark(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { String bookmarkId = request.getParameter("bookmarkId"); if (bookmarkId != null && !bookmarkId.isEmpty()) { @@ -266,7 +272,7 @@ request.getRequestDispatcher("search.jsp").forward(request, response); } - protected void actionDeleteTag(HttpServletRequest request, HttpServletResponse response) + protected void actionDeleteTag(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { String bookmarkId = request.getParameter("bookmarkId"); String tag = request.getParameter("tag"); @@ -294,65 +300,80 @@ * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionGenerateToken(HttpServletRequest request, HttpServletResponse response) + protected void actionGenerateToken(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException, NoSuchAlgorithmException { WikittyProxy proxy = model.getProxy(); + Criteria criteria = Search.query().eq(User.FQ_FIELD_EMAIL, user.getEmail()).criteria(); + Token currentToken = proxy.findByCriteria(Token.class, criteria); + if (currentToken != null) { + proxy.delete(currentToken.getWikittyId()); + } String token = tokenActions.generateToken(); // Generate an encoding MD5 token - Criteria criteria = Search.query().eq(Token.FQ_FIELD_TOKEN, token).criteria(); + criteria = Search.query().eq(Token.FQ_FIELD_TOKEN, token).criteria(); if (proxy.findByCriteria(Token.class, criteria) == null) { // Check if the token already exists TokenImpl newToken = new TokenImpl(); newToken.setToken(token); newToken.setEmail(user.getEmail()); proxy.store((Token) newToken); // If the token doesn't exist, it is stored - tokenActions.setToken(token); + tokenActions.setPermanentToken(token); } else { - tokenActions.setToken(""); + tokenActions.setPermanentToken(""); } - request.getRequestDispatcher("generateToken.jsp").forward(request, response); + request.getRequestDispatcher("search.jsp").forward(request, response); } /* @param request servlet request * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionAddUrl(HttpServletRequest request, HttpServletResponse response) + protected void actionAddUrl(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException, ServletException { + String token = request.getParameter("token"); // token or not + if (token != null && !token.isEmpty()) { + User user = checkToken(token, session); + addUrl(request, user); + } + else { + User user = (User) session.getAttribute("user"); + if (user != null) { + addUrl(request, user); + actionSearch(request, response, user); + } + } + } + + protected void addUrl(HttpServletRequest request, User user) { String url = request.getParameter("url"); // url of the website String nameAndTags = request.getParameter("nameAndTags"); // name and tags - String token = request.getParameter("token"); // token or not - if (url != null && nameAndTags != null) { - if (user == null) { // If the user is null, it's maybe a bookmark addition by token - user = checkToken(url, nameAndTags, token); + Bookmark bookmark = bookmarkActions.createBookmark(url, nameAndTags, user); + if (bookmark != null) { + WikittyProxy proxy = model.getProxy(); + proxy.store(bookmark); // store the bookmark if all is Ok + if (log.isDebugEnabled()) { + log.debug("Adding URL"); } - if (user != null) { - if (!url.isEmpty() && !nameAndTags.isEmpty()) { - Bookmark bookmark = bookmarkActions.createBookmark(url, nameAndTags, user); - if (bookmark != null) { - WikittyProxy proxy = model.getProxy(); - proxy.store(bookmark); // store the bookmark if all is Ok - if (log.isDebugEnabled()) { - log.debug("Adding URL"); - } - if (token == null) { - this.actionSearch(request, response); - } - } - } - } } } - /* @param url String which contains the bookmark url - * @param nameAndTags String which contains the name and the tags of the - bookmark separated by '|' ==> name|tag1 tag2... - * @param token String which contains the MD5 encoding token + + protected User checkToken(String token, HttpSession session) { + if (checkTemporaryToken(token, session) == true) { + User user = (User) session.getAttribute("user"); + return user; + } + User user = checkPermanentToken(token); + return user; + } + + + /* @param token String which contains the MD5 encoding token * @return null the token doesn't exist * @return User the token owner */ - protected User checkToken(String url, String nameAndTags, String token) { - if (url != null && nameAndTags != null && token != null) { + protected User checkPermanentToken(String token) { + if (token != null) { WikittyProxy proxy = model.getProxy(); Criteria criteria = Search.query().eq(Token.FQ_FIELD_TOKEN, token).criteria(); Token DbToken = proxy.findByCriteria(Token.class, criteria); @@ -365,11 +386,22 @@ return null; } + protected boolean checkTemporaryToken(String token, HttpSession session) { + String temporaryToken = (String) session.getAttribute("temporaryToken"); + if (temporaryToken != null) { + if (temporaryToken.equals(token)) { + return true; + } + } + return false; + + } + /* @param request servlet request * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionClickOnTag(HttpServletRequest request, HttpServletResponse response) + protected void actionClickOnTag(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { WikittyProxy proxy = model.getProxy(); String tag = request.getParameter("tag"); @@ -393,7 +425,7 @@ * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionSearch(HttpServletRequest request, HttpServletResponse response) + protected void actionSearch(HttpServletRequest request, HttpServletResponse response, User user) throws IOException, ServletException { WikittyProxy proxy = model.getProxy(); String words = request.getParameter("words"); // retrieve informations taping in the search field @@ -418,8 +450,8 @@ * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionRegister(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { + protected void actionRegister(HttpServletRequest request, HttpServletResponse response, HttpSession session) + throws IOException, ServletException, NoSuchAlgorithmException { String email = request.getParameter("email"); String password = request.getParameter("password"); if (this.checkRegister(email, password)) { // check if all is well @@ -429,12 +461,25 @@ UserImpl newUser = new UserImpl(); newUser.setPassword(request.getParameter("password")); newUser.setEmail(request.getParameter("email")); - this.user = proxy.store((User) newUser); // store the new user - if (user == null) { + User login = proxy.store((User) newUser); // store the new user + if (login == null) { request.getRequestDispatcher("error.jsp").forward(request, response); } else { - this.actionSearch(request, response); - error="Email already exist"; + session.setAttribute("user", login); + Criteria criteria = Search.query().eq(User.FQ_FIELD_EMAIL, login.getEmail()).criteria(); + Token token = proxy.findByCriteria(Token.class, criteria); + if (token == null) { + token = new TokenImpl(); + String newToken = tokenActions.generateToken(); + token.setToken(newToken); + token.setEmail(login.getEmail()); + proxy.store(token); + } + tokenActions.setPermanentToken(token.getToken()); + String temporaryToken = tokenActions.generateToken(); + tokenActions.setTemporaryToken(temporaryToken); + session.setAttribute("temporaryToken", temporaryToken); + this.actionSearch(request, response, login); } } } @@ -443,15 +488,29 @@ * @param response servlet response * @throws ServletException if a servlet error occurs */ - protected void actionLogin(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { + protected void actionLogin(HttpServletRequest request, HttpServletResponse response, HttpSession session) + throws IOException, ServletException, NoSuchAlgorithmException { String email = request.getParameter("email"); String password = request.getParameter("password"); User login = this.checkLogin(email, password); // check if the user exists if (login != null) { - this.user = login; - this.actionSearch(request, response); + WikittyProxy proxy = model.getProxy(); + session.setAttribute("user", login); + Criteria criteria = Search.query().eq(User.FQ_FIELD_EMAIL, login.getEmail()).criteria(); + Token token = proxy.findByCriteria(Token.class, criteria); + if (token == null) { + token = new TokenImpl(); + String newToken = tokenActions.generateToken(); + token.setToken(newToken); + token.setEmail(login.getEmail()); + proxy.store(token); + } + tokenActions.setPermanentToken(token.getToken()); + String temporaryToken = tokenActions.generateToken(); + tokenActions.setTemporaryToken(temporaryToken); + session.setAttribute("temporaryToken", temporaryToken); + this.actionSearch(request, response, login); } else { error = "Unknow email or incorrect password"; request.getRequestDispatcher("home.jsp").forward(request, response); @@ -497,11 +556,4 @@ return true; } - public void setUser(User user) { - this.user = user; - } - - public User getUser() { - return user; - } } Modified: trunk/src/main/java/org/chorem/bow/TokenActions.java =================================================================== --- trunk/src/main/java/org/chorem/bow/TokenActions.java 2010-05-14 09:52:06 UTC (rev 24) +++ trunk/src/main/java/org/chorem/bow/TokenActions.java 2010-05-14 15:09:05 UTC (rev 25) @@ -14,12 +14,17 @@ public class TokenActions { - String token = ""; + String temporaryToken = ""; + String permanentToken = ""; - public String getToken() { - return token; + public String getPermanentToken() { + return permanentToken; } + public String getTemporaryToken() { + return temporaryToken; + } + public String generateToken() throws NoSuchAlgorithmException { Double rand = Math.random() * 1000000; @@ -29,7 +34,11 @@ return tokenGenerated; // return the generate token } - public void setToken(String token) { - this.token = token; + public void setPermanentToken(String token) { + permanentToken = token; } + + public void setTemporaryToken(String token) { + temporaryToken = token; + } } Modified: trunk/src/main/webapp/search.jsp =================================================================== --- trunk/src/main/webapp/search.jsp 2010-05-14 09:52:06 UTC (rev 24) +++ trunk/src/main/webapp/search.jsp 2010-05-14 15:09:05 UTC (rev 25) @@ -8,12 +8,25 @@ <%@ page import="java.util.Set" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> +<%@ page import="org.chorem.bow.TokenActions" %> -<%BookmarkActions bookmarkActions = (BookmarkActions) request.getAttribute("bookmarkActions");%> +<% + TokenActions tokenActions = (TokenActions) request.getAttribute("tokenActions"); + String temporaryToken = tokenActions.getTemporaryToken(); + String permanentToken = tokenActions.getPermanentToken(); + BookmarkActions bookmarkActions = (BookmarkActions) request.getAttribute("bookmarkActions"); +%> + <html> <body> <a href="bow?action=logout">Logout</a><br/> + <a href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');var%20link='http://localhost:8080/bow/bow?action=addUrl&token=<%=temporaryToken%>&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);">Temporary token</a> + <br/> + <a href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');var%20link='http://localhost:8080/bow/bow?action=addUrl&token=<%=permanentToken%>&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);">Permanent token</a> + <br/> + <a href="bow?action=generateToken">Generate Permanent Token</a><br/><br/> + <h1>Search</h1> <form method="POST" action="bow?action=addUrl"> @@ -106,7 +119,7 @@ <IMG style="border:none" SRC="img/delete.png" ALT="Delete tag" TITLE="Delete" /> </a> <% - } + } %> </td> <td>
participants (1)
-
bbrossaud@users.chorem.org