diff options
| author | Nils Schwabe | 2014-06-16 17:42:51 +0200 |
|---|---|---|
| committer | Nils Schwabe | 2014-06-16 17:42:51 +0200 |
| commit | 09a0f7f6184b680c7e208104d7e8fcacde27a00d (patch) | |
| tree | b0ce867cdcb9319e9b69da1419f8c7b427442854 /src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java | |
| parent | Started to implement download of images (diff) | |
| download | masterserver-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.java | 72 |
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." ); + } } |
