[seam-commits] Seam SVN: r8343 - in branches/Seam_2_0: build and 3 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Fri Jun 6 17:12:24 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-06-06 17:12:24 -0400 (Fri, 06 Jun 2008)
New Revision: 8343

Added:
   branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/sanitization.xhtml
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/Header.java
   branches/Seam_2_0/src/test/mail/
Modified:
   branches/Seam_2_0/build.xml
   branches/Seam_2_0/build/mail.pom.xml
   branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/MailTest.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/AddressComponent.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIAttachment.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIBody.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIHeader.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIMessage.java
   branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UISubject.java
Log:
Backport JBSEAM-3071

Modified: branches/Seam_2_0/build/mail.pom.xml
===================================================================
--- branches/Seam_2_0/build/mail.pom.xml	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/build/mail.pom.xml	2008-06-06 21:12:24 UTC (rev 8343)
@@ -59,6 +59,19 @@
       <artifactId>el-api</artifactId>
       <scope>provided</scope>
     </dependency>
+    
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <version>5.6</version>
+      <optional>true</optional>
+      <exclusions>
+        <exclusion>
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
 
   </dependencies>
 

Modified: branches/Seam_2_0/build.xml
===================================================================
--- branches/Seam_2_0/build.xml	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/build.xml	2008-06-06 21:12:24 UTC (rev 8343)
@@ -22,6 +22,7 @@
 	<property name="classes.remoting.dir" value="${classes.dir}/remotingclasses" />
 	<property name="classes.gen.dir" value="${classes.dir}/genclasses" />
 	<property name="classes.test.dir" value="${classes.dir}/testclasses" />
+	<property name="classes.mail.test.dir" value="${classes.dir}/mailtestclasses" />
 
 	<property name="ui.dir" value="${basedir}/ui" />
 	<property name="seamgen.dir" value="${basedir}/seam-gen" />
@@ -38,6 +39,7 @@
 	<property name="src.remoting.dir" value="src/remoting" />
 	<property name="src.test.dir" value="src/test" />
 	<property name="src.unit.test.dir" value="${src.test.dir}/unit" />
+	<property name="src.mail.unit.test.dir" value="${src.test.dir}/mail/unit" />
 
 	<!-- Library directories -->
 	<property name="eejb.conf.dir" value="${basedir}/bootstrap" />
@@ -626,7 +628,7 @@
 	</target>
 
 
-	<target name="testcore" depends="inittestcore,compiletest,getemma" description="Run the core tests">
+	<target name="testcore" depends="inittestcore,compiletest,getemma,unittestmail" description="Run the core tests">
 		<taskdef resource="testngtasks" classpathref="test.core.path" />
 		<testng  outputdir="${test.dir}">
 		   <jvmarg line="-Xmx800M" />
@@ -646,7 +648,37 @@
 		<testexample name="integration" path="${seam.dir}/src/test/integration" message=""/>
 		<echo>You can increase the logging by editing bootstrap/log4j.xml</echo>
 	</target>
+	
+   <target name="inittestmail" depends="build">
+      <init classesdir="${classes.mail.test.dir}" srcdir="${src.mail.unit.test.dir}" modulename="mail" pom="${mail.pom}" scope="test" message="" />
+      <path id="test.mail.compile.path">
+         <path refid="test.mail.path" />
+         <path path="${classes.mail.test.dir}" />
+         <path location="${classes.mail.dir}" />
+      </path>
+   </target>
+	
+   <target name="compiletestmail" depends="inittestmail,select-compiler,antlr">
+      <compile classesdir="${classes.mail.test.dir}" srcdir="${src.mail.unit.test.dir}" classpath="test.mail.compile.path" />
+   </target>
+	
+   <target name="unittestmail" depends="inittestmail,compiletestmail,getemma">
+      <taskdef resource="testngtasks" classpathref="test.mail.path" />
+      <testng outputdir="${test.dir}">
+         <jvmarg value="-Demma.coverage.out.file=${coverage.ec}" />
+         <jvmarg line="-Djava.awt.headless=true" />
+         <classpath>
+            <path path="${classes.mail.test.dir}" />
+            <path location="${classes.mail.dir}" />
+            <path refid="runtime.emma.path" />
+            <path refid="test.mail.path" />
+         </classpath>
+         <xmlfileset dir="${classes.mail.test.dir}" includes="**/testng.xml" />
+      </testng>
+      <echo>You can increase the logging by editing bootstrap/log4j.xml</echo>
+   </target>
 
+
 	<target name="testreport" description="Create a pretty report">
 		<mkdir dir="${report.dir}" />
 		<junitreport todir="${report.dir}">

Modified: branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/MailTest.java
===================================================================
--- branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/MailTest.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/MailTest.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -4,6 +4,7 @@
 import static javax.mail.Message.RecipientType.CC;
 
 import java.io.InputStream;
+import java.util.Enumeration;
 
 import javax.faces.FacesException;
 import javax.faces.context.FacesContext;
@@ -91,6 +92,8 @@
        
     }
     
+    
+    
     @Test
     public void testAttachment() throws Exception
     {
@@ -528,6 +531,40 @@
     }
     
     @Test
+    public void testSanitization() throws Exception
+    {
+        
+        new FacesRequest()
+        {
+
+            @Override
+            protected void updateModelValues() throws Exception
+            {
+                
+            }
+            
+            @Override
+            protected void invokeApplication() throws Exception
+            { 
+                Contexts.getEventContext().set("name", "Pete\nMuir");   
+                MimeMessage renderedMessage = getRenderedMailMessage("/org/jboss/seam/example/mail/test/sanitization.xhtml");
+                assert "Try out".equals(renderedMessage.getSubject());
+                InternetAddress to = (InternetAddress) renderedMessage.getAllRecipients()[0];
+                assert to.getAddress().equals("peter at email.tld");
+                assert to.getPersonal().equals("Pete");
+                assert renderedMessage.getFrom().length == 1;
+                assert renderedMessage.getFrom()[0] instanceof InternetAddress;
+                InternetAddress from = (InternetAddress) renderedMessage.getFrom()[0];
+                assert from.getAddress().equals("peter at example.com");
+                assert from.getPersonal().equals("Pete");
+                assert renderedMessage.getHeader("Pete") != null;
+                assert renderedMessage.getHeader("Pete").length == 1;
+                assert "roll".equals(renderedMessage.getHeader("Pete")[0]);
+            }
+        }.run();
+    }
+    
+    @Test
     public void testTemplating() throws Exception
     {
         

Added: branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/sanitization.xhtml
===================================================================
--- branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/sanitization.xhtml	                        (rev 0)
+++ branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/sanitization.xhtml	2008-06-06 21:12:24 UTC (rev 8343)
@@ -0,0 +1,14 @@
+<m:message xmlns="http://www.w3.org/1999/xhtml"
+           xmlns:m="http://jboss.com/products/seam/mail"
+           xmlns:h="http://java.sun.com/jsf/html">
+    
+          <m:from name="#{name}">peter at example.com
+foo</m:from>
+          <m:to name="#{name}">peter at email.tld
+bar</m:to>
+          <m:subject>Try out
+Seam!</m:subject>
+          <m:header name="#{name}">roll
+over</m:header>
+          <m:body>A mail message to test sanitization</m:body>
+</m:message>
\ No newline at end of file


Property changes on: branches/Seam_2_0/examples/mail/src/org/jboss/seam/example/mail/test/sanitization.xhtml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/AddressComponent.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/AddressComponent.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/AddressComponent.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -25,15 +25,16 @@
    protected InternetAddress getInternetAddress(FacesContext facesContext) throws IOException, AddressException 
    {
       InternetAddress address = new InternetAddress();
-      address.setAddress(getAddress() != null ? getAddress() : encode(facesContext));
+      address.setAddress(new Header(getAddress() != null ? getAddress() : encode(facesContext)).getSanitizedValue());
       String charset = findMessage().getCharset();
+      String personal = new Header(getName()).getSanitizedValue();
       if (charset == null)
       {
-         address.setPersonal(getName());
+         address.setPersonal(personal);
       }
       else
       {
-         address.setPersonal(getName(), charset);
+         address.setPersonal(personal, charset);
       }
       address.validate();
       return address;
@@ -70,7 +71,7 @@
     */
    public String getName()
    {
-      if (address == null)
+      if (name == null)
       {
          return getString("name");
       } 

Added: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/Header.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/Header.java	                        (rev 0)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/Header.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -0,0 +1,82 @@
+package org.jboss.seam.mail.ui;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+
+import javax.mail.internet.MimeUtility;
+
+public class Header
+{
+   
+   private final String name;
+   private final String value;
+   
+   private String sanitizedName;
+   private String sanitizedValue;
+   
+   public Header(String name, String value)
+   {
+      this.name = name;
+      this.value = value;
+   }
+   
+   public Header(String value)
+   {
+      this.value = value;
+      this.name = null;
+   }
+   
+   public String getSanitizedName()
+   {
+      if (sanitizedName == null && name != null)
+      {
+         try
+         {
+            sanitizedName = sanitize(name);
+         }
+         catch (IOException e)
+         {
+            throw new IllegalStateException("Error santizing Header name " + name, e);
+         }
+      }
+      return sanitizedName;
+   }
+   
+   public String getSanitizedValue()
+   {
+      if (sanitizedValue == null && value != null)
+      {
+         try
+         {
+            sanitizedValue = sanitizeValue(value);
+         }
+         catch (IOException e)
+         {
+            throw new IllegalStateException("Error santizing Header " + name + " value " + value, e);
+         }
+      }
+      return sanitizedValue;
+   }
+   
+   /**
+    * Remove any line feed/new line characters
+    * @throws IOException 
+    */
+   public static String sanitize(String value) throws IOException
+   {
+      BufferedReader  reader = new BufferedReader(new StringReader(value));
+      return reader.readLine();
+   }
+   
+   /**
+    * Remove any line feed/new line characters from a (possibly) folded header
+    * @throws IOException 
+    */
+   public static String sanitizeValue(String value) throws IOException
+   {
+      // The user might have folded the header (stupid SMTP idiocy)
+      return sanitize(MimeUtility.unfold(value));
+   }
+
+}


Property changes on: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/Header.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIAttachment.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIAttachment.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIAttachment.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -163,10 +163,10 @@
             MimeBodyPart attachment = new MimeBodyPart();
             // Need to manually set the contentid
             String contentId = RandomStringUtils.randomAlphabetic(20).toLowerCase();
-            attachment.setContentID("<" + contentId + ">");
+            attachment.setContentID(new Header("<" + contentId + ">").getSanitizedValue());
             attachment.setDataHandler(new DataHandler(ds));
-            attachment.setFileName(getName(ds.getName()));
-            attachment.setDisposition(getDisposition());
+            attachment.setFileName(new Header(getName(ds.getName())).getSanitizedValue());
+            attachment.setDisposition(new Header(getDisposition()).getSanitizedValue());
             super.getRootMultipart().addBodyPart(attachment);
             if (getStatus() != null)
             {

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIBody.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIBody.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIBody.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -88,13 +88,13 @@
             throws MessagingException
    {
       MimeBodyPart bodyPart = new MimeBodyPart();
-      bodyPart.setDisposition("inline");
+      bodyPart.setDisposition(new Header("inline").getSanitizedValue());
       String charset = findMessage().getCharset();
       if ( charset != null) 
       {
          //bodyPart.setContent(body, "text/plain; charset="
          //      + charset + "; format=flowed");
-         bodyPart.setText(body, charset);
+         bodyPart.setText(body, new Header(charset).getSanitizedValue());
       } 
       else 
       {
@@ -107,16 +107,16 @@
             throws MessagingException
    {
       MimeBodyPart bodyPart = new MimeBodyPart();
-      bodyPart.setDisposition("inline");
+      bodyPart.setDisposition(new Header("inline").getSanitizedValue());
       String charset = findMessage().getCharset();
       if ( charset != null) 
       {
-         bodyPart.setContent(body, "text/html; charset="
-                  + charset);
+         bodyPart.setContent(body, new Header("text/html; charset="
+                  + charset).getSanitizedValue());
       } 
       else 
       {
-         bodyPart.setContent(body, "text/html");
+         bodyPart.setContent(body, new Header("text/html").getSanitizedValue());
       }
       
       return bodyPart;

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIHeader.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIHeader.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIHeader.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -17,11 +17,16 @@
    {
       try
       {
-         if (getValue() != null) {
-            findMimeMessage().addHeader(getName(), getValue());
-         } else {
-            findMimeMessage().addHeader(getName(), encode(facesContext));
+         if (getValue() != null) 
+         {
+            Header header = new Header(getName(), getValue());
+            findMimeMessage().addHeader(header.getSanitizedName(), header.getSanitizedValue());
          }
+         else 
+         {
+            Header header = new Header(getName(), encode(facesContext));
+            findMimeMessage().addHeader(header.getSanitizedName(), header.getSanitizedValue());
+         }
       }
       catch (MessagingException e)
       {

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIMessage.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIMessage.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UIMessage.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -108,7 +108,8 @@
             }
             if (getPrecedence() != null)
             {
-               getMimeMessage().addHeader("Precedence", getPrecedence());
+               Header header = new Header("Precedence", getPrecedence());
+               getMimeMessage().addHeader(header.getSanitizedName(), header.getSanitizedValue());
             }
          }
          catch (MessagingException e)
@@ -131,8 +132,9 @@
          if (isRequestReadReceipt() && getMimeMessage().getFrom() != null
                   && getMimeMessage().getFrom().length == 1)
          {
-            getMimeMessage().addHeader("Disposition-Notification-To",
-                     getMimeMessage().getFrom()[0].toString());
+            Header header = new Header("Disposition-Notification-To",
+                  getMimeMessage().getFrom()[0].toString());
+            getMimeMessage().addHeader(header.getSanitizedName(), header.getSanitizedValue());
          }
          // Do the send manually, Transport.send gets the wrong transport
          getMimeMessage().saveChanges();

Modified: branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UISubject.java
===================================================================
--- branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UISubject.java	2008-06-06 20:36:35 UTC (rev 8342)
+++ branches/Seam_2_0/src/mail/org/jboss/seam/mail/ui/UISubject.java	2008-06-06 21:12:24 UTC (rev 8343)
@@ -22,11 +22,11 @@
          String charset = findMessage().getCharset();
          if (charset == null)
          {
-            findMimeMessage().setSubject(subject);
+            findMimeMessage().setSubject(new Header(subject).getSanitizedValue());
          }
          else
          {
-            findMimeMessage().setSubject(subject, charset);
+            findMimeMessage().setSubject(new Header(subject).getSanitizedValue(), charset);
          }
       }
       catch (MessagingException e)




More information about the seam-commits mailing list