You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-commits@incubator.apache.org by ng...@apache.org on 2006/12/30 22:27:48 UTC
svn commit: r491337 - in /incubator/ftpserver/trunk:
admin-gui/src/java/org/apache/ftpserver/gui/
core/src/java/org/apache/ftpserver/
core/src/java/org/apache/ftpserver/command/
core/src/java/org/apache/ftpserver/usermanager/ core/src/test/org/apache/f...
Author: ngn
Date: Sat Dec 30 14:27:47 2006
New Revision: 491337
URL: http://svn.apache.org/viewvc?view=rev&rev=491337
Log:
The remaining permissions has now been migrated to the new authentication design.
Added:
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java (with props)
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java (with props)
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java (with props)
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java (with props)
Modified:
incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/UserManagerPanel.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConfigurableFtpServerContext.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/BaseUser.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/DbUserManager.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/PassivePortsTest.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/UserManagerTestTemplate.java
incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/User.java
Modified: incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/UserManagerPanel.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/UserManagerPanel.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/UserManagerPanel.java (original)
+++ incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/UserManagerPanel.java Sat Dec 30 14:27:47 2006
@@ -49,6 +49,8 @@
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.usermanager.BaseUser;
+import org.apache.ftpserver.usermanager.ConcurrentLoginPermission;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.usermanager.WritePermission;
import org.apache.ftpserver.usermanager.WriteRequest;
@@ -536,11 +538,32 @@
directoryTxt.setText(user.getHomeDirectory());
enabledChkBox.setSelected(user.getEnabled());
writeChkBox.setSelected(user.authorize(new WriteRequest()));
- setLoginNumberCombo(loginNumberLst, user.getMaxLoginNumber());
- setLoginPerIPCombo(loginPerIPLst, user.getMaxLoginPerIP());
+
+
+
+ Authority[] maxTransferRates = user.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ setByteRateCombo(uploadLst, ((TransferRatePermission)maxTransferRates[0]).getMaxUploadRate());
+ setByteRateCombo(downloadLst, ((TransferRatePermission)maxTransferRates[0]).getMaxDownloadRate());
+ } else {
+ setByteRateCombo(uploadLst, 0);
+ setByteRateCombo(downloadLst, 0);
+ }
+
+ Authority[] concurrentLoginPermissions = user.getAuthorities(ConcurrentLoginPermission.class);
+
+ if(concurrentLoginPermissions.length > 0) {
+ setLoginNumberCombo(loginNumberLst, ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLogins());
+ setLoginPerIPCombo(loginPerIPLst, ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLoginsPerIP());
+ } else {
+ setLoginNumberCombo(loginNumberLst, 0);
+ setLoginPerIPCombo(loginPerIPLst, 0);
+ }
+
+
+
setIdleTimeCombo(idleLst, user.getMaxIdleTime());
- setByteRateCombo(uploadLst, user.getMaxUploadRate());
- setByteRateCombo(downloadLst, user.getMaxDownloadRate());
}
}
}
@@ -574,13 +597,13 @@
authorities.add(new WritePermission());
}
+ authorities.add(new TransferRatePermission(getBytesTransferRate(downloadLst), getBytesTransferRate(uploadLst)));
+ authorities.add(new ConcurrentLoginPermission(getMaxLoginNumber(loginNumberLst), getMaxLoginPerIP(loginPerIPLst)));
+
user.setAuthorities((Authority[]) authorities.toArray(new Authority[0]));
- user.setMaxLoginNumber(getMaxLoginNumber(loginNumberLst));
- user.setMaxLoginPerIP(getMaxLoginPerIP(loginPerIPLst));
user.setMaxIdleTime(getMaxIdleTime(idleLst));
- user.setMaxUploadRate(getBytesTransferRate(uploadLst));
- user.setMaxDownloadRate(getBytesTransferRate(downloadLst));
+
serverContext.getUserManager().save(user);
refresh(serverContext);
GuiUtils.showInformationMessage(this, "Saved user - " + user.getName());
@@ -756,13 +779,14 @@
user.setName(userName);
user.setPassword(userName);
- List authorities = new ArrayList();
+ Authority[] authorities = new Authority[]{
+ new TransferRatePermission(0, 0)
+ };
+
- user.setAuthorities((Authority[]) authorities.toArray(new Authority[0]));
+ user.setAuthorities(authorities);
user.setEnabled(true);
- user.setMaxUploadRate(0);
- user.setMaxDownloadRate(0);
user.setHomeDirectory("./res/home");
user.setMaxIdleTime(0);
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConfigurableFtpServerContext.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConfigurableFtpServerContext.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConfigurableFtpServerContext.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConfigurableFtpServerContext.java Sat Dec 30 14:27:47 2006
@@ -47,6 +47,8 @@
import org.apache.ftpserver.message.MessageResourceImpl;
import org.apache.ftpserver.socketfactory.FtpSocketFactory;
import org.apache.ftpserver.usermanager.BaseUser;
+import org.apache.ftpserver.usermanager.ConcurrentLoginPermission;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.usermanager.PropertiesUserManager;
import org.apache.ftpserver.usermanager.WritePermission;
@@ -78,6 +80,8 @@
};
private static final Authority[] ANON_AUTHORITIES = new Authority[]{
+ new ConcurrentLoginPermission(20, 2),
+ new TransferRatePermission(4800, 4800)
};
/**
@@ -195,10 +199,6 @@
adminUser.setAuthorities(ADMIN_AUTHORITIES);
- adminUser.setMaxLoginNumber(0);
- adminUser.setMaxLoginPerIP(0);
- adminUser.setMaxUploadRate(0);
- adminUser.setMaxDownloadRate(0);
adminUser.setHomeDirectory("./res/home");
adminUser.setMaxIdleTime(0);
userManager.save(adminUser);
@@ -214,10 +214,7 @@
anonUser.setAuthorities(ANON_AUTHORITIES);
anonUser.setEnabled(true);
- anonUser.setMaxLoginNumber(20);
- anonUser.setMaxLoginPerIP(2);
- anonUser.setMaxUploadRate(4800);
- anonUser.setMaxDownloadRate(4800);
+
anonUser.setHomeDirectory("./res/home");
anonUser.setMaxIdleTime(300);
userManager.save(anonUser);
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java Sat Dec 30 14:27:47 2006
@@ -29,12 +29,14 @@
import org.apache.ftpserver.FtpRequestImpl;
import org.apache.ftpserver.FtpWriter;
import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FileObject;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.util.IoUtils;
/**
@@ -144,7 +146,13 @@
bos = IoUtils.getBufferedOutputStream( file.createOutputStream(offset) );
// transfer data
- int maxRate = handler.getRequest().getUser().getMaxUploadRate();
+ Authority[] maxUploadRates = handler.getRequest().getUser().getAuthorities(TransferRatePermission.class);
+
+ int maxRate = 0;
+ if(maxUploadRates.length > 0) {
+ maxRate = ((TransferRatePermission)maxUploadRates[0]).getMaxUploadRate();
+ }
+
long transSz = handler.transfer(bis, bos, maxRate);
// log message
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java Sat Dec 30 14:27:47 2006
@@ -128,7 +128,7 @@
/**
* @param is InputStream for which the MD5 hash is calculated
- * @return
+ * @return The hash of the content in the input stream
* @throws IOException
* @throws NoSuchAlgorithmException
*/
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java Sat Dec 30 14:27:47 2006
@@ -30,6 +30,7 @@
import org.apache.ftpserver.FtpRequestImpl;
import org.apache.ftpserver.FtpWriter;
import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.DataType;
import org.apache.ftpserver.ftplet.FileObject;
import org.apache.ftpserver.ftplet.FtpException;
@@ -37,6 +38,7 @@
import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.util.IoUtils;
/**
@@ -145,7 +147,13 @@
bos = IoUtils.getBufferedOutputStream(os);
// transfer data
- int maxRate = handler.getRequest().getUser().getMaxDownloadRate();
+ Authority[] maxDownloadRates = handler.getRequest().getUser().getAuthorities(TransferRatePermission.class);
+
+ int maxRate = 0;
+ if(maxDownloadRates.length > 0) {
+ maxRate = ((TransferRatePermission)maxDownloadRates[0]).getMaxDownloadRate();
+ }
+
long transSz = handler.transfer(bis, bos, maxRate);
// log message
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java Sat Dec 30 14:27:47 2006
@@ -28,7 +28,7 @@
import org.apache.ftpserver.ftplet.User;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.interfaces.FtpServerContext;
-import org.apache.ftpserver.usermanager.WritePermission;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.usermanager.WriteRequest;
/**
@@ -93,8 +93,17 @@
sb.append("writepermission : ").append(user.authorize(new WriteRequest())).append("\n");
sb.append("enableflag : ").append(user.getEnabled()).append("\n");
sb.append("idletime : ").append(user.getMaxIdleTime()).append("\n");
- sb.append("uploadrate : ").append(user.getMaxUploadRate()).append("\n");
- sb.append("downloadrate : ").append(user.getMaxDownloadRate()).append("\n");
+
+ TransferRatePermission[] maxTransferRates = (TransferRatePermission[])
+ user.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ sb.append("uploadrate : ").append(maxTransferRates[0].getMaxUploadRate()).append("\n");
+ sb.append("downloadrate : ").append(maxTransferRates[0].getMaxDownloadRate()).append("\n");
+ } else {
+ sb.append("uploadrate : 0\n");
+ sb.append("downloadrate : 0\n");
+ }
sb.append('\n');
out.write(200, sb.toString());
}
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java Sat Dec 30 14:27:47 2006
@@ -29,12 +29,14 @@
import org.apache.ftpserver.FtpRequestImpl;
import org.apache.ftpserver.FtpWriter;
import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FileObject;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.util.IoUtils;
/**
@@ -134,7 +136,12 @@
bos = IoUtils.getBufferedOutputStream( file.createOutputStream(skipLen) );
// transfer data
- int maxRate = handler.getRequest().getUser().getMaxUploadRate();
+ Authority[] maxUploadRates = handler.getRequest().getUser().getAuthorities(TransferRatePermission.class);
+
+ int maxRate = 0;
+ if(maxUploadRates.length > 0) {
+ maxRate = ((TransferRatePermission)maxUploadRates[0]).getMaxUploadRate();
+ }
long transSz = handler.transfer(bis, bos, maxRate);
// log message
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java Sat Dec 30 14:27:47 2006
@@ -29,6 +29,7 @@
import org.apache.ftpserver.FtpRequestImpl;
import org.apache.ftpserver.FtpWriter;
import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FileObject;
import org.apache.ftpserver.ftplet.FileSystemView;
import org.apache.ftpserver.ftplet.FtpException;
@@ -36,6 +37,7 @@
import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
+import org.apache.ftpserver.usermanager.TransferRatePermission;
import org.apache.ftpserver.util.IoUtils;
/**
@@ -138,7 +140,12 @@
bos = IoUtils.getBufferedOutputStream( file.createOutputStream(0L) );
// transfer data
- int maxRate = request.getUser().getMaxUploadRate();
+ Authority[] maxUploadRates = handler.getRequest().getUser().getAuthorities(TransferRatePermission.class);
+
+ int maxRate = 0;
+ if(maxUploadRates.length > 0) {
+ maxRate = ((TransferRatePermission)maxUploadRates[0]).getMaxUploadRate();
+ }
long transSz = handler.transfer(bis, bos, maxRate);
// log message
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java Sat Dec 30 14:27:47 2006
@@ -30,6 +30,7 @@
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
import org.apache.ftpserver.usermanager.BaseUser;
+import org.apache.ftpserver.usermanager.ConcurrentLoginRequest;
/**
* <code>USER <SP> <username> <CRLF></code><br>
@@ -106,25 +107,16 @@
User configUser = handler.getServerContext().getUserManager().getUserByName(userName);
if(configUser != null){
- //user login limit check
- int maxUserLoginNumber = configUser.getMaxLoginNumber();
- if(maxUserLoginNumber > 0){// has a limit on user login
- int currUserLogin = stat.getCurrentUserLoginNumber(configUser);
- if(currUserLogin >= maxUserLoginNumber){
- out.send(421, "USER.login", null);
- return;
+ //user login limit check
+
+ ConcurrentLoginRequest loginRequest = new ConcurrentLoginRequest(
+ stat.getCurrentUserLoginNumber(configUser) + 1,
+ stat.getCurrentUserLoginNumber(configUser, request.getRemoteAddress()) + 1);
+
+ if(!configUser.authorize(loginRequest)) {
+ out.send(421, "USER.login", null);
+ return;
}
- }
-
- //user login from same IP check
- int maxUserLoginPerIP = configUser.getMaxLoginPerIP();
- if(maxUserLoginPerIP > 0){// has a limit on user login per ip
- int currUserLoginPerIP = stat.getCurrentUserLoginNumber(configUser, request.getRemoteAddress());
- if(currUserLoginPerIP >= maxUserLoginPerIP){
- out.send(421, "USER.login", null);
- return;
- }
- }
}
// finally set the user name
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/BaseUser.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/BaseUser.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/BaseUser.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/BaseUser.java Sat Dec 30 14:27:47 2006
@@ -20,6 +20,8 @@
package org.apache.ftpserver.usermanager;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.AuthorizationRequest;
@@ -51,11 +53,6 @@
private String password = null;
private int maxIdleTimeSec = 0; // no limit
- private int maxUploadRate = 0; // no limit
- private int maxDownloadRate = 0; // no limit
-
- private int maxLoginNumber = 0; //no limit
- private int maxLoginPerIP = 0; //no limit
private String homeDir = null;
private boolean isEnabled = true;
@@ -76,12 +73,8 @@
password = user.getPassword();
authorities = user.getAuthorities();
maxIdleTimeSec = user.getMaxIdleTime();
- maxUploadRate = user.getMaxUploadRate();
- maxDownloadRate = user.getMaxDownloadRate();
homeDir = user.getHomeDirectory();
isEnabled = user.getEnabled();
- maxLoginNumber = user.getMaxLoginNumber();
- maxLoginPerIP = user.getMaxLoginPerIP();
}
/**
@@ -150,36 +143,6 @@
public void setEnabled(boolean enb) {
isEnabled = enb;
}
-
- /**
- * Get maximum user upload rate in bytes/sec.
- */
- public int getMaxUploadRate() {
- return maxUploadRate;
- }
-
- /**
- * Set user maximum upload rate limit.
- * Less than or equal to zero means no limit.
- */
- public void setMaxUploadRate(int rate) {
- maxUploadRate = rate;
- }
-
- /**
- * Get maximum user download rate in bytes/sec.
- */
- public int getMaxDownloadRate() {
- return maxDownloadRate;
- }
-
- /**
- * Set user maximum download rate limit.
- * Less than or equal to zero means no limit.
- */
- public void setMaxDownloadRate(int rate) {
- maxDownloadRate = rate;
- }
/**
* Get the user home directory.
@@ -194,36 +157,7 @@
public void setHomeDirectory(String home) {
homeDir = home;
}
-
- /**
- *Get maximum login number allowed for this user account
- */
- public int getMaxLoginNumber() {
- return maxLoginNumber;
- }
- /**
- * set this user's allowed maximum login number.
- * Less than or equal to zero means no limit
- */
- public void setMaxLoginNumber(int loginNumber) {
- maxLoginNumber = loginNumber;
- }
-
- /**
- *Get maximum login number allowed from the same IP address when using this user account
- */
- public int getMaxLoginPerIP() {
- return maxLoginPerIP;
- }
-
- /**
- * Set the allowed maximum login number from the same IP address and logged as this user account
- * Less than or equal to zero means no limit
- */
- public void setMaxLoginPerIP(int loginPerIP) {
- maxLoginPerIP = loginPerIP;
- }
/**
* String representation.
@@ -248,5 +182,17 @@
}
return false;
+ }
+
+ public Authority[] getAuthorities(Class clazz) {
+ List selected = new ArrayList();
+
+ for (int i = 0; i < authorities.length; i++) {
+ if(authorities[i].getClass().equals(clazz)) {
+ selected.add(authorities[i]);
+ }
+ }
+
+ return (Authority[]) selected.toArray(new Authority[0]);
}
}
Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java?view=auto&rev=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java Sat Dec 30 14:27:47 2006
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.usermanager;
+
+import org.apache.ftpserver.ftplet.Authority;
+import org.apache.ftpserver.ftplet.AuthorizationRequest;
+
+/**
+ * The max upload rate permission
+ */
+public class ConcurrentLoginPermission implements Authority {
+
+ private int maxConcurrentLogins;
+ private int maxConcurrentLoginsPerIP;
+
+ public ConcurrentLoginPermission(int maxConcurrentLogins, int maxConcurrentLoginsPerIP) {
+ this.maxConcurrentLogins = maxConcurrentLogins;
+ this.maxConcurrentLoginsPerIP = maxConcurrentLoginsPerIP;
+ }
+
+ /**
+ * @see Authority#authorize(AuthorizationRequest)
+ */
+ public boolean authorize(AuthorizationRequest request) {
+ if (request instanceof ConcurrentLoginRequest) {
+ ConcurrentLoginRequest concurrentLoginRequest = (ConcurrentLoginRequest) request;
+
+ if(maxConcurrentLogins != 0 && maxConcurrentLogins < concurrentLoginRequest.getConcurrentLogins()) {
+ return false;
+ } else if(maxConcurrentLoginsPerIP != 0
+ && maxConcurrentLoginsPerIP < concurrentLoginRequest.getConcurrentLoginsFromThisIP()) {
+ return false;
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @see Authority#canAuthorize(AuthorizationRequest)
+ */
+ public boolean canAuthorize(AuthorizationRequest request) {
+ return request instanceof ConcurrentLoginRequest;
+ }
+
+ /**
+ * @return the maxConcurrentLogins
+ */
+ public int getMaxConcurrentLogins() {
+ return maxConcurrentLogins;
+ }
+
+ /**
+ * @return the maxConcurrentLoginsPerIP
+ */
+ public int getMaxConcurrentLoginsPerIP() {
+ return maxConcurrentLoginsPerIP;
+ }
+}
Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginPermission.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java?view=auto&rev=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java Sat Dec 30 14:27:47 2006
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.usermanager;
+
+import org.apache.ftpserver.ftplet.AuthorizationRequest;
+
+/**
+ * Class representing a write request
+ */
+public class ConcurrentLoginRequest implements AuthorizationRequest {
+
+ private int concurrentLogins;
+ private int concurrentLoginsFromThisIP;
+ /**
+ * @param concurrentLogins
+ * @param concurrentLoginsFromThisIP
+ */
+ public ConcurrentLoginRequest(int concurrentLogins, int concurrentLoginsFromThisIP) {
+ super();
+ this.concurrentLogins = concurrentLogins;
+ this.concurrentLoginsFromThisIP = concurrentLoginsFromThisIP;
+ }
+ /**
+ * @return the concurrentLogins
+ */
+ public int getConcurrentLogins() {
+ return concurrentLogins;
+ }
+ /**
+ * @return the concurrentLoginsFromThisIP
+ */
+ public int getConcurrentLoginsFromThisIP() {
+ return concurrentLoginsFromThisIP;
+ }
+}
Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/ConcurrentLoginRequest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/DbUserManager.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/DbUserManager.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/DbUserManager.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/DbUserManager.java Sat Dec 30 14:27:47 2006
@@ -268,10 +268,34 @@
map.put( ATTR_ENABLE, String.valueOf(user.getEnabled()) );
map.put( ATTR_WRITE_PERM, String.valueOf(user.authorize(new WriteRequest())) );
map.put( ATTR_MAX_IDLE_TIME, new Integer(user.getMaxIdleTime()) );
- map.put( ATTR_MAX_UPLOAD_RATE, new Integer(user.getMaxUploadRate()) );
- map.put( ATTR_MAX_DOWNLOAD_RATE, new Integer(user.getMaxDownloadRate()) );
- map.put( ATTR_MAX_LOGIN_NUMBER, new Integer(user.getMaxLoginNumber()));
- map.put( ATTR_MAX_LOGIN_PER_IP, new Integer(user.getMaxLoginPerIP()));
+
+
+
+ Authority[] maxTransferRates = user.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ map.put( ATTR_MAX_UPLOAD_RATE, new Integer(((TransferRatePermission)maxTransferRates[0]).getMaxUploadRate()) );
+ map.put( ATTR_MAX_DOWNLOAD_RATE, new Integer(((TransferRatePermission)maxTransferRates[0]).getMaxDownloadRate()) );
+ } else {
+ map.put( ATTR_MAX_UPLOAD_RATE, new Integer(0));
+ map.put( ATTR_MAX_DOWNLOAD_RATE, new Integer(0) );
+ }
+
+
+ Authority[] concurrentLoginPermissions = user.getAuthorities(ConcurrentLoginPermission.class);
+
+ if(concurrentLoginPermissions.length > 0) {
+ map.put( ATTR_MAX_LOGIN_NUMBER,
+ new Integer(((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLogins()));
+ map.put( ATTR_MAX_LOGIN_PER_IP,
+ new Integer(((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLoginsPerIP()));
+ } else {
+ map.put( ATTR_MAX_LOGIN_NUMBER, new Integer(0));
+ map.put( ATTR_MAX_LOGIN_PER_IP, new Integer(0));
+
+ }
+
+
String sql = null;
if( !doesExist(user.getName()) ) {
@@ -331,17 +355,16 @@
thisUser.setName(rs.getString(ATTR_LOGIN));
thisUser.setHomeDirectory(rs.getString(ATTR_HOME));
thisUser.setEnabled(trueStr.equalsIgnoreCase(rs.getString(ATTR_ENABLE)));
- thisUser.setMaxLoginNumber(rs.getInt(ATTR_MAX_LOGIN_NUMBER));
- thisUser.setMaxLoginPerIP(rs.getInt(ATTR_MAX_LOGIN_PER_IP));
thisUser.setMaxIdleTime(rs.getInt(ATTR_MAX_IDLE_TIME));
- thisUser.setMaxUploadRate(rs.getInt(ATTR_MAX_UPLOAD_RATE));
- thisUser.setMaxDownloadRate(rs.getInt(ATTR_MAX_DOWNLOAD_RATE));
List authorities = new ArrayList();
if(trueStr.equalsIgnoreCase(rs.getString(ATTR_WRITE_PERM))) {
authorities.add(new WritePermission());
}
+
+ authorities.add(new ConcurrentLoginPermission(rs.getInt(ATTR_MAX_LOGIN_NUMBER), rs.getInt(ATTR_MAX_LOGIN_PER_IP)));
+ authorities.add(new TransferRatePermission(rs.getInt(ATTR_MAX_UPLOAD_RATE), rs.getInt(ATTR_MAX_DOWNLOAD_RATE)));
thisUser.setAuthorities((Authority[]) authorities.toArray(new Authority[0]));
}
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java Sat Dec 30 14:27:47 2006
@@ -126,11 +126,29 @@
userDataProp.setProperty(thisPrefix + ATTR_ENABLE, usr.getEnabled());
userDataProp.setProperty(thisPrefix + ATTR_WRITE_PERM, usr.authorize(new WriteRequest()));
userDataProp.setProperty(thisPrefix + ATTR_MAX_IDLE_TIME, usr.getMaxIdleTime());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_UPLOAD_RATE, usr.getMaxUploadRate());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_DOWNLOAD_RATE, usr.getMaxDownloadRate());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_NUMBER, usr.getMaxLoginNumber());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_PER_IP, usr.getMaxLoginPerIP());
-
+
+ Authority[] maxTransferRates = usr.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ userDataProp.setProperty(thisPrefix + ATTR_MAX_UPLOAD_RATE,
+ ((TransferRatePermission)maxTransferRates[0]).getMaxUploadRate());
+ userDataProp.setProperty(thisPrefix + ATTR_MAX_DOWNLOAD_RATE,
+ ((TransferRatePermission)maxTransferRates[0]).getMaxDownloadRate());
+ } else {
+ userDataProp.remove(thisPrefix + ATTR_MAX_UPLOAD_RATE);
+ userDataProp.remove(thisPrefix + ATTR_MAX_DOWNLOAD_RATE);
+ }
+
+ Authority[] concurrentLoginPermissions = usr.getAuthorities(ConcurrentLoginPermission.class);
+
+ if(concurrentLoginPermissions.length > 0) {
+ userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_NUMBER, ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLogins());
+ userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_PER_IP, ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLoginsPerIP());
+ } else {
+ userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_NUMBER);
+ userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_PER_IP);
+ }
+
saveUserData();
}
@@ -261,14 +279,20 @@
authorities.add(new WritePermission());
}
+ int maxLogin = userDataProp.getInteger(baseKey + ATTR_MAX_LOGIN_NUMBER, 0);
+ int maxLoginPerIP = userDataProp.getInteger(baseKey + ATTR_MAX_LOGIN_PER_IP, 0);
+
+ authorities.add(new ConcurrentLoginPermission(maxLogin, maxLoginPerIP));
+
+ int uploadRate = userDataProp.getInteger(baseKey + ATTR_MAX_UPLOAD_RATE, 0);
+ int downloadRate = userDataProp.getInteger(baseKey + ATTR_MAX_DOWNLOAD_RATE, 0);
+
+ authorities.add(new TransferRatePermission(downloadRate, uploadRate));
+
user.setAuthorities((Authority[]) authorities.toArray(new Authority[0]));
- //user.setWritePermission(userDataProp.getBoolean(baseKey + ATTR_WRITE_PERM, false));
- user.setMaxLoginNumber(userDataProp.getInteger(baseKey + ATTR_MAX_LOGIN_NUMBER, 0));
- user.setMaxLoginPerIP(userDataProp.getInteger(baseKey + ATTR_MAX_LOGIN_PER_IP, 0));
user.setMaxIdleTime(userDataProp.getInteger(baseKey + ATTR_MAX_IDLE_TIME, 0));
- user.setMaxUploadRate(userDataProp.getInteger(baseKey + ATTR_MAX_UPLOAD_RATE, 0));
- user.setMaxDownloadRate(userDataProp.getInteger(baseKey + ATTR_MAX_DOWNLOAD_RATE, 0));
+
return user;
}
Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java?view=auto&rev=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java Sat Dec 30 14:27:47 2006
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.usermanager;
+
+import org.apache.ftpserver.ftplet.Authority;
+import org.apache.ftpserver.ftplet.AuthorizationRequest;
+
+/**
+ * The max upload rate permission
+ */
+public class TransferRatePermission implements Authority {
+
+ private int maxDownloadRate;
+ private int maxUploadRate;
+
+ public TransferRatePermission(int maxDownloadRate, int maxUploadRate) {
+ this.maxDownloadRate = maxDownloadRate;
+ this.maxUploadRate = maxUploadRate;
+ }
+
+ /**
+ * @see Authority#authorize(AuthorizationRequest)
+ */
+ public boolean authorize(AuthorizationRequest request) {
+ return false;
+ }
+
+ /**
+ * @see Authority#canAuthorize(AuthorizationRequest)
+ */
+ public boolean canAuthorize(AuthorizationRequest request) {
+ return false;
+ }
+
+ /**
+ * @return the maxUploadRate
+ */
+ public int getMaxUploadRate() {
+ return maxUploadRate;
+ }
+
+ /**
+ * @return the maxUploadRate
+ */
+ public int getMaxDownloadRate() {
+ return maxDownloadRate;
+ }
+
+
+
+}
Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/usermanager/TransferRatePermission.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/PassivePortsTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/PassivePortsTest.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/PassivePortsTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/PassivePortsTest.java Sat Dec 30 14:27:47 2006
@@ -32,6 +32,7 @@
}
public void testParseMaxValue() {
+ System.out.println(Short.MAX_VALUE);
PassivePorts ports = PassivePorts.parse("65535");
assertEquals(65535, ports.reserveNextPort());
Added: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java?view=auto&rev=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java (added)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java Sat Dec 30 14:27:47 2006
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.usermanager;
+
+
+
+import junit.framework.TestCase;
+
+public class ConcurrentLoginPermissionTest extends TestCase {
+
+ public void testCanAuthorize() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(1, 1);
+
+ assertTrue(permission.canAuthorize(request));
+ }
+
+ public void testAllowBoth() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(1, 1);
+
+ assertTrue(permission.authorize(request));
+ }
+
+ public void testMaxValuesBoth() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(4, 2);
+
+ assertTrue(permission.authorize(request));
+ }
+
+ public void testMaxLoginsTooLarge() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(5, 2);
+
+ assertFalse(permission.authorize(request));
+ }
+
+ public void testMaxLoginsPerIPTooLarge() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(3, 3);
+
+ assertFalse(permission.authorize(request));
+ }
+
+ public void testAllowAnyMaxLogins() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(0, 2);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(5, 2);
+
+ assertTrue(permission.authorize(request));
+ }
+
+ public void testAllowAnyMaxLoginsPerIP() {
+ ConcurrentLoginPermission permission = new ConcurrentLoginPermission(4, 0);
+ ConcurrentLoginRequest request = new ConcurrentLoginRequest(3, 3);
+
+ assertTrue(permission.authorize(request));
+ }
+
+}
Propchange: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/ConcurrentLoginPermissionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/UserManagerTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/UserManagerTestTemplate.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/UserManagerTestTemplate.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/usermanager/UserManagerTestTemplate.java Sat Dec 30 14:27:47 2006
@@ -135,11 +135,11 @@
assertEquals("user1", user.getName());
assertNull("Password must not be set", user.getPassword());
assertEquals("home", user.getHomeDirectory());
- assertEquals(0, user.getMaxDownloadRate());
+ assertEquals(0, getMaxDownloadRate(user));
assertEquals(0, user.getMaxIdleTime());
- assertEquals(0, user.getMaxLoginNumber());
- assertEquals(0, user.getMaxLoginPerIP());
- assertEquals(0, user.getMaxUploadRate());
+ assertEquals(0, getMaxLoginNumber(user));
+ assertEquals(0, getMaxLoginPerIP(user));
+ assertEquals(0, getMaxUploadRate(user));
assertFalse(user.authorize(new WriteRequest()));
assertTrue(user.getEnabled());
}
@@ -150,11 +150,11 @@
assertEquals("user2", user.getName());
assertNull("Password must not be set", user.getPassword());
assertEquals("home", user.getHomeDirectory());
- assertEquals(1, user.getMaxDownloadRate());
+ assertEquals(1, getMaxDownloadRate(user));
assertEquals(2, user.getMaxIdleTime());
- assertEquals(3, user.getMaxLoginNumber());
- assertEquals(4, user.getMaxLoginPerIP());
- assertEquals(5, user.getMaxUploadRate());
+ assertEquals(3, getMaxLoginNumber(user));
+ assertEquals(4, getMaxLoginPerIP(user));
+ assertEquals(5, getMaxUploadRate(user));
assertTrue(user.authorize(new WriteRequest()));
assertFalse(user.getEnabled());
}
@@ -163,20 +163,58 @@
assertNull(userManager.getUserByName("foo"));
}
+ private int getMaxDownloadRate(User user) {
+ Authority[] maxTransferRates = user.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ return ((TransferRatePermission)maxTransferRates[0]).getMaxDownloadRate();
+ } else {
+ return 0;
+ }
+ }
+
+ private int getMaxUploadRate(User user) {
+ Authority[] maxTransferRates = user.getAuthorities(TransferRatePermission.class);
+
+ if(maxTransferRates.length > 0) {
+ return ((TransferRatePermission)maxTransferRates[0]).getMaxUploadRate();
+ } else {
+ return 0;
+ }
+ }
+
+ private int getMaxLoginNumber(User user) {
+ Authority[] concurrentLoginPermissions = user.getAuthorities(ConcurrentLoginPermission.class);
+
+ if(concurrentLoginPermissions.length > 0) {
+ return ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLogins();
+ } else {
+ return 0;
+ }
+ }
+
+ private int getMaxLoginPerIP(User user) {
+ Authority[] concurrentLoginPermissions = user.getAuthorities(ConcurrentLoginPermission.class);
+
+ if(concurrentLoginPermissions.length > 0) {
+ return ((ConcurrentLoginPermission)concurrentLoginPermissions[0]).getMaxConcurrentLoginsPerIP();
+ } else {
+ return 0;
+ }
+ }
+
public void testSave() throws Exception {
BaseUser user = new BaseUser();
user.setName("newuser");
user.setPassword("newpw");
user.setHomeDirectory("newhome");
user.setEnabled(false);
- user.setMaxDownloadRate(1);
user.setMaxIdleTime(2);
- user.setMaxLoginNumber(3);
- user.setMaxLoginPerIP(4);
- user.setMaxUploadRate(5);
List authorities = new ArrayList();
authorities.add(new WritePermission());
+ authorities.add(new ConcurrentLoginPermission(3, 4));
+ authorities.add(new TransferRatePermission(1, 5));
user.setAuthorities((Authority[]) authorities.toArray(new Authority[0]));
userManager.save(user);
@@ -192,11 +230,11 @@
assertEquals(user.getHomeDirectory(), actualUser.getHomeDirectory());
assertEquals(user.getEnabled(), actualUser.getEnabled());
assertTrue(user.authorize(new WriteRequest()));
- assertEquals(user.getMaxDownloadRate(), actualUser.getMaxDownloadRate());
+ assertEquals(getMaxDownloadRate(user), getMaxDownloadRate(actualUser));
assertEquals(user.getMaxIdleTime(), actualUser.getMaxIdleTime());
- assertEquals(user.getMaxLoginNumber(), actualUser.getMaxLoginNumber());
- assertEquals(user.getMaxLoginPerIP(), actualUser.getMaxLoginPerIP());
- assertEquals(user.getMaxUploadRate(), actualUser.getMaxUploadRate());
+ assertEquals(getMaxLoginNumber(user), getMaxLoginNumber(actualUser));
+ assertEquals(getMaxLoginPerIP(user), getMaxLoginPerIP(actualUser));
+ assertEquals(getMaxUploadRate(user), getMaxUploadRate(actualUser));
}
public void testSaveWithExistingUser() throws Exception {
@@ -210,11 +248,11 @@
assertEquals("user2", actualUser.getName());
assertNull(actualUser.getPassword());
assertEquals("newhome", actualUser.getHomeDirectory());
- assertEquals(0, actualUser.getMaxDownloadRate());
+ assertEquals(0, getMaxDownloadRate(actualUser));
assertEquals(0, actualUser.getMaxIdleTime());
- assertEquals(0, actualUser.getMaxLoginNumber());
- assertEquals(0, actualUser.getMaxLoginPerIP());
- assertEquals(0, actualUser.getMaxUploadRate());
+ assertEquals(0, getMaxLoginNumber(actualUser));
+ assertEquals(0, getMaxLoginPerIP(actualUser));
+ assertEquals(0, getMaxUploadRate(actualUser));
assertFalse(user.authorize(new WriteRequest()));
assertTrue(actualUser.getEnabled());
}
@@ -235,10 +273,10 @@
assertEquals("/", actualUser.getHomeDirectory());
assertEquals(true, actualUser.getEnabled());
assertFalse(user.authorize(new WriteRequest()));
- assertEquals(0, actualUser.getMaxDownloadRate());
+ assertEquals(0, getMaxDownloadRate(actualUser));
assertEquals(0, actualUser.getMaxIdleTime());
- assertEquals(0, actualUser.getMaxLoginNumber());
- assertEquals(0, actualUser.getMaxLoginPerIP());
- assertEquals(0, actualUser.getMaxUploadRate());
+ assertEquals(0, getMaxLoginNumber(actualUser));
+ assertEquals(0, getMaxLoginPerIP(actualUser));
+ assertEquals(0, getMaxUploadRate(actualUser));
}
}
Modified: incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/User.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/User.java?view=diff&rev=491337&r1=491336&r2=491337
==============================================================================
--- incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/User.java (original)
+++ incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/User.java Sat Dec 30 14:27:47 2006
@@ -43,6 +43,8 @@
*/
Authority[] getAuthorities();
+ Authority[] getAuthorities(Class clazz);
+
/**
* Authorize a {@link AuthorizationRequest} for this user
* @param request The {@link AuthorizationRequest} to authorize
@@ -63,22 +65,22 @@
/**
* Get maximum user upload rate in bytes/sec. Zero or less means no limit.
*/
- int getMaxUploadRate();
+ //int getMaxUploadRate();
/**
* Get maximum user download rate in bytes/sec. Zero or less means no limit.
*/
- int getMaxDownloadRate();
+ //int getMaxDownloadRate();
/**
* Get maximum login number allowed for this user account
*/
- int getMaxLoginNumber();
+ //int getMaxLoginNumber();
/**
* Get maximum login number allowed from the same IP address when using this user account
*/
- int getMaxLoginPerIP();
+ //int getMaxLoginPerIP();
/**
* get user home directory