You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2009/07/13 12:05:49 UTC

svn commit: r793525 - in /incubator/click/trunk/click/framework/src/org/apache/click: service/XmlConfigService.java util/ClickUtils.java

Author: sabob
Date: Mon Jul 13 10:05:49 2009
New Revision: 793525

URL: http://svn.apache.org/viewvc?rev=793525&view=rev
Log:
added method that determines if resources can be deployed or not

Modified:
    incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
    incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java

Modified: incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java?rev=793525&r1=793524&r2=793525&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java Mon Jul 13 10:05:49 2009
@@ -1130,10 +1130,11 @@
     private void deployFiles(Element rootElm) throws Exception {
 
         // Deploy application files if they are not already present.
-        // Only deploy if servletContext.getRealPath() returns a valid path.
-        boolean resourcesDeployable = (servletContext.getRealPath("/") != null);
+        // Only deploy if writes are allowed
+        boolean isResourcesDeployable =
+            ClickUtils.isResourcesDeployable(servletContext);
 
-        if (resourcesDeployable) {
+        if (isResourcesDeployable) {
             deployControls(getResourceRootElement("/click-controls.xml"));
             deployControls(getResourceRootElement("/extras-controls.xml"));
             deployControls(rootElm);

Modified: incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java?rev=793525&r1=793524&r2=793525&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java Mon Jul 13 10:05:49 2009
@@ -2405,6 +2405,37 @@
         return buffer.toString();
     }
 
+    /**
+     * Returns true if Click resources (JavaScript, CSS, images etc) packaged
+     * in jars can be deployed to the web application folder, false otherwise.
+     * <p/>
+     * This method will return false in restricted environments where write
+     * access to the underlying file system is disallowed. Examples where
+     * write access is not allowed include the WebLogic JEE server (this can be
+     * changed though) and Google App Engine.
+     *
+     * @param servletContext the application servlet context
+     * @return true if writes are allowed, false otherwise
+     */
+    public static boolean isResourcesDeployable(ServletContext servletContext) {
+        try {
+            boolean canWrite = (servletContext.getRealPath("/") != null);
+            if (!canWrite) {
+                return false;
+            }
+
+            // Since Google App Engine returns a value for getRealPath, check
+            // SecurityManager if writes are allowed
+            SecurityManager security = System.getSecurityManager();
+            if (security != null) {
+        		    security.checkWrite("/click");
+            }
+            return true;
+        } catch (Throwable e) {
+            return false;
+        }
+    }
+
     // -------------------------------------------------------- Package Methods
 
     /**