Scarab commit: svn commit: r10750 - trunk: src/java/org/tigris/scarab/util src/webapp/WEB-INF/templates/email/notification xdocs

Hussayn Dabbous <[email protected]>
Newsgroups gmane.comp.java.scarab.cvs
Message-ID <[email protected]>
Author: dabbous
Date: 2009-06-05 07:09:17-0700
New Revision: 10750

Modified:
   trunk/src/java/org/tigris/scarab/util/EmailLink.java
   trunk/src/java/org/tigris/scarab/util/ScarabConstants.java
   trunk/src/webapp/WEB-INF/templates/email/notification/IssueActivity.vm
   trunk/xdocs/scarab_properties.xml

Log:
SCB2954 added solution for secure access to Scarab

Modified: trunk/src/java/org/tigris/scarab/util/EmailLink.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/util/EmailLink.java?view=diff&pathrev=10750&r1=10749&r2=10750
==============================================================================
--- trunk/src/java/org/tigris/scarab/util/EmailLink.java	(original)
+++ trunk/src/java/org/tigris/scarab/util/EmailLink.java	2009-06-05 07:09:17-0700
@@ -49,9 +49,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.CompositeConfiguration;
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.fulcrum.pool.InitableRecyclable;
 import org.apache.torque.TorqueException;
+import org.apache.turbine.Turbine;
 import org.tigris.scarab.om.Issue;
 import org.tigris.scarab.om.Module;
 import org.tigris.scarab.om.GlobalParameterManager;
@@ -84,6 +88,11 @@
 
     /** HTTPS protocol. */
     public static final String HTTPS = "https";
+    
+    /**
+     * Used to resolve configuration templates with dynamic properties:
+     */
+    private Configuration emailConfig;
 
     /**
      * Constructor to allow factory instantiation of 
@@ -450,27 +459,43 @@
      */
     public String toString()
     {
-        StringBuffer output = new StringBuffer();
-
-        output.append(serverUrl());
-
-        if (isBaseName) {
-            try {
-                output.append("/" + GlobalParameterManager.getString("scarab.context"));
-                isBaseName = false;
-            }
-            catch (TorqueException te) {
-            }
-        } else {
-            output.append(getScriptName());
+        String result = "";
+        if(emailConfig != null)
+        {
+            // check if an alternate notification link shall be generated.
+            // if result is empty, we will create the default notification link
+            // Note, this construction comes into play if you want to uise Scarab
+            // behind a secure access system (e.g. Juniper SA ...)
+            result = emailConfig.getString("email.notification.uri", "");
         }
-
-        if (this.hasPathInfo())
+        
+        if (result.length() == 0)
         {
-            output.append('/');
-            output.append(renderPathInfo(this.pathInfo));
+            // Create a notificationLink similar to the 
+            // short link used for sessionless access to an issue
+            StringBuffer output = new StringBuffer();
+    
+            output.append(serverUrl());
+    
+            if (isBaseName) {
+                try {
+                    output.append("/" + GlobalParameterManager.getString("scarab.context"));
+                    isBaseName = false;
+                }
+                catch (TorqueException te) {
+                }
+            } else {
+                output.append(getScriptName());
+            }
+    
+            if (this.hasPathInfo())
+            {
+                output.append('/');
+                output.append(renderPathInfo(this.pathInfo));
+            }
+            result = output.toString();
         }
-        return output.toString();
+        return result;
     }
 
     // Constructs a server URL for this Scarab instance
@@ -546,6 +571,17 @@
     public EmailLink getIssueIdLink(Issue issue)
         throws Exception
     {
+        /**
+         * The following construction adds the issueId to a local Configuration instance.
+         * The so emailConfig will later be used to resolve configuration template which
+         * may contain the issueId as property key. See the toString() method for further details.
+         */
+        CompositeConfiguration compositConfig = new CompositeConfiguration(Turbine.getConfiguration());
+        emailConfig = compositConfig;
+        Configuration dynamicConfig = new BaseConfiguration();
+        compositConfig.addConfiguration(dynamicConfig);
+        dynamicConfig.addProperty("issueId", issue.getUniqueId());
+        
         this.addPathInfo(ScarabConstants.ID, issue.getUniqueId());
         return this;
     }

Modified: trunk/src/java/org/tigris/scarab/util/ScarabConstants.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/util/ScarabConstants.java?view=diff&pathrev=10750&r1=10749&r2=10750
==============================================================================
--- trunk/src/java/org/tigris/scarab/util/ScarabConstants.java	(original)
+++ trunk/src/java/org/tigris/scarab/util/ScarabConstants.java	2009-06-05 07:09:17-0700
@@ -275,7 +275,20 @@
      * SMTP send.
      */
     final String JAVAMAIL_DEBUG_KEY = "system.mail.smtp.debug";
-    
+        
+    /**
+     * If this property is set, the notification URI will be derived from this template.
+     * This is used when the online URL differs from the url to be used in the EMail notification.
+     * One particular use case is when Scarab runs behind a Secure Access system (e.g. Juniper SA)
+     * In that special case, the email_notification_urio would be set to:
+     * 
+     * email.notification.uri=https://${securehost}/${scarab.context}/issues/id/${issueId},DanaInfo=${scarab.http.domain},Port=${scarab.http.port}
+     * 
+     * where ${securehost} is the secure access host
+     */
+    final String EMAIL_NOTIFICATION_URI = 
+        Turbine.getConfiguration().getString("email.notification.uri", "");
+
     final Integer INTEGER_0 = new Integer(0);
 
     /**
@@ -314,10 +327,10 @@
         Turbine.getConfiguration().getString("scarab.issue.comment.renderer", "plaintext");
 
     // Http parameters
-    public static final String HTTP_DOMAIN = "scarab.http.domain";
-    public static final String HTTP_SCHEME = "scarab.http.scheme";
+    public static final String HTTP_DOMAIN      = "scarab.http.domain";
+    public static final String HTTP_SCHEME      = "scarab.http.scheme";
     public static final String HTTP_SCRIPT_NAME = "scarab.http.scriptname";
-    public static final String HTTP_PORT = "scarab.http.port";
+    public static final String HTTP_PORT        = "scarab.http.port";
     
     // Condition editor constants
     public static int TRANSITION_OBJECT = 0;

Modified: trunk/src/webapp/WEB-INF/templates/email/notification/IssueActivity.vm
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/webapp/WEB-INF/templates/email/notification/IssueActivity.vm?view=diff&pathrev=10750&r1=10749&r2=10750
==============================================================================
--- trunk/src/webapp/WEB-INF/templates/email/notification/IssueActivity.vm	(original)
+++ trunk/src/webapp/WEB-INF/templates/email/notification/IssueActivity.vm	2009-06-05 07:09:17-0700
@@ -15,7 +15,7 @@
  * o $multipleActivity: "true" or "false", depending on the notification scoping
  *   several activities or just one.
 *#
-#set ($issueURL    = "$link.getIssueIdLink($issue)")
+#set ($issueURL    = $link.getIssueIdLink($issue))
 #set ($user        = $issue.ModifiedBy)
 #set ($defaultText = $issue.DefaultText)
 #set ($module      = $issue.Module)

Modified: trunk/xdocs/scarab_properties.xml
Url: http://scarab.tigris.org/source/browse/scarab/trunk/xdocs/scarab_properties.xml?view=diff&pathrev=10750&r1=10749&r2=10750
==============================================================================
--- trunk/xdocs/scarab_properties.xml	(original)
+++ trunk/xdocs/scarab_properties.xml	2009-06-05 07:09:17-0700
@@ -1233,8 +1233,9 @@
 		  If the property is empty, the default scarab email link will be generated.
 		  The working template for Juniper-SA is:
 		  
-		  email.notification.uri=${email.notification.host}:${email.notification.port}/${scarab.context}/issues/id/${issueId},DanaInfo=${scarab.http.domain},Port=${scarab.http.port}
+		  email.notification.uri=${email.notification.host}:${email.notification.port}/${scarab.context}/issues/id/${issueId}\,DanaInfo=${scarab.http.domain}\,Port=${scarab.http.port}
 
+          Note that you must escape the commas, otherwise the string will be interpreted as a comma separated list of values!
         </comment>
         <type>Runtime</type>
          <customization modification="optional">advanced</customization>

------------------------------------------------------
http://scarab.tigris.org/ds/viewMessage.do?dsForumId=3577&dsMessageId=2359715
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.