r74 - in trunk: . src/main/java/org/chorem/bow src/main/resources src/main/webapp src/main/webapp/css src/main/xmi
Author: bbrossaud Date: 2010-06-21 15:48:25 +0200 (Mon, 21 Jun 2010) New Revision: 74 Url: http://chorem.org/repositories/revision/bow/74 Log: addition the new design part (date) and send new password by mail Added: trunk/src/main/webapp/forgotPassword.jsp Modified: trunk/pom.xml trunk/src/main/java/org/chorem/bow/BowConfig.java trunk/src/main/java/org/chorem/bow/ControllerServlet.java trunk/src/main/resources/bow.properties trunk/src/main/webapp/bookmark.jsp trunk/src/main/webapp/css/bookmark.css trunk/src/main/webapp/css/connexion.css trunk/src/main/webapp/login.jsp trunk/src/main/webapp/register.jsp trunk/src/main/xmi/bow.zargo Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/pom.xml 2010-06-21 13:48:25 UTC (rev 74) @@ -20,6 +20,12 @@ <dependencies> <dependency> + <groupId>javax.mail</groupId> + <artifactId>mail</artifactId> + <version>1.4.3</version> + </dependency> + + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> Modified: trunk/src/main/java/org/chorem/bow/BowConfig.java =================================================================== --- trunk/src/main/java/org/chorem/bow/BowConfig.java 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/java/org/chorem/bow/BowConfig.java 2010-06-21 13:48:25 UTC (rev 74) @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *##%*/ - package org.chorem.bow; import static org.nuiton.i18n.I18n._; @@ -37,7 +36,6 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(BowConfig.class); - /** Singleton instance. */ protected static BowConfig instance = null; @@ -89,6 +87,24 @@ } /** + * Get bow smtp server as string. + * + * @return smtpServer + */ + public String getSmtpServer() { + return getOption(Option.BOW_SMTPSERVER.key); + } + + /** + * Get bow address from as string. + * + * @return addressFrom + */ + public String getAddressFrom() { + return getOption(Option.BOW_ADDRESSFROM.key); + } + + /** * Set {@code solr} and {@code jms} system configuration. * * This is the "only" way to configure embedded solr. @@ -111,14 +127,17 @@ public static enum Option { CONFIG_FILE(CONFIG_FILE_NAME, _("bow.config.configFileName.description"), - "bow.properties", String.class, false, false), + "bow.properties", String.class, false, false), APPLICATION_VERSION("application.version", _("bow.config.application.version.description"), - null, String.class, true, true), + null, String.class, true, true), BOW_URL("bow.url", _("bow.config.bow.url.description"), - null, String.class, false, false), + null, String.class, false, false), + BOW_SMTPSERVER("bow.smtpServer", _("bow.config.bow.smtpServer.description"), + null, String.class, false, false), + BOW_ADDRESSFROM("bow.addressFrom", _("bow.config.bow.addressFrom.description"), + null, String.class, false, false), DATA_DIR("solr.data.dir", _("bow.config.data.dir.description"), - System.getProperty("user.home") + "/.bow/solr", String.class, false, false); - + System.getProperty("user.home") + "/.bow/solr", String.class, false, false); public final String key; public final String description; public final String defaultValue; @@ -136,5 +155,4 @@ this.isTransient = isTransient; } } - } Modified: trunk/src/main/java/org/chorem/bow/ControllerServlet.java =================================================================== --- trunk/src/main/java/org/chorem/bow/ControllerServlet.java 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/java/org/chorem/bow/ControllerServlet.java 2010-06-21 13:48:25 UTC (rev 74) @@ -14,6 +14,14 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.Properties; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.AddressException; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; @@ -24,6 +32,7 @@ import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.htmlparser.Node; @@ -97,6 +106,11 @@ log.debug("Going to Register"); } request.getRequestDispatcher("register.jsp").forward(request, response); + } else if (action.equals("forgotPassword")) { + if (log.isDebugEnabled()) { + log.debug("Going to forgotPassword"); + } + request.getRequestDispatcher("forgotPassword.jsp").forward(request, response); } else if (action.equals("login")) { if (log.isDebugEnabled()) { log.debug("Going to actionLogin"); @@ -118,6 +132,12 @@ log.debug("Going to actionAddUrl"); } this.actionAddUrl(request, response, user); + } else if (action.equals("sendPassword")) { + if (log.isDebugEnabled()) { + log.debug("Going to actionSendPassword"); + } + this.actionSendPassword(request); + request.getRequestDispatcher("login.jsp").forward(request, response); } else if (action.equals("modifyBookmark") && user != null) { if (log.isDebugEnabled()) { log.debug("Going to actionModif"); @@ -988,4 +1008,67 @@ proxy.store(preference); request.setAttribute("preference", preference); } + + protected void sendMail(String email, String password) + throws AddressException, MessagingException { + + BowConfig config = BowConfig.getInstance(); + String smtpServer = config.getSmtpServer(); + Properties properties = new Properties(); + properties.put("mail.smtp.host", smtpServer); + + Session session = Session.getDefaultInstance(properties, null); + session.setDebug(true); + + Message msg = new MimeMessage(session); + + InternetAddress toAddress = new InternetAddress(email); + msg.addRecipient(Message.RecipientType.TO, toAddress); + + String addressFrom = config.getAddressFrom(); + InternetAddress fromAddress = new InternetAddress(addressFrom); + msg.setFrom(fromAddress); + + String messageSubject = "[Bow] New Password"; + msg.setSubject(messageSubject); + + String messageBody = "Hi,\n\n"; + messageBody += "Here is your new password: " + password + "\n"; + msg.setContent(messageBody, "text/plain"); + + Transport.send(msg); + } + + protected boolean passwordExists(String password) { + WikittyProxy proxy = BowProxy.getInstance(); + Criteria criteria = Search.query().eq(User.FQ_FIELD_PASSWORD, password).criteria(); + List<User> users = proxy.findAllByCriteria(User.class, criteria).getAll(); + if (users != null && users.size() > 0) { + return true; + } + return false; + } + + protected void actionSendPassword(HttpServletRequest request) + throws NoSuchAlgorithmException, AddressException, MessagingException { + String email = request.getParameter("email"); + if (email != null) { + WikittyProxy proxy = BowProxy.getInstance(); + Criteria criteria = Search.query().eq(User.FQ_FIELD_EMAIL, email).criteria(); + User user = proxy.findByCriteria(User.class, criteria); + if (user != null) { + boolean bool = true; + String password = ""; + String md5 = ""; + while (bool) { + password = RandomStringUtils.randomAlphanumeric(20); + md5 = StringUtil.encodeMD5(password); + bool = passwordExists(md5); + } + sendMail(email, password); + user.setPassword(md5); + proxy.store(user); + } + } + } } Modified: trunk/src/main/resources/bow.properties =================================================================== --- trunk/src/main/resources/bow.properties 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/resources/bow.properties 2010-06-21 13:48:25 UTC (rev 74) @@ -1,2 +1,4 @@ application.version=${project.version} bow.url=http://localhost:8080/bow/ +bow.smtpServer=smtp +bow.addressFrom=bow@chorem.org Modified: trunk/src/main/webapp/bookmark.jsp =================================================================== --- trunk/src/main/webapp/bookmark.jsp 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/webapp/bookmark.jsp 2010-06-21 13:48:25 UTC (rev 74) @@ -26,11 +26,10 @@ <div class="bookmark"> <div class="bookmarkhead clearfix"> - <img src="./img/ptit-livre.jpg" alt="web site logo" /> - <a href="<%=url + bookmark.getAlias()%>" title="<%=url + bookmark.getAlias()%>" target="_blank"> + <a class="alias" href="<%=url + bookmark.getAlias()%>" title="<%=url + bookmark.getAlias()%>" target="_blank"> <%=bookmark.getAlias()%> </a> - <span> (<%=sdf.format(bookmark.getDate())%>)</span> + <p class="date"> (<%=sdf.format(bookmark.getDate())%>)</p> <a class="edit" href="bow?action=editBookmark&bookmarkId=<%=bookmark.getWikittyId()%><%=search%>" onclick="return modify('<%=bookmark.getDescription()%>', '<%=bookmark.getAlias()%>', '<%=BookmarkActions.getBookmarkTagsString(bookmark)%>', '<%=link%>', 'bow?action=modifyBookmark&bookmarkId=<%=bookmark.getWikittyId()%><%=search%>', '<%=bookmark.getWikittyId()%>');"></a> <a class="supprim" href="bow?action=removeBookmark&bookmarkId=<%=bookmark.getWikittyId()%><%=search%>"></a> </div> Modified: trunk/src/main/webapp/css/bookmark.css =================================================================== --- trunk/src/main/webapp/css/bookmark.css 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/webapp/css/bookmark.css 2010-06-21 13:48:25 UTC (rev 74) @@ -217,7 +217,7 @@ #colonneD .colonnebas{ background:url(/bow/img/piedmenu.jpg) no-repeat; - height:817px; + height:82px; } .bookmark{ @@ -231,12 +231,21 @@ background-color:#bf8a9c; padding:0 20px; position:relative; + clear:both; } +.bookmark .bookmarkhead .date{ + color:#fff; + font-size:10px; + float:left; + margin-top:10px; +} + .bookmark .bookmarkhead a.edit{ background:url(/bow/img/edit.jpg) no-repeat; height:32px; position:absolute; + float: right; top:0; right:32px; border:none; @@ -247,6 +256,7 @@ background:url(/bow/img/croix.jpg) no-repeat; height:32px; position:absolute; + float: right; top:0; right:0; border:none; @@ -263,6 +273,13 @@ text-decoration:none; } +.bookmark .bookmarkhead .alias { + float:left; + margin-right:15px; + display:block; + background:url(/bow/img/ptit-livre.jpg) no-repeat; +} + .bookmark .bookmarkcontenu{ position:relative; } Modified: trunk/src/main/webapp/css/connexion.css =================================================================== --- trunk/src/main/webapp/css/connexion.css 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/webapp/css/connexion.css 2010-06-21 13:48:25 UTC (rev 74) @@ -1,125 +1,135 @@ @charset "utf-8"; /* CSS Document */ *{ -padding:0; -margin:0; + padding:0; + margin:0; } .clearfix {height:1%} .clearfix:after { - content:"."; + content:"."; - height:0; + height:0; - line-height:0; + line-height:0; - display:block; + display:block; - visibility:hidden; + visibility:hidden; - clear:both; + clear:both; } body{ -font-size:10px; -font-family:Verdana, Arial, Helvetica, sans-serif; + font-size:10px; + font-family:Verdana, Arial, Helvetica, sans-serif; } #headback{ -background:#FFFFFF url(/bow/img/fondhead.jpg) repeat-x; -width:auto; -height:100px; + background:#FFFFFF url(/bow/img/fondhead.jpg) repeat-x; + width:auto; + height:100px; } #head{ -clear:both; -width:1004px; -height:100px; -margin:0 auto; -position:relative; + clear:both; + width:1004px; + height:100px; + margin:0 auto; + position:relative; } #headleft{ -width:740px; -float:left; -height:100px; + width:740px; + float:left; + height:100px; } #headleft a.logo{ -background:url(/bow/img/logobow.jpg); -width:290px; -height:100px; -text-indent:-99999px; -display:block; + background:url(/bow/img/logobow.jpg); + width:290px; + height:100px; + text-indent:-99999px; + display:block; } #mainbodyback{ -background-color:#9edcf8; -min-height:100px; + background-color:#9edcf8; + min-height:100px; } #mainbody{ -width:1004px; -margin:0 auto; -position:relative; -clear:both; + width:1004px; + margin:0 auto; + position:relative; + clear:both; } #content{ -width:1004px; -position:relative; -margin:0 auto; -padding-top:20px; + width:1004px; + position:relative; + margin:0 auto; + padding-top:20px; } #contenu{ -width:225px; -height:315px; -background:url(/bow/img/fondconnexion.jpg) no-repeat; -position:relative; -margin:100px auto; -padding:10px 70px; + width:225px; + height:315px; + background:url(/bow/img/fondconnexion.jpg) no-repeat; + position:relative; + margin:100px auto; + padding:10px 70px; } #contenu h1{ -color:#804561; -width:60px; -position:relative; -margin:20px auto; + color:#804561; + width:225px; + position:relative; + margin:20px auto; } #contenu form p{ -color:#804561; -font-size:16px; -font-weight:bold; -padding:15px 0; + color:#804561; + font-size:16px; + font-weight:bold; + padding:15px 0; } #contenu form input{ -width:225px; + width:225px; } -#contenu form button{ -float:right; -margin-top:20px; -background:url(/bow/img/fdboutonV.jpg) repeat-x; -height:31px; -line-height:31px; -width:60px; -color:#FFFFFF; -font-weight:bold; -border:none; +#contenu form button { + float:right; + margin-top:20px; + background:url(/bow/img/fdboutonV.jpg) repeat-x; + height:31px; + line-height:31px; + color:#FFFFFF; + font-weight:bold; + border:none; } -#contenu a{ -color:#804561; -position:absolute; -bottom:50px; -left:70px; -font-size:14px; -font-weight:bold; + +#contenu .register{ + color:#804561; + position:absolute; + bottom:50px; + left:75px; + font-size:14px; + font-weight:bold; } + +#contenu .forgot{ + color:#804561; + position:absolute; + bottom:100px; + left:75px; + font-size:9px; + font-weight:bold; +} + #footer{ -background-color:#804561; -height:50px; -width:auto; + background-color:#804561; + height:50px; + width:auto; } #footer p{ -color:#bf8a9c; -font-size:14px; -text-align:center; -line-height:50px; + color:#bf8a9c; + font-size:14px; + text-align:center; + line-height:50px; } \ No newline at end of file Added: trunk/src/main/webapp/forgotPassword.jsp =================================================================== --- trunk/src/main/webapp/forgotPassword.jsp (rev 0) +++ trunk/src/main/webapp/forgotPassword.jsp 2010-06-21 13:48:25 UTC (rev 74) @@ -0,0 +1,50 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> +<% + String error = (String) request.getAttribute("msgError"); + String url = (String) request.getAttribute("bowUrl"); + String version = (String) request.getAttribute("version"); +%> + +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> + <meta name="description" content="Bookmark On the Web" /> + <title>Bow</title> + <link rel="stylesheet" type="text/css" href="./css/connexion.css" /> + </head> + <body> + <div id="headback"> + <div id="head"> + <div id="headleft"> + <a class="logo" href="bow">bow</a> + </div> + </div> + </div> + <div id="mainbodyback"> + <div id="mainbody"> + + <div id="content"> + + <div id="contenu"> + <h1>Forgot Your Password?</h1> + <form method="POST" action="bow?action=sendPassword"> + <p>Email :</p> + <input type="text" name="email" /> + <button>Submit</button> + </form> + <a href="bow" class="register">Login page</a> + </div> + <br /> + <%if (error != null) {%> + <font color="red"><%=error%></font> + <%}%> + </div> + + </div> + <jsp:include page="footer.jsp" flush="true" > + <jsp:param name="bowUrl" value="<%=url%>" /> + <jsp:param name="version" value="<%=version%>" /> + </jsp:include> + </div> + </body> +</html> \ No newline at end of file Modified: trunk/src/main/webapp/login.jsp =================================================================== --- trunk/src/main/webapp/login.jsp 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/webapp/login.jsp 2010-06-21 13:48:25 UTC (rev 74) @@ -34,7 +34,8 @@ <input type=password name="password" /> <button type="submit">Login</button> </form> - <a href="bow?action=registration">Register</a> + <a href="bow?action=registration" class="register">Register</a> + <a href="bow?action=forgotPassword" class="forgot">Forgot Your Password?</a> </div> <br /> <%if (error != null) {%> Modified: trunk/src/main/webapp/register.jsp =================================================================== --- trunk/src/main/webapp/register.jsp 2010-06-14 14:15:40 UTC (rev 73) +++ trunk/src/main/webapp/register.jsp 2010-06-21 13:48:25 UTC (rev 74) @@ -34,7 +34,7 @@ <input type=password name="password" /> <button>Register</button> </form> - <a href="bow">Return to the login page</a> + <a href="bow" class="register">Login page</a> </div> <br /> <%if (error != null) {%> Modified: trunk/src/main/xmi/bow.zargo =================================================================== (Binary files differ)
participants (1)
-
bbrossaudï¼ users.chorem.org