Author: ngn Date: Sat Oct 18 22:33:49 2008 New Revision: 705958 URL: http://svn.apache.org/viewvc?rev=705958&view=rev Log: Finishing up bundle config Making PropertiesUserManager load from classpath if file not found on file system, useful when embedding into for example web applications Cleaning up some "throws"
Modified: mina/ftpserver/trunk/core/pom.xml mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServerFactory.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFileSystemView.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManagerFactory.java mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FileUserManagerConfigTest.java mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml Modified: mina/ftpserver/trunk/core/pom.xml URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/pom.xml?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/pom.xml (original) +++ mina/ftpserver/trunk/core/pom.xml Sat Oct 18 22:33:49 2008 @@ -70,14 +70,17 @@ org.apache.ftpserver.filesystem.nativefs, org.apache.ftpserver.ftpletcontainer, org.apache.ftpserver.listener, org.apache.ftpserver.main, - org.apache.ftpserver.message, org.apache.ftpserver.ssl + org.apache.ftpserver.message, org.apache.ftpserver.ssl, + org.apache.ftpserver.usermanager </Export-Package> <Private-Package> org.apache.ftpserver.command.impl, + org.apache.ftpserver.command.impl.listing, org.apache.ftpserver.config.spring, org.apache.ftpserver.filesystem.nativefs.impl, org.apache.ftpserver.ftpletcontainer.impl, org.apache.ftpserver.impl, org.apache.ftpserver.listener.nio, org.apache.ftpserver.message.impl, org.apache.ftpserver.ssl.impl, + org.apache.ftpserver.usermanager.impl, org.apache.ftpserver.util</Private-Package> <Import-Package> org.springframework.beans.factory.config;resolution:=optional;version="2.5", Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java Sat Oct 18 22:33:49 2008 @@ -19,6 +19,8 @@ package org.apache.ftpserver; +import org.apache.ftpserver.ftplet.FtpException; + /** * This is the starting point of all the servers. It invokes a new listener @@ -33,7 +35,7 @@ /** * Start the server. Open a new listener thread. */ - void start() throws Exception; + void start() throws FtpException; /** * Stop the server. Stop the listener thread. Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServerFactory.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServerFactory.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServerFactory.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServerFactory.java Sat Oct 18 22:33:49 2008 @@ -47,7 +47,7 @@ * * @throws Exception */ - public FtpServerFactory() throws Exception { + public FtpServerFactory() { serverContext = new DefaultFtpServerContext(); } Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFileSystemView.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFileSystemView.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFileSystemView.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/filesystem/nativefs/impl/NativeFileSystemView.java Sat Oct 18 22:33:49 2008 @@ -26,6 +26,9 @@ import org.apache.ftpserver.ftplet.FtpException; import org.apache.ftpserver.ftplet.FtpFile; import org.apache.ftpserver.ftplet.User; +import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * File system view based on native file system. Here the root directory will be @@ -36,6 +39,10 @@ */ public class NativeFileSystemView implements FileSystemView { + private final Logger LOG = LoggerFactory + .getLogger(NativeFileSystemView.class); + + // the root directory will always end with '/'. private String rootDir; @@ -77,6 +84,9 @@ if (!rootDir.endsWith("/")) { rootDir += '/'; } + + LOG.debug("Native filesystem view created for user \"{}\" with root \"{}\"", user.getName(), rootDir); + this.rootDir = rootDir; this.user = user; Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServerContext.java Sat Oct 18 22:33:49 2008 @@ -86,7 +86,7 @@ } - public DefaultFtpServerContext() throws Exception { + public DefaultFtpServerContext() { // create the default listener listeners.put("default", new ListenerFactory().createListener()); } Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java Sat Oct 18 22:33:49 2008 @@ -21,7 +21,10 @@ import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; +import java.net.URL; +import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -105,12 +108,16 @@ in = getClass().getClassLoader().getResourceAsStream( defaultResourceName); if (in != null) { - pair.defaultProperties.load(in); + try { + pair.defaultProperties.load(in); + } catch (IOException e) { + throw new FtpServerConfigurationException( + "Failed to load messages from \"" + defaultResourceName + "\", file not found in classpath"); + } + } else { + throw new FtpServerConfigurationException( + "Failed to load messages from \"" + defaultResourceName + "\", file not found in classpath"); } - } catch (Exception ex) { - LOG.warn("MessageResourceImpl.createPropertiesPair()", ex); - throw new FtpServerConfigurationException( - "MessageResourceImpl.createPropertiesPair()", ex); } finally { IoUtils.close(in); } Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManagerFactory.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManagerFactory.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManagerFactory.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManagerFactory.java Sat Oct 18 22:33:49 2008 @@ -23,6 +23,8 @@ import org.apache.ftpserver.usermanager.impl.Md5PasswordEncryptor; import org.apache.ftpserver.usermanager.impl.PropertiesUserManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Factory for the properties file based <code>UserManager</code> implementation. @@ -32,12 +34,17 @@ */ public class PropertiesUserManagerFactory implements UserManagerFactory { + + private String adminName = "admin"; - private File userDataFile = new File("./res/user.gen"); + private File userDataFile; private PasswordEncryptor passwordEncryptor = new Md5PasswordEncryptor(); + /** + * Creates a [EMAIL PROTECTED] PropertiesUserManager} instance based on the provided configuration + */ public PropertiesUserManager createUserManager() { return new PropertiesUserManager(passwordEncryptor, userDataFile, adminName); } Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java Sat Oct 18 22:33:49 2008 @@ -23,6 +23,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; @@ -60,7 +61,7 @@ private BaseProperties userDataProp; - private File userDataFile = new File("./res/user.gen"); + private File userDataFile; @@ -75,15 +76,38 @@ try { userDataProp = new BaseProperties(); - if (userDataFile != null && userDataFile.exists()) { - FileInputStream fis = null; - try { - fis = new FileInputStream(userDataFile); - userDataProp.load(fis); - } finally { - IoUtils.close(fis); + if (userDataFile != null) { + LOG.debug("File configured, will try loading"); + + if(userDataFile.exists()) { + LOG.debug("File found on file system"); + FileInputStream fis = null; + try { + fis = new FileInputStream(userDataFile); + userDataProp.load(fis); + } finally { + IoUtils.close(fis); + } + } else { + // try loading it from the classpath + LOG.debug("File not found on file system, try loading from classpath"); + + InputStream is = getClass().getClassLoader().getResourceAsStream(userDataFile.getPath()); + + if(is != null) { + try { + userDataProp.load(is); + } finally { + IoUtils.close(is); + } + } else { + throw new FtpServerConfigurationException( + "User data file specified but could not be located, " + + "neither on the file system or in the classpath: " + + userDataFile.getPath()); + } } - } + } } catch (IOException e) { throw new FtpServerConfigurationException( "Error loading user data file : " Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FileUserManagerConfigTest.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FileUserManagerConfigTest.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FileUserManagerConfigTest.java (original) +++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FileUserManagerConfigTest.java Sat Oct 18 22:33:49 2008 @@ -35,6 +35,8 @@ */ public class FileUserManagerConfigTest extends SpringConfigTestTemplate { + private static final String USER_FILE_PATH = "src/test/resources/users.properties"; + private PropertiesUserManager createPropertiesUserManager(String config) { DefaultFtpServer server = createServer(config); @@ -42,36 +44,36 @@ } public void testFile() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"/tmp/foo.users\" />"); - assertEquals(new File("/tmp/foo.users"), um.getFile()); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" />"); + assertEquals(new File("src/test/resources/users.properties"), um.getFile()); } public void testMd5PasswordEncryptor() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"foo\" encrypt-passwords=\"md5\" />"); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" encrypt-passwords=\"md5\" />"); assertTrue(um.getPasswordEncryptor() instanceof Md5PasswordEncryptor); } public void testTruePasswordEncryptor() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"foo\" encrypt-passwords=\"true\" />"); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" encrypt-passwords=\"true\" />"); assertTrue(um.getPasswordEncryptor() instanceof Md5PasswordEncryptor); } public void testNonePasswordEncryptor() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"foo\" encrypt-passwords=\"clear\" />"); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" encrypt-passwords=\"clear\" />"); assertTrue(um.getPasswordEncryptor() instanceof ClearTextPasswordEncryptor); } public void testSaltedPasswordEncryptor() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"foo\" encrypt-passwords=\"salted\" />"); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" encrypt-passwords=\"salted\" />"); assertTrue(um.getPasswordEncryptor() instanceof SaltedPasswordEncryptor); } public void testFalsePasswordEncryptor() throws Throwable { - PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"foo\" encrypt-passwords=\"false\" />"); + PropertiesUserManager um = createPropertiesUserManager("<file-user-manager file=\"" + USER_FILE_PATH + "\" encrypt-passwords=\"false\" />"); assertTrue(um.getPasswordEncryptor() instanceof ClearTextPasswordEncryptor); } Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java (original) +++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java Sat Oct 18 22:33:49 2008 @@ -85,7 +85,7 @@ } - public void start(FtpServerContext serverContext) throws Exception { + public void start(FtpServerContext serverContext) { } Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java (original) +++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java Sat Oct 18 22:33:49 2008 @@ -100,10 +100,9 @@ String[] languages = server.getServerContext().getMessageResource() .getAvailableLanguages(); - assertEquals(3, languages.length); - assertEquals("se", languages[0]); - assertEquals("no", languages[1]); - assertEquals("da", languages[2]); + assertEquals(2, languages.length); + assertEquals("en", languages[0]); + assertEquals("zh-tw", languages[1]); NativeFileSystemFactory fs = (NativeFileSystemFactory) server.getFileSystem(); assertTrue(fs.isCreateHome()); Modified: mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml?rev=705958&r1=705957&r2=705958&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml (original) +++ mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml Sat Oct 18 22:33:49 2008 @@ -64,7 +64,7 @@ </ftplet> </ftplets> - <!--<file-user-manager file="/tmp/foo.users" encrypt-passwords="true" />--> + <!--<file-user-manager file="src/test/resources/users.properties" encrypt-passwords="true" />--> <user-manager> <beans:bean class="org.apache.ftpserver.config.spring.MockUserManager"/> </user-manager> @@ -77,6 +77,6 @@ <beans:bean class="org.apache.ftpserver.command.impl.STAT" /> </command> </commands> - <messages languages="se no ,da" /> + <messages languages="en zh-tw" /> </server>