Remove old ContactMailServlet and servlet mappings.
This commit is contained in:
parent
d73c30673a
commit
cd439b8aaa
3 changed files with 0 additions and 371 deletions
|
@ -1020,18 +1020,6 @@
|
||||||
<url-pattern>/dwr/*</url-pattern>
|
<url-pattern>/dwr/*</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
<!-- Deprecated servlet (still used in Datastar) - retain temporarily for testing and comparison. -->
|
|
||||||
<servlet>
|
|
||||||
<servlet-name>sendmail</servlet-name>
|
|
||||||
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.ContactMailServlet</servlet-class>
|
|
||||||
<load-on-startup>5</load-on-startup>
|
|
||||||
</servlet>
|
|
||||||
<servlet-mapping>
|
|
||||||
<servlet-name>sendmail</servlet-name>
|
|
||||||
<url-pattern>/sendmail</url-pattern>
|
|
||||||
</servlet-mapping>
|
|
||||||
<!-- end deprecated servlet -->
|
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>sendMail</servlet-name>
|
<servlet-name>sendMail</servlet-name>
|
||||||
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.ContactMailController</servlet-class>
|
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.ContactMailController</servlet-class>
|
||||||
|
|
|
@ -1,352 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller;
|
|
||||||
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import javax.mail.Message;
|
|
||||||
import javax.mail.MessagingException;
|
|
||||||
import javax.mail.SendFailedException;
|
|
||||||
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.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory;
|
|
||||||
|
|
||||||
public class ContactMailServlet extends VitroHttpServlet {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(ContactMailServlet.class);
|
|
||||||
|
|
||||||
private final static String CONFIRM_PAGE = "/templates/parts/thankyou.jsp";
|
|
||||||
private final static String ERR_PAGE = "/templates/parts/contact_err.jsp";
|
|
||||||
private final static String SPAM_MESSAGE = "Your message was flagged as spam.";
|
|
||||||
private final static String EMAIL_BACKUP_FILE_PATH = "/WEB-INF/LatestMessage.html";
|
|
||||||
|
|
||||||
private final static String WEB_USERNAME_PARAM = "webusername";
|
|
||||||
private final static String WEB_USEREMAIL_PARAM = "webuseremail";
|
|
||||||
private final static String COMMENTS_PARAM = "s34gfd88p9x1";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doGet( HttpServletRequest request, HttpServletResponse response )
|
|
||||||
throws ServletException, IOException {
|
|
||||||
|
|
||||||
VitroRequest vreq = new VitroRequest(request);
|
|
||||||
|
|
||||||
ApplicationBean appBean = vreq.getAppBean();
|
|
||||||
|
|
||||||
String statusMsg = null; // holds the error status
|
|
||||||
|
|
||||||
if (!FreemarkerEmailFactory.isConfigured(vreq)) {
|
|
||||||
statusMsg = "This application has not yet been configured to send mail. "
|
|
||||||
+ "Email properties must be specified in the configuration properties file.";
|
|
||||||
redirectToError(response, statusMsg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String webusername = vreq.getParameter(WEB_USERNAME_PARAM);
|
|
||||||
String webuseremail = vreq.getParameter(WEB_USEREMAIL_PARAM);
|
|
||||||
String comments = vreq.getParameter(COMMENTS_PARAM);
|
|
||||||
|
|
||||||
String validationMessage = validateInput(webusername, webuseremail,
|
|
||||||
comments);
|
|
||||||
if (validationMessage != null) {
|
|
||||||
redirectToError(response, validationMessage);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
webusername = webusername.trim();
|
|
||||||
webuseremail = webuseremail.trim();
|
|
||||||
comments = comments.trim();
|
|
||||||
|
|
||||||
String spamReason = null;
|
|
||||||
|
|
||||||
String originalReferer = (String) request.getSession()
|
|
||||||
.getAttribute("commentsFormReferer");
|
|
||||||
if (originalReferer != null) {
|
|
||||||
request.getSession().removeAttribute("commentsFormReferer");
|
|
||||||
/* does not support legitimate clients that don't send the Referer header
|
|
||||||
String referer = request.getHeader("Referer");
|
|
||||||
if (referer == null ||
|
|
||||||
(referer.indexOf("comments") <0
|
|
||||||
&& referer.indexOf("correction") <0) ) {
|
|
||||||
spamReason = "The form was not submitted from the " +
|
|
||||||
"Contact Us or Corrections page.";
|
|
||||||
statusMsg = SPAM_MESSAGE;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
} else {
|
|
||||||
originalReferer = "none";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spamReason == null) {
|
|
||||||
spamReason = checkForSpam(comments);
|
|
||||||
if (spamReason != null) {
|
|
||||||
statusMsg = SPAM_MESSAGE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String formType = vreq.getParameter("DeliveryType");
|
|
||||||
String[] deliverToArray = null;
|
|
||||||
int recipientCount = 0;
|
|
||||||
String deliveryfrom = null;
|
|
||||||
|
|
||||||
if ("comment".equals(formType)) {
|
|
||||||
if (appBean.getContactMail() == null || appBean.getContactMail().trim().length()==0) {
|
|
||||||
log.error("No contact mail address defined in current application");
|
|
||||||
throw new Error(
|
|
||||||
"To establish the Contact Us mail capability the system administrators must "
|
|
||||||
+ "specify an email address in the current portal.");
|
|
||||||
} else {
|
|
||||||
deliverToArray = appBean.getContactMail().split(",");
|
|
||||||
}
|
|
||||||
deliveryfrom = "Message from the "+appBean.getApplicationName()+" Contact Form";
|
|
||||||
} else if ("correction".equals(formType)) {
|
|
||||||
if (appBean.getCorrectionMail() == null || appBean.getCorrectionMail().trim().length()==0) {
|
|
||||||
log.error("Expecting one or more correction email addresses to be specified in current application; will attempt to use contact mail address");
|
|
||||||
if (appBean.getContactMail() == null || appBean.getContactMail().trim().length()==0) {
|
|
||||||
log.error("No contact mail address or correction mail address defined in current application");
|
|
||||||
} else {
|
|
||||||
deliverToArray = appBean.getContactMail().split(",");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
deliverToArray = appBean.getCorrectionMail().split(",");
|
|
||||||
}
|
|
||||||
deliveryfrom = "Message from the "+appBean.getApplicationName()+" Correction Form (ARMANN-nospam)";
|
|
||||||
} else {
|
|
||||||
deliverToArray = appBean.getContactMail().split(",");
|
|
||||||
statusMsg = SPAM_MESSAGE ;
|
|
||||||
spamReason = "The form specifies no delivery type.";
|
|
||||||
}
|
|
||||||
recipientCount=(deliverToArray == null) ? 0 : deliverToArray.length;
|
|
||||||
if (recipientCount == 0) {
|
|
||||||
log.error("recipientCount is 0 when DeliveryType specified as \""+formType+"\"");
|
|
||||||
throw new Error(
|
|
||||||
"To establish the Contact Us mail capability the system administrators must "
|
|
||||||
+ "specify at least one email address in the current portal.");
|
|
||||||
}
|
|
||||||
|
|
||||||
String msgText = composeEmail(webusername, webuseremail, comments,
|
|
||||||
deliveryfrom, originalReferer, request.getRemoteAddr());
|
|
||||||
|
|
||||||
// debugging
|
|
||||||
PrintWriter outFile = new PrintWriter
|
|
||||||
(new FileWriter(request.getSession().getServletContext()
|
|
||||||
.getRealPath(EMAIL_BACKUP_FILE_PATH),true)); //autoflush
|
|
||||||
writeBackupCopy(outFile, msgText, spamReason);
|
|
||||||
|
|
||||||
Session s = FreemarkerEmailFactory.getEmailSession(vreq);
|
|
||||||
//s.setDebug(true);
|
|
||||||
try {
|
|
||||||
|
|
||||||
if (spamReason == null) {
|
|
||||||
sendMessage(s, webuseremail, deliverToArray, deliveryfrom,
|
|
||||||
recipientCount, msgText);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (AddressException e) {
|
|
||||||
statusMsg = "Please supply a valid email address.";
|
|
||||||
outFile.println( statusMsg );
|
|
||||||
outFile.println( e.getMessage() );
|
|
||||||
} catch (SendFailedException e) {
|
|
||||||
statusMsg = "The system was unable to deliver your mail. Please try again later. [SEND FAILED]";
|
|
||||||
outFile.println( statusMsg );
|
|
||||||
outFile.println( e.getMessage() );
|
|
||||||
} catch (MessagingException e) {
|
|
||||||
statusMsg = "The system was unable to deliver your mail. Please try again later. [MESSAGING]";
|
|
||||||
outFile.println( statusMsg );
|
|
||||||
outFile.println( e.getMessage() );
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
outFile.flush();
|
|
||||||
outFile.close();
|
|
||||||
|
|
||||||
// Redirect to the appropriate confirmation page
|
|
||||||
if (statusMsg == null && spamReason == null) {
|
|
||||||
// message was sent successfully
|
|
||||||
redirectToConfirmation(response, statusMsg);
|
|
||||||
} else {
|
|
||||||
// exception occurred
|
|
||||||
redirectToError( response, statusMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doPost( HttpServletRequest request, HttpServletResponse response )
|
|
||||||
throws ServletException, IOException
|
|
||||||
{
|
|
||||||
doGet( request, response );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void redirectToConfirmation(HttpServletResponse response,
|
|
||||||
String statusMsg) throws IOException {
|
|
||||||
response.sendRedirect( "test?bodyJsp=" + CONFIRM_PAGE + "&home=" );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void redirectToError(HttpServletResponse response, String statusMsg)
|
|
||||||
throws IOException {
|
|
||||||
response.sendRedirect("test?bodyJsp=" + ERR_PAGE + "&ERR=" + statusMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Intended to mangle url so it can get through spam filtering
|
|
||||||
* http://host/dir/servlet?param=value -> host: dir/servlet?param=value */
|
|
||||||
public String stripProtocol( String in ){
|
|
||||||
if( in == null )
|
|
||||||
return "";
|
|
||||||
else
|
|
||||||
return in.replaceAll("http://", "host: " );
|
|
||||||
}
|
|
||||||
|
|
||||||
private String composeEmail(String webusername, String webuseremail,
|
|
||||||
String comments, String deliveryfrom,
|
|
||||||
String originalReferer, String ipAddr) {
|
|
||||||
|
|
||||||
StringBuffer msgBuf = new StringBuffer();
|
|
||||||
// contains the intro copy for the body of the email message
|
|
||||||
|
|
||||||
String lineSeparator = System.getProperty("line.separator");
|
|
||||||
// \r\n on windows, \n on unix
|
|
||||||
|
|
||||||
// from MyLibrary
|
|
||||||
msgBuf.setLength(0);
|
|
||||||
msgBuf.append("Content-Type: text/html; charset='us-ascii'" + lineSeparator);
|
|
||||||
msgBuf.append("<html>" + lineSeparator );
|
|
||||||
msgBuf.append("<head>" + lineSeparator );
|
|
||||||
msgBuf.append("<style>a {text-decoration: none}</style>" + lineSeparator );
|
|
||||||
msgBuf.append("<title>" + deliveryfrom + "</title>" + lineSeparator );
|
|
||||||
msgBuf.append("</head>" + lineSeparator );
|
|
||||||
msgBuf.append("<body>" + lineSeparator );
|
|
||||||
msgBuf.append("<h4>" + deliveryfrom + "</h4>" + lineSeparator );
|
|
||||||
msgBuf.append("<h4>From: "+webusername +" (" + webuseremail + ")" +
|
|
||||||
" at IP address " + ipAddr + "</h4>"+lineSeparator);
|
|
||||||
|
|
||||||
if (!(originalReferer == null || originalReferer.equals("none"))){
|
|
||||||
//The spam filter that is being used by the listsrv is rejecting <a href="...
|
|
||||||
//so try with out the markup, if that sill doesn't work,
|
|
||||||
//uncomment the following line to strip the http://
|
|
||||||
//msgBuf.append("<p><i>likely viewing page " + stripProtocol(originalReferer) );
|
|
||||||
msgBuf.append("<p><i>likely viewing page " + originalReferer );
|
|
||||||
}
|
|
||||||
|
|
||||||
msgBuf.append(lineSeparator + "</i></p><h3>Comments:</h3>" + lineSeparator );
|
|
||||||
if (comments==null || comments.equals("")) {
|
|
||||||
msgBuf.append("<p>BLANK MESSAGE</p>");
|
|
||||||
} else {
|
|
||||||
msgBuf.append("<p>"+comments+"</p>");
|
|
||||||
}
|
|
||||||
msgBuf.append("</body>" + lineSeparator );
|
|
||||||
msgBuf.append("</html>" + lineSeparator );
|
|
||||||
|
|
||||||
return msgBuf.toString();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeBackupCopy(PrintWriter outFile, String msgText,
|
|
||||||
String spamReason) {
|
|
||||||
Calendar cal = Calendar.getInstance();
|
|
||||||
outFile.println("<hr/>");
|
|
||||||
outFile.println();
|
|
||||||
outFile.println("<p>"+cal.getTime()+"</p>");
|
|
||||||
outFile.println();
|
|
||||||
if (spamReason != null) {
|
|
||||||
outFile.println("<p>REJECTED - SPAM</p>");
|
|
||||||
outFile.println("<p>"+spamReason+"</p>");
|
|
||||||
outFile.println();
|
|
||||||
}
|
|
||||||
outFile.print( msgText );
|
|
||||||
outFile.println();
|
|
||||||
outFile.println();
|
|
||||||
outFile.flush();
|
|
||||||
// outFile.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendMessage(Session s, String webuseremail,
|
|
||||||
String[] deliverToArray, String deliveryfrom, int recipientCount,
|
|
||||||
String msgText)
|
|
||||||
throws AddressException, SendFailedException, MessagingException {
|
|
||||||
// Construct the message
|
|
||||||
MimeMessage msg = new MimeMessage( s );
|
|
||||||
//System.out.println("trying to send message from servlet");
|
|
||||||
|
|
||||||
// Set the from address
|
|
||||||
msg.setFrom( new InternetAddress( webuseremail ));
|
|
||||||
|
|
||||||
// Set the recipient address
|
|
||||||
|
|
||||||
if (recipientCount>0){
|
|
||||||
InternetAddress[] address=new InternetAddress[recipientCount];
|
|
||||||
for (int i=0; i<recipientCount; i++){
|
|
||||||
address[i] = new InternetAddress(deliverToArray[i]);
|
|
||||||
}
|
|
||||||
msg.setRecipients( Message.RecipientType.TO, address );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the subject and text
|
|
||||||
msg.setSubject( deliveryfrom );
|
|
||||||
|
|
||||||
// add the multipart to the message
|
|
||||||
msg.setContent(msgText,"text/html");
|
|
||||||
|
|
||||||
// set the Date: header
|
|
||||||
msg.setSentDate( new Date() );
|
|
||||||
|
|
||||||
Transport.send( msg ); // try to send the message via smtp - catch error exceptions
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private String validateInput(String webusername, String webuseremail,
|
|
||||||
String comments) {
|
|
||||||
|
|
||||||
if( webusername == null || "".equals(webusername.trim()) ){
|
|
||||||
return "A proper webusername field was not found in the form submitted.";
|
|
||||||
}
|
|
||||||
|
|
||||||
if( webuseremail == null || "".equals(webuseremail.trim()) ){
|
|
||||||
return "A proper webuser email field was not found in the form submitted.";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (comments==null || "".equals(comments.trim())) {
|
|
||||||
return "The proper comments field was not found in the form submitted.";
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param request
|
|
||||||
* @return null if message not judged to be spam, otherwise a String
|
|
||||||
* containing the reason the message was flagged as spam.
|
|
||||||
*/
|
|
||||||
private String checkForSpam(String comments) {
|
|
||||||
|
|
||||||
/* if this blog markup is found, treat comment as blog spam */
|
|
||||||
if (
|
|
||||||
(comments.indexOf("[/url]") > -1
|
|
||||||
|| comments.indexOf("[/URL]") > -1
|
|
||||||
|| comments.indexOf("[url=") > -1
|
|
||||||
|| comments.indexOf("[URL=") > -1)) {
|
|
||||||
return "The message contained blog link markup.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if message is absurdly short, treat as blog spam */
|
|
||||||
if (comments.length()<15) {
|
|
||||||
return "The message was too short.";
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,26 +2,19 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.openrdf.model.URI;
|
import org.openrdf.model.URI;
|
||||||
import org.openrdf.model.impl.URIImpl;
|
import org.openrdf.model.impl.URIImpl;
|
||||||
|
|
||||||
import com.hp.hpl.jena.rdf.model.Literal;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.DropDataPropStmt;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.EditDataPropStmt;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.EditDataPropStmt;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl;
|
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyStatementDao;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.EditLiteral;
|
import edu.cornell.mannlib.vitro.webapp.edit.EditLiteral;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.RdfLiteralHash;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.RdfLiteralHash;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue