You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2014/06/25 21:07:44 UTC

svn commit: r1605559 - in /sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl: SlingConfiguration.java SlingFileSystemFactory.java SlingFileSystemView.java SlingFtpServer.java SlingUser.java SlingUserManager.java

Author: fmeschbe
Date: Wed Jun 25 19:07:44 2014
New Revision: 1605559

URL: http://svn.apache.org/r1605559
Log:
SLING-3688 Apply slightly modified patch by Amrit Verma (Thank you very much!)

- Adds configuration property to define the default home folder
- Adds support to overwrite the home folder on a per-user basis

Modified:
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingConfiguration.java
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemFactory.java
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemView.java
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFtpServer.java
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUser.java
    sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUserManager.java

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingConfiguration.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingConfiguration.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingConfiguration.java Wed Jun 25 19:07:44 2014
@@ -80,6 +80,10 @@ public class SlingConfiguration implemen
 
     static final int PROP_MAX_DOWNLOAD_DEFAULT = 0;
 
+    static final String PROP_FTP_HOME = "home";
+
+    static final String PROP_FTP_HOME_DEFAULT = "/";
+
     public SlingConfiguration(final Map<String, Object> config) {
         this.config = config;
     }
@@ -142,6 +146,10 @@ public class SlingConfiguration implemen
         return get(PROP_MAX_UPLOAD, PROP_MAX_UPLOAD_DEFAULT);
     }
 
+    String getFtpHome() {
+        return get(PROP_FTP_HOME, PROP_FTP_HOME_DEFAULT);
+    }
+
     boolean get(final String name, final boolean defaultValue) {
         return PropertiesUtil.toBoolean(this.config.get(name), defaultValue);
     }
@@ -149,4 +157,8 @@ public class SlingConfiguration implemen
     int get(final String name, final int defaultValue) {
         return PropertiesUtil.toInteger(this.config.get(name), defaultValue);
     }
+
+    String get(final String name, final String defaultValue) {
+        return PropertiesUtil.toString(this.config.get(name), defaultValue);
+    }
 }

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemFactory.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemFactory.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemFactory.java Wed Jun 25 19:07:44 2014
@@ -27,7 +27,7 @@ public class SlingFileSystemFactory impl
 
     public FileSystemView createFileSystemView(User user) throws FtpException {
         if (user instanceof SlingUser) {
-            return new SlingFileSystemView(((SlingUser) user).getResolver());
+            return new SlingFileSystemView(((SlingUser) user));
         }
 
         throw new FtpException("User " + user.getName() + " of type " + user.getClass() + " not supported");

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemView.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemView.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemView.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFileSystemView.java Wed Jun 25 19:07:44 2014
@@ -26,12 +26,12 @@ import org.apache.sling.api.resource.Res
 
 public class SlingFileSystemView implements FileSystemView {
 
-    private final ResourceResolver resolver;
+    private final SlingUser slingUser;
 
     private FtpFile cwd;
 
-    public SlingFileSystemView(final ResourceResolver resolver) {
-        this.resolver = resolver;
+    public SlingFileSystemView(final SlingUser user) {
+        this.slingUser = user;
         this.cwd = getHomeDirectory();
     }
 
@@ -53,7 +53,7 @@ public class SlingFileSystemView impleme
     }
 
     public void dispose() {
-        this.resolver.close();
+        this.getResovler().close();
     }
 
     public FtpFile getFile(String path) {
@@ -62,16 +62,16 @@ public class SlingFileSystemView impleme
         }
 
         path = ResourceUtil.normalize(path);
-        Resource res = this.resolver.getResource(path);
+        Resource res = this.getResovler().getResource(path);
         if (res != null) {
             return new SlingFtpFile(res);
         }
 
-        return new SlingFtpFile(path, this.resolver);
+        return new SlingFtpFile(path, this.getResovler());
     }
 
     public FtpFile getHomeDirectory() {
-        return getFile("/");
+        return getFile(slingUser.getHomeDirectory());
     }
 
     public FtpFile getWorkingDirectory() {
@@ -83,4 +83,8 @@ public class SlingFileSystemView impleme
         return false;
     }
 
+    private ResourceResolver getResovler() {
+        return this.slingUser.getResolver();
+    }
+
 }

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFtpServer.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFtpServer.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFtpServer.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingFtpServer.java Wed Jun 25 19:07:44 2014
@@ -148,7 +148,15 @@ import org.slf4j.LoggerFactory;
                 + "Setting this to zero disables this limitation. "
                 + "This property can be configured on a per user basis setting the numeric "
                 + SlingUserManager.FTP_MAX_UPLOAD_RATE + " user property. The default value is "
-                + SlingConfiguration.PROP_MAX_UPLOAD_DEFAULT)
+                + SlingConfiguration.PROP_MAX_UPLOAD_DEFAULT),
+    @Property(
+            name = SlingConfiguration.PROP_FTP_HOME,
+            value = SlingConfiguration.PROP_FTP_HOME_DEFAULT,
+            label = "Default Ftp Home folder",
+            description = "The default folder where a user will be taken to after successful log in. "
+                    + "This property can be configured on a per user basis setting the string "
+                    + SlingUserManager.FTP_HOME_FOLDER + " user property. The default value is "
+                    + SlingConfiguration.PROP_FTP_HOME_DEFAULT)
 })
 public class SlingFtpServer {
 

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUser.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUser.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUser.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUser.java Wed Jun 25 19:07:44 2014
@@ -33,12 +33,14 @@ public class SlingUser implements User {
 
     private final String name;
 
-    private int maxIdleTimeSec = 0; // no limit
+    private int maxIdleTimeSec = SlingConfiguration.PROP_MAX_IDLE_TIME_DEFAULT;
 
-    private boolean isEnabled = true;
+    private boolean isEnabled = SlingConfiguration.PROP_ENABLED_DEFAULT;
 
     private List<Authority> authorities;
 
+    private String homeDirectory = SlingConfiguration.PROP_FTP_HOME_DEFAULT;
+
     SlingUser(final String name, final ResourceResolver resolver) {
         this.resolver = resolver;
         this.name = name;
@@ -111,8 +113,12 @@ public class SlingUser implements User {
         return this.isEnabled;
     }
 
+    void setHomeDirectory(final String homeDirectory) {
+        this.homeDirectory = homeDirectory;
+    }
+
     public String getHomeDirectory() {
-        return "/";
+        return homeDirectory;
     }
 
     public void setMaxIdleTimeSec(int maxIdleTimeSec) {

Modified: sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUserManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUserManager.java?rev=1605559&r1=1605558&r2=1605559&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUserManager.java (original)
+++ sling/trunk/contrib/extensions/ftpserver/src/main/java/org/apache/sling/ftpserver/impl/SlingUserManager.java Wed Jun 25 19:07:44 2014
@@ -71,6 +71,8 @@ public class SlingUserManager implements
 
     static final String FTP_MAX_UPLOAD_RATE = FTP_PROPERTY_FOLDER + "/maxUploadRate";
 
+    static final String FTP_HOME_FOLDER = FTP_PROPERTY_FOLDER + "/home";
+
     private final ResourceResolverFactory rrFactory;
 
     private final SlingConfiguration config;
@@ -219,6 +221,7 @@ public class SlingUserManager implements
 
         user.setEnabled(getProperty(repoUser, FTP_ENABLED, config.isEnabled()));
         user.setMaxIdleTimeSec(getProperty(repoUser, FTP_MAX_IDLE_TIME_SEC, config.getMaxIdelTimeSec()));
+        user.setHomeDirectory(getProperty(repoUser, FTP_HOME_FOLDER, config.getFtpHome()));
 
         List<Authority> list = new ArrayList<Authority>();
         list.add(new ConcurrentLoginPermission(//
@@ -234,6 +237,19 @@ public class SlingUserManager implements
         return user;
     }
 
+    private String getProperty(final Authorizable a, final String prop, final String defaultValue) {
+        try {
+            Value[] vals = a.getProperty(prop);
+            if (vals != null && vals.length > 0) {
+                return vals[0].getString();
+            }
+        } catch (RepositoryException re) {
+            // ignore
+        }
+
+        return defaultValue;
+    }
+
     private int getProperty(final Authorizable a, final String prop, final int defaultValue) {
         try {
             Value[] vals = a.getProperty(prop);