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);