summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
diff options
context:
space:
mode:
authorNils Schwabe2014-06-16 17:42:51 +0200
committerNils Schwabe2014-06-16 17:42:51 +0200
commit09a0f7f6184b680c7e208104d7e8fcacde27a00d (patch)
treeb0ce867cdcb9319e9b69da1419f8c7b427442854 /src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
parentStarted to implement download of images (diff)
downloadmasterserver-09a0f7f6184b680c7e208104d7e8fcacde27a00d.tar.gz
masterserver-09a0f7f6184b680c7e208104d7e8fcacde27a00d.tar.xz
masterserver-09a0f7f6184b680c7e208104d7e8fcacde27a00d.zip
Add FtpUsers are now in sync with DB
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java72
1 files changed, 61 insertions, 11 deletions
diff --git a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
index f8b8ca1..8ed64d6 100644
--- a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
@@ -1,6 +1,7 @@
package org.openslx.imagemaster.ftp;
import java.io.File;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -23,6 +24,7 @@ import org.apache.ftpserver.usermanager.impl.WritePermission;
import org.apache.log4j.Logger;
import org.openslx.imagemaster.Globals;
import org.openslx.imagemaster.Globals.PropString;
+import org.openslx.imagemaster.db.DbFtpUser;
import org.openslx.imagemaster.thrift.iface.FtpCredentials;
import org.openslx.imagemaster.util.RandomString;
import org.openslx.imagemaster.util.Util;
@@ -40,7 +42,18 @@ public class MasterFtpServer implements Runnable
public enum Mode
{
- UPLOADING, DOWNLOADING
+ UPLOADING, DOWNLOADING;
+
+ @Override
+ public String toString() {
+ if (this == UPLOADING) {
+ return "uploading";
+ } else if (this == DOWNLOADING) {
+ return "downloading";
+ } else {
+ return "";
+ }
+ }
}
/**
@@ -54,12 +67,14 @@ public class MasterFtpServer implements Runnable
private final Long createTime;
private final Mode mode;
private final String fileName;
+ private final String serverSessionId;
- public Infos(Long createTime, Mode mode, String fileName)
+ public Infos(Long createTime, Mode mode, String fileName, String serverSessionId)
{
this.createTime = createTime;
this.mode = mode;
this.fileName = fileName;
+ this.serverSessionId = serverSessionId;
}
public Long getCreateTime()
@@ -76,6 +91,10 @@ public class MasterFtpServer implements Runnable
{
return this.fileName;
}
+
+ public String getServerSessionId() {
+ return this.serverSessionId;
+ }
}
public void init( int port )
@@ -125,9 +144,10 @@ public class MasterFtpServer implements Runnable
* @param password
* @param mode
* @param fileName the filename of the file, that is allowed to access (if downloading)
+ * @param add user to db
* @return
*/
- public boolean addUser( String username, String password, Mode mode, String fileName)
+ public boolean addUser( String serverSessionId, String username, String password, Mode mode, String fileName, boolean toDb)
{
String dir = Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username + "/";
@@ -154,8 +174,9 @@ public class MasterFtpServer implements Runnable
try {
userManager.save( user );
synchronized ( users ) {
- users.put( username, new Infos( System.currentTimeMillis(), mode, file) );
-
+ users.put( username, new Infos( System.currentTimeMillis(), mode, file, serverSessionId) );
+ if (toDb)
+ DbFtpUser.addUser( new DbFtpUser( username, password, mode.toString(), fileName, serverSessionId, new Timestamp(System.currentTimeMillis()) ) );
}
} catch ( FtpException e ) {
return false;
@@ -171,8 +192,6 @@ public class MasterFtpServer implements Runnable
String generatedUser = RandomString.generate( 10, false );
String generatedPass = RandomString.generate( 16, true );
- String dir = Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/"
- + generatedUser + "/";
BaseUser user = new BaseUser();
user.setName( generatedUser );
@@ -180,29 +199,32 @@ public class MasterFtpServer implements Runnable
List<Authority> authorities = new ArrayList<Authority>();
String file = "";
+ String dir = "";
if (mode == Mode.UPLOADING) {
- // uploading satellite needs a folder
+ // generate the home dir
+ dir = Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + generatedUser + "/";
if ( !new File( dir ).mkdir() ) {
return null;
}
- user.setHomeDirectory( dir );
// uploading satellite is allowed to write
authorities.add( new WritePermission() );
} else if (mode == Mode.DOWNLOADING) {
// the downloading satellite may access the whole dir, but this is restricted in MasterFtplet
- user.setHomeDirectory( Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) );
+ dir = Globals.getPropertyString( Globals.PropString.FTPBASEDIR );
// downloading satellite is only allowed to read
file = fileName;
}
+ user.setHomeDirectory( dir );
user.setAuthorities( authorities );
try {
userManager.save( user );
ftpCredentials = new FtpCredentials( generatedUser, generatedPass );
synchronized ( users ) {
- users.put( ftpCredentials.username, new Infos( System.currentTimeMillis(), mode, file) );
+ users.put( ftpCredentials.username, new Infos( System.currentTimeMillis(), mode, file, serverSessionId) );
+ DbFtpUser.addUser( new DbFtpUser( generatedUser, generatedPass, mode.toString(), fileName, serverSessionId, new Timestamp(System.currentTimeMillis()) ) );
}
} catch ( FtpException e ) {
// TODO: handle this
@@ -235,6 +257,7 @@ public class MasterFtpServer implements Runnable
// remove user from map (cache)
synchronized ( users ) {
users.remove( username );
+ DbFtpUser.removeUserByName( username );
}
// remove his home dir
File dir = new File( Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username );
@@ -256,4 +279,31 @@ public class MasterFtpServer implements Runnable
e1.printStackTrace();
}
}
+
+ public void addDbFtpUsers()
+ {
+ List<DbFtpUser> list = DbFtpUser.getAllUsers();
+ Iterator<DbFtpUser> iter = list.iterator();
+
+ int n = 0;
+
+ while (iter.hasNext()) {
+ DbFtpUser user = iter.next();
+ Mode mode;
+ if ( user.mode.equalsIgnoreCase( "downloading" ) ) {
+ mode = Mode.DOWNLOADING;
+ } else {
+ mode = Mode.UPLOADING;
+ }
+ // don't readd user if it timeouted
+ if ( (System.currentTimeMillis() - user.timestamp.getTime()) < FtpCredentialsScheduler.timeout ) {
+ this.addUser( user.sessionId, user.username, user.password, mode, user.filename, false );
+ n++;
+ } else {
+ DbFtpUser.removeUserByName( user.username );
+ }
+ }
+
+ log.info( "Added " + n + " FTP users from DB." );
+ }
}