From: <san...@us...> - 2006-09-12 17:33:21
|
Revision: 7 http://svn.sourceforge.net/gatormail/?rev=7&view=rev Author: sandymac Date: 2006-09-12 10:33:07 -0700 (Tue, 12 Sep 2006) Log Message: ----------- Updated UF wordmark Modified Paths: -------------- GatorMail/trunk/src/webapp/tiles/common/header.jsp GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp Added Paths: ----------- GatorMail/trunk/src/images/UFsig_small.gif Removed Paths: ------------- GatorMail/trunk/src/images/mkblutrnsp.gif Added: GatorMail/trunk/src/images/UFsig_small.gif =================================================================== (Binary files differ) Property changes on: GatorMail/trunk/src/images/UFsig_small.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: GatorMail/trunk/src/images/mkblutrnsp.gif =================================================================== (Binary files differ) Modified: GatorMail/trunk/src/webapp/tiles/common/header.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/common/header.jsp 2006-06-22 15:06:02 UTC (rev 6) +++ GatorMail/trunk/src/webapp/tiles/common/header.jsp 2006-09-12 17:33:07 UTC (rev 7) @@ -30,7 +30,7 @@ <table border="0" cellpadding="2"> <tr> <td align="center" valign="middle"> - <html:link href="http://www.ufl.edu/"><html:img page="/mkblutrnsp.gif" width="139" height="34" border="0"/></html:link> + <html:link href="http://www.ufl.edu/"><html:img page="/UFsig_small.gif" width="139" height="34" border="0"/></html:link> </td> </tr> <% Modified: GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2006-06-22 15:06:02 UTC (rev 6) +++ GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2006-09-12 17:33:07 UTC (rev 7) @@ -8,7 +8,7 @@ <html:link href="http://gatormail.sf.net/bugs">here</html:link>. </p> <hr align="center" width="300" size="1" noshade> -<html:link href="http://www.ufl.edu/"><html:img page="/mkblutrnsp.gif" border="0"/></html:link> +<html:link href="http://www.ufl.edu/"><html:img page="/UFsig_small.gif" border="0"/></html:link> <br/> <p class="copyright"> Copyright © 2002-2005 <a href="http://Sandy.McArthur.org/" style="color:gray;text-decoration:none">William A. McArthur, Jr.</a> <br/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2006-10-10 14:05:07
|
Revision: 13 http://svn.sourceforge.net/gatormail/?rev=13&view=rev Author: sandymac Date: 2006-10-10 07:04:52 -0700 (Tue, 10 Oct 2006) Log Message: ----------- Some fixes for better IMAP path seperator support. Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp GatorMail/trunk/src/webapp/tiles/folder/messageList.jsp GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-04 23:04:32 UTC (rev 12) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-10 14:04:52 UTC (rev 13) @@ -69,11 +69,11 @@ /** name for the IMAP box to put trash within */ public static final String TRASH_FOLDER = "Trash"; - public static final String TRASH_FOLDER_FULLNAME = "INBOX." + TRASH_FOLDER; + public static final String TRASH_FOLDER_FULLNAME = "INBOX." + TRASH_FOLDER; // TODO deal with heir sep /** name for the IMAP box to put sent messages within */ public static final String SENT_FOLDER = "Sent"; - public static final String SENT_FOLDER_FULLNAME = "INBOX." + SENT_FOLDER; + public static final String SENT_FOLDER_FULLNAME = "INBOX." + SENT_FOLDER; // TODO deal with heir sep /** request scoped key for a list of messages */ public static final String MESSAGE_LIST = "messageList"; Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-04 23:04:32 UTC (rev 12) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-10 14:04:52 UTC (rev 13) @@ -142,7 +142,6 @@ if (!store.isConnected()) { store.connect(); } - //final Folder folder = store.getFolder("INBOX.Junk"); Folder folder = store.getFolder("INBOX"); folder = folder.getFolder("Junk"); try { @@ -165,7 +164,6 @@ if (!store.isConnected()) { store.connect(); } - //final Folder folder = store.getFolder("INBOX.Junk"); Folder folder = store.getFolder("INBOX"); folder = folder.getFolder("Junk"); try { @@ -356,7 +354,7 @@ sb.append("if header :contains \"X-UFL-Spam-Level\" \"").append(stars).append("\" {").append(CRLF); sb.append("\tfileinto \"").append(folder).append("\"; ").append(CRLF); sb.append("}").append(CRLF); - + sb.append(CRLF); sb.append("vacation text:").append(CRLF); Modified: GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp 2006-10-04 23:04:32 UTC (rev 12) +++ GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp 2006-10-10 14:04:52 UTC (rev 13) @@ -1,12 +1,26 @@ +<%@ page import="javax.mail.Folder"%> +<%@ page import="edu.ufl.osg.webmail.util.Util"%> +<%@ page import="javax.mail.MessagingException"%> <%@page contentType="text/html"%> <%@taglib uri="/tags/struts-html" prefix="html"%> <%@taglib uri="/tags/struts-bean" prefix="bean"%> +<% + String trashFullName = "INBOX.Trash"; + try { + Folder f = Util.getFolder(session, "INBOX"); + f = f.getFolder("Trash"); + trashFullName = f.getFullName(); + } catch (MessagingException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + request.setAttribute("trashFullName", trashFullName); +%> <p> <table border="0" width="100%"> <tr> <td align="center"> <html:form action="emptyFolder"> - <html:hidden property="folderName" value="INBOX.Trash"/> + <html:hidden property="folderName" value="${trashFullName}"/> <html:hidden property="sure" value="true"/> <html:hidden property="permanent" value="true"/> <html:submit property="action" styleClass="button" titleKey="button.emptyTrash.title"><bean:message key="button.emptyTrash"/></html:submit> Modified: GatorMail/trunk/src/webapp/tiles/folder/messageList.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folder/messageList.jsp 2006-10-04 23:04:32 UTC (rev 12) +++ GatorMail/trunk/src/webapp/tiles/folder/messageList.jsp 2006-10-10 14:04:52 UTC (rev 13) @@ -68,12 +68,12 @@ <tr class="lightBlueRow"> <td align="left"> <c:choose> - <c:when test="${folder.fullName != 'INBOX.Trash'}"> + <c:when test="${folder.fullName != 'INBOX.Trash' and folder.fullName != 'INBOX/Trash'}"> <html:submit property="action" styleClass="button"> <bean:message key="button.delete"/> </html:submit> </c:when> - <c:when test="${folder.fullName == 'INBOX.Trash'}"> + <c:when test="${folder.fullName == 'INBOX.Trash' or folder.fullName == 'INBOX/Trash'}"> <html:hidden property="deleteForever" value="true"/> <html:submit property="action" styleClass="button"> <bean:message key="button.deleteForever"/> Modified: GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp 2006-10-04 23:04:32 UTC (rev 12) +++ GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp 2006-10-10 14:04:52 UTC (rev 13) @@ -28,7 +28,7 @@ <%-- Delete Link --%> <th width="20%"> <c:choose> - <c:when test="${folder.fullName != 'INBOX.Trash'}"> + <c:when test="${folder.fullName != 'INBOX.Trash' and folder.fullName != 'INBOX/Trash'}"> <html:link forward="deleteMessage" name="messageParams" scope="request" titleKey="link.delete.title"><bean:message key="link.delete"/></html:link> </c:when> <c:otherwise> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2006-10-10 15:16:11
|
Revision: 14 http://svn.sourceforge.net/gatormail/?rev=14&view=rev Author: sandymac Date: 2006-10-10 08:15:52 -0700 (Tue, 10 Oct 2006) Log Message: ----------- Updated copyright years Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/LoginForm.java GatorMail/trunk/src/webapp/tiles/common/footer.jsp GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-10 15:15:52 UTC (rev 14) @@ -1,7 +1,7 @@ /* * This file is part of GatorMail, a servlet based webmail. * Copyright (C) 2002, 2003 William A. McArthur, Jr. - * Copyright (C) 2003 The Open Systems Group / University of Florida + * Copyright (C) 2003,2006 The Open Systems Group / University of Florida * * GatorMail is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java 2006-10-10 15:15:52 UTC (rev 14) @@ -1,7 +1,7 @@ /* * This file is part of GatorMail, a servlet based webmail. * Copyright (C) 2002-2004 William A. McArthur, Jr. - * Copyright (C) 2003 The Open Systems Group / University of Florida + * Copyright (C) 2003,2006 The Open Systems Group / University of Florida * * GatorMail is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java 2006-10-10 15:15:52 UTC (rev 14) @@ -1,7 +1,7 @@ /* * This file is part of GatorMail, a servlet based webmail. * Copyright (C) 2002, 2003 William A. McArthur, Jr. - * Copyright (C) 2003 The Open Systems Group / University of Florida + * Copyright (C) 2003,2006 The Open Systems Group / University of Florida * * GatorMail is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-10 15:15:52 UTC (rev 14) @@ -1,6 +1,6 @@ /* * This file is part of GatorMail, a servlet based webmail. - * Copyright (C) 2003 The Open Systems Group / University of Florida + * Copyright (C) 2003,2006 The Open Systems Group / University of Florida * * GatorMail is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -242,7 +242,7 @@ prefsForm.setSignature(prefs.getProperty("compose.signature")); prefsForm.setImageUrl(prefs.getProperty("compose.X-Image-Url")); prefsForm.setJunkThreshold(prefs.getProperty("message.junk.threshold", "5")); - prefsForm.setVacationMessage(prefs.getProperty("vacation.message")); + prefsForm.setVacationMessage(prefs.getProperty("vacation.message", "I am currently unavailable. Your message will be read when I return.\n\nPS: This is an automatic response.")); if (prefs.getProperty("folder.list.threading") != null) { prefsForm.setThreading(Boolean.valueOf(prefs.getProperty("folder.list.threading"))); } Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/LoginForm.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/LoginForm.java 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/LoginForm.java 2006-10-10 15:15:52 UTC (rev 14) @@ -1,7 +1,7 @@ /* * This file is part of GatorMail, a servlet based webmail. * Copyright (C) 2002, 2003 William A. McArthur, Jr. - * Copyright (C) 2003 The Open Systems Group / University of Florida + * Copyright (C) 2003,2006 The Open Systems Group / University of Florida * * GatorMail is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Modified: GatorMail/trunk/src/webapp/tiles/common/footer.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/common/footer.jsp 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/webapp/tiles/common/footer.jsp 2006-10-10 15:15:52 UTC (rev 14) @@ -6,7 +6,7 @@ <td class="footer" align="center"> Copyright © 2002-2005 <a href="http://Sandy.McArthur.org/" style="color:gray;text-decoration:none">William A. McArthur, Jr.</a> <br/> <br/> - Copyright © 2003-2005 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> | + Copyright © 2003-2006 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> | <html:link href="http://www.cns.ufl.edu/">Computing and Networking Services</html:link> | <html:link href="http://www.ufl.edu/">University of Florida</html:link> <br/> <br/> Modified: GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2006-10-10 14:04:52 UTC (rev 13) +++ GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2006-10-10 15:15:52 UTC (rev 14) @@ -12,7 +12,7 @@ <br/> <p class="copyright"> Copyright © 2002-2005 <a href="http://Sandy.McArthur.org/" style="color:gray;text-decoration:none">William A. McArthur, Jr.</a> <br/> - Copyright © 2003-2005 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> <br/> + Copyright © 2003-2006 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> <br/> <html:link href="http://www.cns.ufl.edu/">Computing and Networking Services</html:link> / <html:link href="http://www.ufl.edu/">University of Florida</html:link> <br/> Site maintained by <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2006-10-16 21:09:37
|
Revision: 15 http://svn.sourceforge.net/gatormail/?rev=15&view=rev Author: sandymac Date: 2006-10-16 14:09:18 -0700 (Mon, 16 Oct 2006) Log Message: ----------- Finished IMAP Path seperator genericification. Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteFolderAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessageAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessagesAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PerformDeleteFolderAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/RenameFolderAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/SendAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp GatorMail/trunk/src/webapp/tiles/folderManage/folderManage.jsp GatorMail/trunk/src/webapp/tiles/folderManage/folderManageModify.jsp Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/Constants.java 2006-10-16 21:09:18 UTC (rev 15) @@ -20,6 +20,12 @@ package edu.ufl.osg.webmail; +import edu.ufl.osg.webmail.util.Util; + +import javax.servlet.http.HttpSession; +import javax.mail.Folder; +import javax.mail.MessagingException; + /** * Constants for the WebMail application. * @@ -69,11 +75,9 @@ /** name for the IMAP box to put trash within */ public static final String TRASH_FOLDER = "Trash"; - public static final String TRASH_FOLDER_FULLNAME = "INBOX." + TRASH_FOLDER; // TODO deal with heir sep /** name for the IMAP box to put sent messages within */ public static final String SENT_FOLDER = "Sent"; - public static final String SENT_FOLDER_FULLNAME = "INBOX." + SENT_FOLDER; // TODO deal with heir sep /** request scoped key for a list of messages */ public static final String MESSAGE_LIST = "messageList"; @@ -95,4 +99,16 @@ public static final String MESSAGE_FLAG_NO_ATTACHMENT = "NoAttachment"; public static final String MAILBEAN_KEY = "mailBean"; + + public static String getTrashFolderFullname(final HttpSession session) throws MessagingException { + final Folder inbox = Util.getFolder(session, "INBOX"); + Util.releaseFolder(inbox); + return inbox.getFolder(TRASH_FOLDER).getFullName(); + } + + public static String getSentFolderFullname(final HttpSession session) throws MessagingException { + final Folder inbox = Util.getFolder(session, "INBOX"); + Util.releaseFolder(inbox); + return inbox.getFolder(SENT_FOLDER).getFullName(); + } } Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java 2006-10-16 21:09:18 UTC (rev 15) @@ -176,11 +176,6 @@ * * @param form the struts ActionForm * @param request the submitted HTTP request - * @see - * #fetchMessage(org.apache.struts.action.ActionForm, - * javax.mail.Folder, - * javax.servlet.http.HttpServletRequest, - * boolean) */ protected static Folder fetchFolder(final ActionForm form, final HttpServletRequest request) throws IllegalAccessException, MessagingException, InvocationTargetException, NoSuchMethodException, FolderNotFoundException { final String folderName = (String)PropertyUtils.getSimpleProperty(form, "folder"); @@ -201,11 +196,6 @@ * * @param form the struts ActionForm * @param folder the JavaMail Folder containting the message - * @see - * #fetchMessage(org.apache.struts.action.ActionForm, - * javax.mail.Folder, - * javax.servlet.http.HttpServletRequest, - * boolean) */ protected static Message fetchMessage(final ActionForm form, final Folder folder) throws IllegalAccessException, MessagingException, InvocationTargetException, NoSuchMethodException { final Integer messageNumber = (Integer)PropertyUtils.getSimpleProperty(form, "messageNumber"); @@ -470,7 +460,7 @@ Folder[] folders; try { // add root folder, if it is allowed - if (isFolderIncluded(rootFolder, includeReserved) && rootFolder.exists()) { + if (isFolderIncluded(rootFolder, includeReserved, session) && rootFolder.exists()) { //list.add(folderToFolderBean(rootFolder)); list.add(rootFolder); } @@ -491,8 +481,8 @@ } // is this folder to be restricted from the list? - private static boolean isFolderIncluded(final Folder folder, final boolean includeReserved) { - return (!(!includeReserved && Util.isReservedFolder(folder.getFullName()))); + private static boolean isFolderIncluded(final Folder folder, final boolean includeReserved, HttpSession session) throws MessagingException { + return (!(!includeReserved && Util.isReservedFolder(folder.getFullName(), session))); } // array of (lowercase) characters allowed in a new folder's name @@ -559,7 +549,7 @@ final int length = folderName.length(); for (int i = 0; i < length; i++) { if (Arrays.binarySearch(legalChars, tempName.charAt(i)) < 0) { - logger.error("checked folder name. illegal character found: " + Arrays.binarySearch(legalChars, tempName.charAt(i))); + logger.error("checked folder name. illegal character found: " + tempName.charAt(i)); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.createFolder.illegalChar", String.valueOf(tempName.charAt(i)))); return false; } @@ -575,7 +565,7 @@ * @return true if the folder can validly be deleted, * false if not. */ - protected static boolean isLegalDelete(final Folder folder, final ActionErrors errors) throws MessagingException { + protected static boolean isLegalDelete(final Folder folder, final ActionErrors errors, final HttpSession session) throws MessagingException { final String deleteFolderName = folder.getFullName(); // check if the folder to be deleted exists @@ -585,7 +575,7 @@ } // check if the folder to be deleted is required for this application - if (Util.isReservedFolder(deleteFolderName)) { + if (Util.isReservedFolder(deleteFolderName, session)) { logger.debug("folder is required for this application"); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.deleteFolder.notallowed", deleteFolderName)); return false; Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteFolderAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteFolderAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteFolderAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -33,6 +33,7 @@ import javax.mail.Folder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.util.List; /** @@ -71,11 +72,12 @@ Folder folder = null; try { - folder = Util.getFolder(request.getSession(), deleteFolder); + final HttpSession session = request.getSession(); + folder = Util.getFolder(session, deleteFolder); logger.debug("deleteFolder: " + folder); // check that this folder qualifies for deletion - if (!ActionsUtil.isLegalDelete(folder, errors)) { + if (!ActionsUtil.isLegalDelete(folder, errors, session)) { logger.error("illegal delete: " + folder.getFullName()); saveErrors(request, errors); return mapping.findForward("fail"); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessageAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessageAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessageAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -162,9 +162,9 @@ final Folder folder = message.getFolder(); Folder trashFolder = null; try { - trashFolder = Util.getFolder(session, Constants.TRASH_FOLDER_FULLNAME); + trashFolder = Util.getFolder(session, Constants.getTrashFolderFullname(session)); if (!deleteForever && (trashFolder != null // if we are in the trash folder, don't bother - && !Constants.TRASH_FOLDER_FULLNAME.equals(folder.getFullName()))) { + && !Constants.getTrashFolderFullname(session).equals(folder.getFullName()))) { // throw it in the trash logger.debug("copying message #" + message.getMessageNumber() + " to Trash"); final List unfinishedList = ActionsUtil.copyMessages(new Message[]{message}, folder, trashFolder, errors); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessagesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessagesAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/DeleteMessagesAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -37,6 +37,7 @@ import javax.mail.MessagingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -95,11 +96,12 @@ final int numMessages = messageList.size(); Folder trashFolder = null; + final HttpSession session = request.getSession(); try { - trashFolder = Util.getFolder(request.getSession(), Constants.TRASH_FOLDER_FULLNAME); + trashFolder = Util.getFolder(session, Constants.getTrashFolderFullname(session)); if (!deleteForever && // if deleteForever is true, don't copy messages into trash trashFolder != null && // if we are in the trash folder, don't bother - !Constants.TRASH_FOLDER_FULLNAME.equals(folder.getFullName())) { + !Constants.getTrashFolderFullname(session).equals(folder.getFullName())) { // sort messages from largest to smallest Collections.sort(messageList, deleteMessageSort); @@ -107,7 +109,7 @@ // throw it in the trash logger.debug("copying " + numMessages + " messages to Trash"); final List unfinishedList = ActionsUtil.copyMessages(messageList, folder, trashFolder, errors); - ActionsUtil.flushMailStoreGroupCache(request.getSession()); + ActionsUtil.flushMailStoreGroupCache(session); if (unfinishedList.size() > 0) { request.setAttribute(Constants.MESSAGE_LIST, unfinishedList); request.setAttribute(Constants.DELETE_ACTION, "deleteMessages"); @@ -122,7 +124,7 @@ // delete messages markMessagesForDelete(messageList); folder.expunge(); - ActionsUtil.flushMailStoreGroupCache(request.getSession()); + ActionsUtil.flushMailStoreGroupCache(session); // success message for next page final ResultBean result = new ResultBean(); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -107,7 +107,7 @@ final HttpSession session = request.getSession(); final ActionErrors errors = new ActionErrors(); final Folder folder = Util.getFolder(session, emptyForm.getFolderName()); - final Folder toFolder = Util.getFolder(session, Constants.TRASH_FOLDER_FULLNAME); + final Folder toFolder = Util.getFolder(session, Constants.getTrashFolderFullname(session)); final Message[] messages = folder.getMessages(); final List messageList = ActionsUtil.buildMessageList(messages); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PerformDeleteFolderAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PerformDeleteFolderAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PerformDeleteFolderAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -34,6 +34,7 @@ import javax.mail.Folder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.util.HashMap; import java.util.Map; @@ -114,13 +115,14 @@ final FolderForm folderForm = (FolderForm)form; final String folderFullName = folderForm.getFolder(); - final Folder folder = Util.getFolder(request.getSession(), folderFullName); + final HttpSession session = request.getSession(); + final Folder folder = Util.getFolder(session, folderFullName); // Check that this folder qualifies for deletion. // This check was already done, but we want to guard against // people sending faked parameters to this action from the // confirm delete form. - if (!ActionsUtil.isLegalDelete(folder, errors)) { + if (!ActionsUtil.isLegalDelete(folder, errors, session)) { saveErrors(request, errors); Util.releaseFolder(folder); // clean up return mapping.findForward("fail"); @@ -132,7 +134,7 @@ // recursive delete is OK - if the user didn't check "deleteChildren" and there // were children, the form validation would have caught that. folder.delete(true); - ActionsUtil.flushMailStoreGroupCache(request.getSession()); + ActionsUtil.flushMailStoreGroupCache(session); // success message for next page final ResultBean result = new ResultBean(Util.getFromBundle("performDeleteFolder.result.success")); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -224,6 +224,12 @@ } populateFormBeanFromPreferences(prefsForm, prefs, user); + // Make sure the vacation alert banner is cleared. + if (prefsForm.getVacationSieveEnabled() != null && prefsForm.getVacationSieveEnabled().booleanValue()) { + session.setAttribute("vacationEnabled", Boolean.TRUE); + } else { + session.setAttribute("vacationEnabled", null); + } if (imageUrl != null) { request.setAttribute("X-Image-Url", imageUrl); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/RenameFolderAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/RenameFolderAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/RenameFolderAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -74,7 +74,7 @@ final Folder oldFolder = Util.getFolder(session, oldFolderName); // check if folder is reserved, i.e. not allowed to be renamed - if (Util.isReservedFolder(oldFolderName)) { + if (Util.isReservedFolder(oldFolderName, session)) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.renameFolder.reserved")); saveErrors(request, errors); return mapping.findForward("fail"); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/SendAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/SendAction.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/SendAction.java 2006-10-16 21:09:18 UTC (rev 15) @@ -168,9 +168,9 @@ logger.debug("copyToSent value: " + compForm.isCopyToSent()); if (compForm.isCopyToSent()) { logger.debug("copy message to Sent folder - start"); - final Folder sentFolder = Util.getFolder(httpSession, Constants.SENT_FOLDER_FULLNAME); + final Folder sentFolder = Util.getFolder(httpSession, Constants.getSentFolderFullname(httpSession)); message.setFlag(Flags.Flag.SEEN, true); - ActionsUtil.flushMailStoreGroupCache(request.getSession()); + ActionsUtil.flushMailStoreGroupCache(httpSession); if (!ActionsUtil.appendMessage(message, sentFolder, errors)) { // error - go to special error page saveErrors(request, errors); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java 2006-10-16 21:09:18 UTC (rev 15) @@ -1035,8 +1035,8 @@ /** * Is this a special, undeletable folder such as INBOX or Trash? */ - public static boolean isReservedFolder(final String folderName) { - return ("INBOX".equals(folderName) || Constants.TRASH_FOLDER_FULLNAME.equals(folderName) || Constants.SENT_FOLDER_FULLNAME.equals(folderName)); + public static boolean isReservedFolder(final String folderName, final HttpSession session) throws MessagingException { + return ("INBOX".equals(folderName) || Constants.getTrashFolderFullname(session).equals(folderName) || Constants.getSentFolderFullname(session).equals(folderName)); } // Two methods to help track usage stats. TODO: remove them Modified: GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp 2006-10-16 21:09:18 UTC (rev 15) @@ -23,9 +23,9 @@ String imageName = "/"; if (currentRootFolder.getFullName().equals("INBOX")) { imageName += "inbox"; - } else if (currentRootFolder.getFullName().equals(Constants.SENT_FOLDER_FULLNAME)) { + } else if (currentRootFolder.getFullName().equals(Constants.getSentFolderFullname(session))) { imageName += "sent"; - } else if (currentRootFolder.getFullName().equals(Constants.TRASH_FOLDER_FULLNAME)) { + } else if (currentRootFolder.getFullName().equals(Constants.getTrashFolderFullname(session))) { imageName += "trash"; // TODO When we support the concept of a Draft folder. // } else if (currentRootFolder.getFullName().equals(Constants.DRAFT_FOLDER_FULLNAME)) { Modified: GatorMail/trunk/src/webapp/tiles/folderManage/folderManage.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folderManage/folderManage.jsp 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/webapp/tiles/folderManage/folderManage.jsp 2006-10-16 21:09:18 UTC (rev 15) @@ -85,7 +85,7 @@ </td> <td> <% - if (!Util.isReservedFolder(folder.getFullName())) { + if (!Util.isReservedFolder(folder.getFullName(), session)) { %> <html:link forward="deleteFolder" name="folderParams" scope="page"> <bean:message key="folderManage.table.delete"/></html:link> Modified: GatorMail/trunk/src/webapp/tiles/folderManage/folderManageModify.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folderManage/folderManageModify.jsp 2006-10-10 15:15:52 UTC (rev 14) +++ GatorMail/trunk/src/webapp/tiles/folderManage/folderManageModify.jsp 2006-10-16 21:09:18 UTC (rev 15) @@ -46,7 +46,7 @@ <%-- Rename Folder --%> <% - if (!Util.isReservedFolder(folder.getFullName())) { + if (!Util.isReservedFolder(folder.getFullName(), session)) { %> <tr> <td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2006-10-23 20:38:56
|
Revision: 16 http://svn.sourceforge.net/gatormail/?rev=16&view=rev Author: sandymac Date: 2006-10-23 12:49:33 -0700 (Mon, 23 Oct 2006) Log Message: ----------- speeling corrections Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp Property Changed: ---------------- GatorMail/trunk/src/ Property changes on: GatorMail/trunk/src ___________________________________________________________________ Name: svn:ignore + META-INF Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-16 21:09:18 UTC (rev 15) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-23 19:49:33 UTC (rev 16) @@ -248,7 +248,7 @@ prefsForm.setSignature(prefs.getProperty("compose.signature")); prefsForm.setImageUrl(prefs.getProperty("compose.X-Image-Url")); prefsForm.setJunkThreshold(prefs.getProperty("message.junk.threshold", "5")); - prefsForm.setVacationMessage(prefs.getProperty("vacation.message", "I am currently unavailable. Your message will be read when I return.\n\nPS: This is an automatic response.")); + prefsForm.setVacationMessage(prefs.getProperty("vacation.message", "I am currently unavailable. Your message will be read when I return.\n\nPS: This is an automated response.")); if (prefs.getProperty("folder.list.threading") != null) { prefsForm.setThreading(Boolean.valueOf(prefs.getProperty("folder.list.threading"))); } Modified: GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp 2006-10-16 21:09:18 UTC (rev 15) +++ GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp 2006-10-23 19:49:33 UTC (rev 16) @@ -159,11 +159,11 @@ </tr> <tr class="altrow"> - <th width="20%" align="right" valign="top">Enable VacationAuto-Reponder:</th> + <th width="20%" align="right" valign="top">Enable VacationAuto-Responder:</th> <td> <html:checkbox property="vacationSieveEnabled"/> <div class="tip"> - If checked, messages you recieve will trigger an automatic response with the message above. + If checked, messages you receive will trigger an automatic response with the message above. </div> </td> </tr> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2006-11-02 18:46:22
|
Revision: 19 http://svn.sourceforge.net/gatormail/?rev=19&view=rev Author: sandymac Date: 2006-11-02 10:46:05 -0800 (Thu, 02 Nov 2006) Log Message: ----------- Fixes to make sure all Folder objects get closed and close open imap sessions at logout. Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/imap/UFIMAPSessionProvider.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java GatorMail/trunk/src/webapp/WEB-INF/struts-config.xml GatorMail/trunk/src/webapp/WEB-INF/web.xml GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp Added Paths: ----------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/FolderCloserFilter.java Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/ActionsUtil.java 2006-11-02 18:46:05 UTC (rev 19) @@ -772,6 +772,9 @@ // XXX: Less correct but faster. folder = store.getFolder("INBOX"); + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } list = getFolders(folder); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/EmptyFolderAction.java 2006-11-02 18:46:05 UTC (rev 19) @@ -84,6 +84,7 @@ final HttpSession session = request.getSession(); final String folderName = emptyForm.getFolderName(); final Folder folder = Util.getFolder(session, folderName); + Util.releaseFolder(folder); request.setAttribute("folder", folder); request.setAttribute("folderName", folderName); request.setAttribute("perm", emptyForm.getPermanent()); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LoginAction.java 2006-11-02 18:46:05 UTC (rev 19) @@ -29,6 +29,7 @@ import edu.ufl.osg.webmail.prefs.PreferencesProvider; import edu.ufl.osg.webmail.util.Util; import edu.ufl.osg.webmail.util.RequestTimerFilter; +import edu.ufl.osg.webmail.util.FolderCloserFilter; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; import org.apache.struts.action.Action; @@ -150,6 +151,10 @@ Folder inbox = null; try { inbox = mailStore.getFolder("INBOX"); + FolderCloserFilter.closeFolder(inbox); + if (Util.traceProtocol) { + Util.addProtocolMarkers(inbox, (new Exception()).getStackTrace()); + } if (inbox == null || !inbox.exists()) { return mapping.findForward("noInbox"); } else { @@ -160,6 +165,9 @@ if (!inbox.isOpen()) { inbox.open(Folder.READ_ONLY); inbox.setSubscribed(true); + if (Util.traceProtocol) { + Util.addProtocolMarkers(inbox, (new Exception()).getStackTrace()); + } inbox.close(false); logger.debug("INBOX opened and closed"); } Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/LogoutAction.java 2006-11-02 18:46:05 UTC (rev 19) @@ -20,6 +20,7 @@ package edu.ufl.osg.webmail.actions; +import com.opensymphony.oscache.web.ServletCache; import edu.ufl.osg.webmail.Constants; import edu.ufl.osg.webmail.User; import edu.ufl.osg.webmail.data.AttachDAO; @@ -34,10 +35,12 @@ import javax.mail.Folder; import javax.mail.Service; +import javax.mail.Store; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.lang.ref.Reference; +import java.util.Date; import java.util.Enumeration; @@ -103,10 +106,23 @@ } } else if (o instanceof Folder) { final Folder f = (Folder)o; + if (Util.traceProtocol) { + Util.addProtocolMarkers(f, (new Exception()).getStackTrace()); + } if (f.isOpen()) { f.close(false); } + } else if (o instanceof User) { + final User u = (User)o; + Store store = u.getMailStore(); + if (store.isConnected()) { + store.close(); + } + + } else if (o instanceof ServletCache) { + ServletCache cache = (ServletCache)o; + cache.flushAll(new Date()); } } catch (Exception e) { logger.error("Silently ignoring Exception during logout.", e); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2006-11-02 18:46:05 UTC (rev 19) @@ -27,6 +27,7 @@ import edu.ufl.osg.webmail.forms.PreferencesForm; import edu.ufl.osg.webmail.prefs.PreferencesProvider; import edu.ufl.osg.webmail.util.Util; +import edu.ufl.osg.webmail.util.FolderCloserFilter; import org.apache.log4j.Logger; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; @@ -143,7 +144,15 @@ store.connect(); } Folder folder = store.getFolder("INBOX"); + FolderCloserFilter.closeFolder(folder); + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } folder = folder.getFolder("Junk"); + FolderCloserFilter.closeFolder(folder); + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } try { if (!folder.exists()) { folder.create(Folder.HOLDS_MESSAGES | Folder.HOLDS_FOLDERS); Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/imap/UFIMAPSessionProvider.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/imap/UFIMAPSessionProvider.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/imap/UFIMAPSessionProvider.java 2006-11-02 18:46:05 UTC (rev 19) @@ -3,6 +3,8 @@ import edu.ufl.osg.webmail.SessionProvider; import edu.ufl.osg.webmail.User; +import edu.ufl.osg.webmail.util.Util; +import edu.ufl.osg.webmail.util.FolderCloserFilter; import javax.mail.Authenticator; import javax.mail.Folder; @@ -82,6 +84,10 @@ store.connect(); Folder folder = store.getFolder("INBOX"); + FolderCloserFilter.closeFolder(folder); + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } try { folder.open(Folder.READ_ONLY); } catch (MessagingException e) { Added: GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/FolderCloserFilter.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/FolderCloserFilter.java (rev 0) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/FolderCloserFilter.java 2006-11-02 18:46:05 UTC (rev 19) @@ -0,0 +1,60 @@ +package edu.ufl.osg.webmail.util; + +import javax.servlet.*; +import javax.mail.Folder; +import javax.mail.MessagingException; +import java.io.IOException; +import java.util.List; +import java.util.ArrayList; +import java.util.Iterator; + +/** + * Checks that any open folders were closed at the end of the request. + */ +public class FolderCloserFilter implements Filter { + private static ThreadLocal tl = new ThreadLocal() { + protected Object initialValue() { + return new ArrayList(); + } + }; + + public void init(FilterConfig filterConfig) throws ServletException { + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + final List l = (List)tl.get(); + + try { + chain.doFilter(request, response); + + } finally { + + final Iterator iter = l.iterator(); + while (iter.hasNext()) { + final Folder f = (Folder)iter.next(); + if (f.isOpen()) { + if (Util.traceProtocol) { + Util.addProtocolMarkers(f, (new Exception()).getStackTrace()); + System.err.println(f + " (" + System.identityHashCode(f) + ") was left open!"); + } + try { + f.close(false); + } catch (MessagingException e) { + // swallowed + } + } + iter.remove(); + + } + } + + } + + public static void closeFolder(Folder f) { + List l = (List)tl.get(); + l.add(f); + } + + public void destroy() { + } +} Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/Util.java 2006-11-02 18:46:05 UTC (rev 19) @@ -22,6 +22,9 @@ package edu.ufl.osg.webmail.util; import com.sun.mail.imap.IMAPFolder; +import com.sun.mail.imap.protocol.IMAPProtocol; +import com.sun.mail.iap.ProtocolException; +import com.sun.mail.iap.Argument; import edu.ufl.osg.webmail.Constants; import edu.ufl.osg.webmail.User; import edu.ufl.osg.webmail.data.AddressBkDAO; @@ -130,9 +133,75 @@ // XXX Ignore errors for now } } + FolderCloserFilter.closeFolder(folder); return folder; } + public static final boolean traceProtocol = false; + private static void addProtocolMarkers(final Folder folder, final String tag) { + if (folder instanceof IMAPFolder) { + IMAPFolder imapFolder = (IMAPFolder)folder; + try { + imapFolder.doCommandIgnoreFailure(new IMAPFolder.ProtocolCommand() { + public Object doCommand(IMAPProtocol imapProtocol) throws ProtocolException { + Argument argument = new Argument(); + argument.writeString(tag); + imapProtocol.simpleCommand("XGATORMAIL-MARKER", argument); + return null; + } + }); + } catch (MessagingException e) { + //e.printStackTrace(); + } + + } + } + + private static void addProtocolMarkers(final Folder folder, final String tag1, final String tag2) { + if (folder instanceof IMAPFolder) { + IMAPFolder imapFolder = (IMAPFolder)folder; + try { + imapFolder.doCommandIgnoreFailure(new IMAPFolder.ProtocolCommand() { + public Object doCommand(IMAPProtocol imapProtocol) throws ProtocolException { + Argument argument = new Argument(); + argument.writeString(tag1); + argument.writeString(tag2); + imapProtocol.simpleCommand("XGATORMAIL-MARKER", argument); + return null; + } + }); + } catch (MessagingException e) { + //e.printStackTrace(); + } + + } + } + + public static void addProtocolMarkers(final Folder folder, final StackTraceElement[] elements) { + if (folder instanceof IMAPFolder) { + IMAPFolder imapFolder = (IMAPFolder)folder; + try { + imapFolder.doCommandIgnoreFailure(new IMAPFolder.ProtocolCommand() { + public Object doCommand(IMAPProtocol imapProtocol) throws ProtocolException { + Argument argument = new Argument(); + argument.writeString(folder.toString() + " (" + System.identityHashCode(folder) + ")"); + int i; + for (i=0; i < elements.length && elements[i].getClassName().startsWith("edu.ufl.osg.webmail"); i++) { + argument.writeString(elements[i].toString()); + } + argument.writeString(elements[i].toString()); + argument.writeString(elements[++i].toString()); + imapProtocol.simpleCommand("X-GATORMAIL-STACK", argument); + return null; + } + }); + } catch (MessagingException e) { + //e.printStackTrace(); + } + + } + } + /** * Always returns a JavaMail {@link javax.mail.Folder} or an * MessagingException is thrown. This will first try to get the folder from @@ -154,13 +223,21 @@ store.connect(); } folder = store.getFolder(folderName); + FolderCloserFilter.closeFolder(folder); + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } if (!folder.isOpen()) { folder.open(Folder.READ_WRITE); } + FolderCloserFilter.closeFolder(folder); return folder; } public static void releaseFolder(final Folder folder) throws MessagingException { + if (Util.traceProtocol) { + Util.addProtocolMarkers(folder, (new Exception()).getStackTrace()); + } if (folder != null && folder.isOpen()) { folder.close(false); } Modified: GatorMail/trunk/src/webapp/WEB-INF/struts-config.xml =================================================================== --- GatorMail/trunk/src/webapp/WEB-INF/struts-config.xml 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/webapp/WEB-INF/struts-config.xml 2006-11-02 18:46:05 UTC (rev 19) @@ -393,8 +393,8 @@ <set-property property="definitions-parser-validate" value="true"/> </plug-in> - <!--<plug-in className="edu.ufl.osg.webmail.imap.IMAPPlugin">--> - <plug-in className="edu.ufl.osg.webmail.imap.UFIMAPSPlugIn"> + <plug-in className="edu.ufl.osg.webmail.imap.IMAPPlugin"> + <!--<plug-in className="edu.ufl.osg.webmail.imap.UFIMAPSPlugIn">--> <!-- I don't know why 'domain' must be lowercase but 'SMTP' and 'IMAP' must be uppercase. @@ -404,7 +404,7 @@ <set-property property="IMAPHost" value="imap.ufl.edu"/> <!-- Socket connection pool size. --> - <set-property property="connectionPoolSize" value="1"/> + <set-property property="connectionPoolSize" value="2"/> <!-- Socket connection timeout value in milliseconds. 90 seconds --> <set-property property="connectionTimeout" value="90000"/> <!-- Socket I/O timeout value in milliseconds --> Modified: GatorMail/trunk/src/webapp/WEB-INF/web.xml =================================================================== --- GatorMail/trunk/src/webapp/WEB-INF/web.xml 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/webapp/WEB-INF/web.xml 2006-11-02 18:46:05 UTC (rev 19) @@ -40,6 +40,7 @@ <param-value></param-value> </context-param> + <!-- <filter> <filter-name>GatorLinkAuth</filter-name> <filter-class>edu.ufl.osg.gatorlink.auth.filter.GatorLinkAuthentication</filter-class> @@ -52,6 +53,7 @@ <filter-name>GatorLinkAuth</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> + --> <filter> <filter-name>RequestTimer</filter-name> @@ -62,6 +64,15 @@ <url-pattern>*.do</url-pattern> </filter-mapping> + <filter> + <filter-name>FolderCloser</filter-name> + <filter-class>edu.ufl.osg.webmail.util.FolderCloserFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>FolderCloser</filter-name> + <url-pattern>*.do</url-pattern> + </filter-mapping> + <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> Modified: GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/webapp/tiles/folder/emptyTrash.jsp 2006-11-02 18:46:05 UTC (rev 19) @@ -8,7 +8,9 @@ String trashFullName = "INBOX.Trash"; try { Folder f = Util.getFolder(session, "INBOX"); + Util.releaseFolder(f); f = f.getFolder("Trash"); + Util.releaseFolder(f); trashFullName = f.getFullName(); } catch (MessagingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. Modified: GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp 2006-10-31 22:21:17 UTC (rev 18) +++ GatorMail/trunk/src/webapp/tiles/folder/folderList.jsp 2006-11-02 18:46:05 UTC (rev 19) @@ -8,15 +8,15 @@ <%@taglib uri="/tags/struts-bean" prefix="bean"%> <%@taglib uri="http://www.opensymphony.com/oscache" prefix="oscache"%> <% + Folder currentRootFolder = null; try { - - Folder currentRootFolder = (Folder)request.getAttribute("currentRootFolder"); - if (currentRootFolder == null) { - currentRootFolder = Util.getFolder(session, "INBOX"); - } - currentRootFolder = Util.getFolder(currentRootFolder); - request.setAttribute("currentRootFolder", currentRootFolder); - final String fullName = currentRootFolder.getFullName(); + currentRootFolder = (Folder)request.getAttribute("currentRootFolder"); + if (currentRootFolder == null) { + currentRootFolder = Util.getFolder(session, "INBOX"); + } + currentRootFolder = Util.getFolder(currentRootFolder); + request.setAttribute("currentRootFolder", currentRootFolder); + final String fullName = currentRootFolder.getFullName(); %> <oscache:cache key="<%= "folderList.jsp#" + ((Folder)request.getAttribute("folder")).getFullName() + "::" + fullName %>" scope="session" time="300" groups="mailStore"> <% @@ -100,5 +100,9 @@ } catch (Throwable t) { t.printStackTrace(); throw t; + } finally { + if (currentRootFolder != null) { + Util.releaseFolder(currentRootFolder); + } } %> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2007-02-23 00:16:21
|
Revision: 26 http://svn.sourceforge.net/gatormail/?rev=26&view=rev Author: sandymac Date: 2007-02-22 16:16:15 -0800 (Thu, 22 Feb 2007) Log Message: ----------- Added a preference to disable the new autocomplete. Modified Paths: -------------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/PreferencesForm.java GatorMail/trunk/src/java/edu/ufl/osg/webmail/prefs/DBPrefsProvider.java GatorMail/trunk/src/webapp/tiles/common/footer.jsp GatorMail/trunk/src/webapp/tiles/compose/message.jsp GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/actions/PreferencesAction.java 2007-02-23 00:16:15 UTC (rev 26) @@ -205,6 +205,13 @@ } } + final Boolean autocomplete = prefsForm.getAutocomplete(); + if (autocomplete == null && prefs.getProperty("compose.recipients.autocomplete") != null) { + prefs.remove("compose.recipients.autocomplete"); + } else if (autocomplete != null || prefs.getProperty("compose.recipients.autocomplete") == null) { + prefs.setProperty("compose.recipients.autocomplete", autocomplete == null ? "false" : autocomplete.toString()); + } + final Boolean threading = prefsForm.getThreading(); if (threading == null && prefs.getProperty("folder.list.threading") != null) { prefs.remove("folder.list.threading"); @@ -258,6 +265,11 @@ prefsForm.setImageUrl(prefs.getProperty("compose.X-Image-Url")); prefsForm.setJunkThreshold(prefs.getProperty("message.junk.threshold", "5")); prefsForm.setVacationMessage(prefs.getProperty("vacation.message", "I am currently unavailable. Your message will be read when I return.\n\nPS: This is an automated response.")); + if (prefs.getProperty("compose.recipients.autocomplete") != null) { + prefsForm.setAutocomplete(Boolean.valueOf(prefs.getProperty("compose.recipients.autocomplete"))); + } else { + prefsForm.setAutocomplete(Boolean.TRUE); + } if (prefs.getProperty("folder.list.threading") != null) { prefsForm.setThreading(Boolean.valueOf(prefs.getProperty("folder.list.threading"))); } Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/PreferencesForm.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/PreferencesForm.java 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/forms/PreferencesForm.java 2007-02-23 00:16:15 UTC (rev 26) @@ -43,6 +43,7 @@ private String action; + private Boolean autocomplete; private String username; private String replyTo; private String signature; @@ -57,6 +58,7 @@ public void reset(final ActionMapping actionMapping, final HttpServletRequest request) { super.reset(actionMapping, request); setAction(null); + setAutocomplete(null); setSignature(null); setReplyTo(null); setUsername(null); @@ -129,6 +131,14 @@ this.action = action; } + public Boolean getAutocomplete() { + return autocomplete; + } + + public void setAutocomplete(final Boolean autocomplete) { + this.autocomplete = autocomplete; + } + public String getUsername() { return username; } Modified: GatorMail/trunk/src/java/edu/ufl/osg/webmail/prefs/DBPrefsProvider.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/prefs/DBPrefsProvider.java 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/prefs/DBPrefsProvider.java 2007-02-23 00:16:15 UTC (rev 26) @@ -261,7 +261,6 @@ * list, or <code>null</code> if it did not have one. */ public synchronized Object setProperty(final String key, final String value) throws RuntimeException { - // TODO: Put in DB deleteKey(key); if (value != null) { insertKeyValue(key, value); Modified: GatorMail/trunk/src/webapp/tiles/common/footer.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/common/footer.jsp 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/webapp/tiles/common/footer.jsp 2007-02-23 00:16:15 UTC (rev 26) @@ -6,7 +6,7 @@ <td class="footer" align="center"> Copyright © 2002-2005 <a href="http://Sandy.McArthur.org/" style="color:gray;text-decoration:none">William A. McArthur, Jr.</a> <br/> <br/> - Copyright © 2003-2006 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> | + Copyright © 2003-2007 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> | <html:link href="http://www.cns.ufl.edu/">Computing and Networking Services</html:link> | <html:link href="http://www.ufl.edu/">University of Florida</html:link> <br/> <br/> Modified: GatorMail/trunk/src/webapp/tiles/compose/message.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/compose/message.jsp 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/webapp/tiles/compose/message.jsp 2007-02-23 00:16:15 UTC (rev 26) @@ -1,6 +1,9 @@ <%@page contentType="text/html" import="java.util.List, edu.ufl.osg.webmail.util.Util, edu.ufl.osg.webmail.Constants"%> +<%@ page import="edu.ufl.osg.webmail.prefs.PreferencesProvider" %> +<%@ page import="edu.ufl.osg.webmail.User" %> +<%@ page import="java.util.Properties" %> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="/tags/struts-html" prefix="html"%> <%@taglib uri="/tags/struts-bean" prefix="bean"%> @@ -11,12 +14,129 @@ <script type="text/javascript" src="yui/dom/dom-min.js"></script> <script type="text/javascript" src="yui/event/event-min.js"></script> + +<% + final User user = Util.getUser(session); + boolean autocomplete = true; + if (user != null) { + final PreferencesProvider pp = (PreferencesProvider)application.getAttribute(Constants.PREFERENCES_PROVIDER); + final Properties prefs = pp.getPreferences(user, session); + autocomplete = Boolean.valueOf(prefs.getProperty("compose.recipients.autocomplete", "true")).booleanValue(); + } + if (autocomplete) { +%> + <%-- OPTIONAL: Animation (required only if enabling animation) --%> <script type="text/javascript" src="yui/animation/animation-min.js"></script> <%-- Source file --%> <script type="text/javascript" src="yui/autocomplete/autocomplete-min.js"></script> +<script language="JavaScript" type="text/javascript"> +<!-- + function populateAddress(field) { + var contacts = document.composeForm.contacts; + var length = contacts.length; + while( length-- ) { + if (contacts.options[length].selected) { + if (field.value == "") { + field.value += contacts.options[length].value; + + } else if (contacts.options[length].value != "" + && field.value.search(" " + contacts.options[length].value + ",") == -1 + && field.value.search("^" + contacts.options[length].value) == -1 + && field.value.search(" " + contacts.options[length].value + "$") == -1) { + field.value += ", " + contacts.options[length].value; + } + } + } + + return false; + } + + <c:choose> + <c:when test="${!empty addressList}"> + var addressList = [ + <c:forEach items="${addressList}" var="iAddress"> + {p:"<c:out value="${iAddress.personal}"/>", a:"<c:out value="${iAddress.address}"/>"}, + </c:forEach> + ]; + </c:when> + <c:otherwise> + var addressList = []; + </c:otherwise> + </c:choose> + var addressListFunction = function (query) { + var results = []; + if (query && query.length > 0) { + var queryLower = query.toLowerCase(); + for (var i=0; i < addressList.length; i++) { + var addressItem = addressList[i]; + if (addressItem) { + var personal = addressItem["p"]; + var address = addressItem["a"]; + var result = []; + var found = false; + if (address && address.toLowerCase().indexOf(queryLower) === 0) { + result[0] = address; + result[1] = personal; + results[results.length] = result; + found = true; + } + if (!found && personal && personal.toLowerCase().indexOf(queryLower) >= 0) { + var idx = personal.toLowerCase().indexOf(queryLower); + if (idx === 0 || personal.toLowerCase().indexOf(" " + queryLower) >= 0) { + result[0] = address; + result[1] = personal; + results[results.length] = result; + found = true; + } + } + } else { + delete addressList[i]; + } + } + } + return results; + } + var addressListDataSource = new YAHOO.widget.DS_JSFunction(addressListFunction); + var addressListFormatter = function (result, query) { + var markup = ""; + if (result[1]) { + markup = "\"" + result[1] + "\" "; + } + markup += "<" + result[0] + ">"; + try { + var re = new RegExp("(" + query + ")", "i"); + markup = markup.replace(re, "<b>$1</b>"); + } catch (ex) { + // ignore + } + return markup; + } + function initAutoComplete(elem, container) { + var ac = new YAHOO.widget.AutoComplete(elem, container, addressListDataSource); + ac.delimChar = ","; + ac.maxResultsDisplayed = 20; + ac.queryDelay = 0.1; + ac.animSpeed = 0.2; + ac.formatResult = addressListFormatter; + return ac; + } +// --> +</script> +<% + } else { // if (autocomplete) +%> +<script> + function initAutoComplete(elem, container) { + return null; + } +// --> +</script> +<% + } // if (autocomplete) else +%> <html:form method="post" action="modifyCompose" enctype="multipart/form-data" focus="to"> <html:hidden property="composeKey"/> <style type="text/css"> @@ -37,94 +157,6 @@ <script language="JavaScript" type="text/javascript"> <!-- -function populateAddress(field) { - var contacts = document.composeForm.contacts; - var length = contacts.length; - - while( length-- ) { - if (contacts.options[length].selected) { - if (field.value == "") { - field.value += contacts.options[length].value; - - } else if (contacts.options[length].value != "" - && field.value.search(" " + contacts.options[length].value + ",") == -1 - && field.value.search("^" + contacts.options[length].value) == -1 - && field.value.search(" " + contacts.options[length].value + "$") == -1) { - field.value += ", " + contacts.options[length].value; - } - } - } - - return false; -} - - <c:choose> - <c:when test="${!empty addressList}"> -var addressList = [ - <c:forEach items="${addressList}" var="iAddress"> -{p:"<c:out value="${iAddress.personal}"/>", a:"<c:out value="${iAddress.address}"/>"}, - </c:forEach> -]; - </c:when> - <c:otherwise> -var addressList = []; - </c:otherwise> - </c:choose> -var addressListFunction = function (query) { - var results = []; - if (query && query.length > 0) { - var queryLower = query.toLowerCase(); - for (var i=0; i < addressList.length; i++) { - var addressItem = addressList[i]; - if (addressItem) { - var personal = addressItem["p"]; - var address = addressItem["a"]; - var result = []; - var found = false; - if (address && address.toLowerCase().indexOf(queryLower) === 0) { - result[0] = address; - result[1] = personal; - results[results.length] = result; - found = true; - } - if (!found && personal && personal.toLowerCase().indexOf(queryLower) >= 0) { - var idx = personal.toLowerCase().indexOf(queryLower); - if (idx === 0 || personal.toLowerCase().indexOf(" " + queryLower) >= 0) { - result[0] = address; - result[1] = personal; - results[results.length] = result; - found = true; - } - } - } else { - delete addressList[i]; - } - } - } - return results; -} -var addressListDataSource = new YAHOO.widget.DS_JSFunction(addressListFunction); -var addressListFormatter = function (result, query) { - var markup = ""; - if (result[1]) { - markup = "\"" + result[1] + "\" "; - } - markup += "<" + result[0] + ">"; - try { - var re = new RegExp("(" + query + ")", "i"); - markup = markup.replace(re, "<b>$1</b>"); - } catch (ex) { - // ignore - } - return markup; -} -function initAutoComplete(elem, container) { - var ac = new YAHOO.widget.AutoComplete(elem, container, addressListDataSource); - ac.delimChar = ","; - ac.maxResultsDisplayed = 20; - ac.formatResult = addressListFormatter; - return ac; -} var preventSubmit = function (e) { if (YAHOO.util.Event.getCharCode(e) == 13) { YAHOO.util.Event.preventDefault(e); Modified: GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/webapp/tiles/login/loginFooter.jsp 2007-02-23 00:16:15 UTC (rev 26) @@ -12,7 +12,7 @@ <br/> <p class="copyright"> Copyright © 2002-2005 <a href="http://Sandy.McArthur.org/" style="color:gray;text-decoration:none">William A. McArthur, Jr.</a> <br/> - Copyright © 2003-2006 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> <br/> + Copyright © 2003-2007 <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> <br/> <html:link href="http://www.cns.ufl.edu/">Computing and Networking Services</html:link> / <html:link href="http://www.ufl.edu/">University of Florida</html:link> <br/> Site maintained by <html:link href="http://open-systems.ufl.edu/">The Open Systems Group</html:link> Modified: GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/webapp/tiles/message/messageMenu.jsp 2007-02-23 00:16:15 UTC (rev 26) @@ -13,15 +13,15 @@ <%-- Prev/Up/Next Links --%> <th width="15%"> <nobr> - <html:link forward="prevMessage" name="messageParams" scope="request" titleKey="link.previous.title" style="#ffffff"><bean:message key="link.previous"/></html:link> + <html:link forward="prevMessage" name="messageParams" scope="request" titleKey="link.previous.title" style="color:#ffffff;"><bean:message key="link.previous"/></html:link> <% pageContext.setAttribute("folderName", messageFolder.getFullName()); pageContext.setAttribute("sort", (String)request.getAttribute("folderSort")); %> - <a href="folder.do?folder=<c:out value="${folderName}"/>&sort=<c:out value="${folderSort}"/>" title="Back to Folder" style="#ffffff"><bean:message key="link.up"/></a> + <a href="folder.do?folder=<c:out value="${folderName}"/>&sort=<c:out value="${folderSort}"/>" title="Back to Folder" style="color:#ffffff;"><bean:message key="link.up"/></a> - <html:link forward="nextMessage" name="messageParams" scope="request" titleKey="link.next.title" style="#ffffff"><bean:message key="link.next"/></html:link> + <html:link forward="nextMessage" name="messageParams" scope="request" titleKey="link.next.title" style="color:#ffffff;"><bean:message key="link.next"/></html:link> </nobr> </th> @@ -29,13 +29,13 @@ <th width="20%"> <c:choose> <c:when test="${folder.fullName != 'INBOX.Trash' and folder.fullName != 'INBOX/Trash'}"> - <html:link forward="deleteMessage" name="messageParams" scope="request" titleKey="link.delete.title" style="#ffffff"><bean:message key="link.delete"/></html:link> + <html:link forward="deleteMessage" name="messageParams" scope="request" titleKey="link.delete.title" style="color:#ffffff;"><bean:message key="link.delete"/></html:link> </c:when> <c:otherwise> <% messageParams.put(Constants.DELETE_FOREVER, "true"); %> - <html:link forward="deleteMessage" name="messageParams" scope="request" titleKey="link.deleteForever.title" style="#ffffff"><bean:message key="link.deleteForever"/></html:link> + <html:link forward="deleteMessage" name="messageParams" scope="request" titleKey="link.deleteForever.title" style="color:#ffffff;"><bean:message key="link.deleteForever"/></html:link> <% messageParams.remove(Constants.DELETE_FOREVER); %> @@ -45,14 +45,14 @@ <%-- Reply Link --%> <th width="20%"> - <html:link forward="reply" name="messageParams" scope="request" titleKey="link.reply.title" style="#ffffff"> + <html:link forward="reply" name="messageParams" scope="request" titleKey="link.reply.title" style="color:#ffffff;"> <bean:message key="link.reply"/> </html:link> <% messageParams.put("action", "reply-all"); %> - <html:link forward="reply" name="messageParams" scope="request" titleKey="link.reply-all.title" style="#ffffff"> + <html:link forward="reply" name="messageParams" scope="request" titleKey="link.reply-all.title" style="color:#ffffff;"> <bean:message key="link.reply-all"/> </html:link> <% @@ -62,7 +62,7 @@ <%-- Forward Link --%> <th width="20%"> - <html:link forward="forward" name="messageParams" scope="request" titleKey="link.forward.title" style="#ffffff"> + <html:link forward="forward" name="messageParams" scope="request" titleKey="link.forward.title" style="color:#ffffff;"> <bean:message key="link.forward"/> </html:link> </th> Modified: GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp =================================================================== --- GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp 2007-02-09 21:27:47 UTC (rev 25) +++ GatorMail/trunk/src/webapp/tiles/preferences/preferences.jsp 2007-02-23 00:16:15 UTC (rev 26) @@ -59,6 +59,20 @@ </tr> <tr class="altrow"> + <th width="20%" align="right" valign="top">Recipient Auto Complete:</th> + <td> + <html:checkbox property="autocomplete"/> + <div class="tip"> + If checked, addresses in your address book will be autocompleted as you type them. + <p> + You must have at least one address in your address book for this to work.<br/> + If your browser can remember previous recipients and you prefer that method then disable this feature. + </p> + </div> + </td> + </tr> + + <tr> <th width="20%" align="right" valign="top">Image URL:</th> <td> <% @@ -77,7 +91,7 @@ Enter the full URL to a small image to be shown like a buddy icon for <br/> email if the reciepient's email client supports it. <p> - The image should have a size of 48x48 which means buddy icons icons work well. <br/> + The image should have a size of 48x48 which means buddy icons work well. <br/> When set a preview will be shown on the right. </p> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <san...@us...> - 2008-03-27 21:49:25
|
Revision: 35 http://gatormail.svn.sourceforge.net/gatormail/?rev=35&view=rev Author: sandymac Date: 2008-03-27 14:49:26 -0700 (Thu, 27 Mar 2008) Log Message: ----------- Log Remote IP addresses to help in phishing research. Modified Paths: -------------- GatorMail/trunk/src/webapp/WEB-INF/web.xml Added Paths: ----------- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/LogRemoteIpAddressFilter.java Added: GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/LogRemoteIpAddressFilter.java =================================================================== --- GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/LogRemoteIpAddressFilter.java (rev 0) +++ GatorMail/trunk/src/java/edu/ufl/osg/webmail/util/LogRemoteIpAddressFilter.java 2008-03-27 21:49:26 UTC (rev 35) @@ -0,0 +1,87 @@ +package edu.ufl.osg.webmail.util; + +import org.apache.log4j.Logger; + +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +import edu.ufl.osg.webmail.Constants; +import edu.ufl.osg.webmail.User; + +/** + * Logs the IP address used by remote users. + * + * @author Sandy McArthur + */ +public class LogRemoteIpAddressFilter implements Filter { + private static final Logger logger = Logger.getLogger(LogRemoteIpAddressFilter.class.getName()); + + public void init(final FilterConfig config) throws ServletException { + } + + public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { + try { + chain.doFilter(request, response); + } finally { + // Log after the main request has happened so we can catch the user name during login + if (request instanceof HttpServletRequest) { + final HttpServletRequest httpRequest = (HttpServletRequest)request; + final HttpSession session = httpRequest.getSession(false); + + // If there is no session, we don't know who this is. + if (session != null) { + final User user = (User)session.getAttribute(Constants.USER_KEY); + + // If we don't know who is logged in, don't bother logging anything + if (user != null) { + + final String ip = httpRequest.getRemoteAddr(); + // try to pick up if the user is using a proxy too + final String via = httpRequest.getHeader("Via"); + final String xForwardedFor = httpRequest.getHeader("X-Forwarded-For"); + + // create a stable, unique key for IP + proxy combinations + final StringBuffer keyBuffer = new StringBuffer("observed-"); + keyBuffer.append(ip); + if (via != null && via.length() > 0) { + keyBuffer.append("-").append(via); + } + if (xForwardedFor != null && xForwardedFor.length() > 0) { + keyBuffer.append("-").append(xForwardedFor); + } + + // if we haven't logged the IP already + if (session.getAttribute(keyBuffer.toString()) == null) { + + final StringBuffer messageBuffer = new StringBuffer(128); + messageBuffer.append("user: ").append(user.getEmail()); + messageBuffer.append(" observed using: ").append(ip); + if (via != null && via.length() > 0) { + messageBuffer.append(" Via: ").append(via); + } + if (xForwardedFor != null && xForwardedFor.length() > 0) { + messageBuffer.append(" X-Forwarded-For: ").append(xForwardedFor); + } + + // Collapse whitespace and newlines into 1 space + final String message = messageBuffer.toString().replaceAll("\\s+", " "); + + session.setAttribute(keyBuffer.toString(), message); + logger.info(message); + } + } + } + } + } + } + + public void destroy() { + } +} Modified: GatorMail/trunk/src/webapp/WEB-INF/web.xml =================================================================== --- GatorMail/trunk/src/webapp/WEB-INF/web.xml 2008-03-27 21:48:09 UTC (rev 34) +++ GatorMail/trunk/src/webapp/WEB-INF/web.xml 2008-03-27 21:49:26 UTC (rev 35) @@ -73,6 +73,15 @@ <url-pattern>*.do</url-pattern> </filter-mapping> + <filter> + <filter-name>LogRemoteIpAddress</filter-name> + <filter-class>edu.ufl.osg.webmail.util.LogRemoteIpAddressFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>LogRemoteIpAddress</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |