From 01e662bdfff823c4f5f0b6a270807fd0a3d2825f Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Tue, 22 Apr 2014 16:56:07 +0200 Subject: added a method to imageserver so that finshed uploads can be signaled did some todos from simon moved FtpCredentials creation to MasterFtpServer.java moved some options to to config file --- .../org/openslx/imagemaster/db/ImageProcessor.java | 21 ++++++++++++----- .../java/org/openslx/imagemaster/db/LdapUser.java | 26 +++++++++++++--------- 2 files changed, 31 insertions(+), 16 deletions(-) (limited to 'src/main/java/org/openslx/imagemaster/db') diff --git a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java index d43b507..8c8bd8c 100644 --- a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java +++ b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java @@ -12,10 +12,18 @@ public class ImageProcessor { private static Logger log = Logger.getLogger(ImageProcessor.class); private static HashMap images = new HashMap<>(); - public static void processImageAfterUpload(String username, String filename) { - /* - * TODO: Process the image after download - */ + + /** + * Processes an image after upload + * @param username the user that uploaded the file + * @param filename the name of the file that was uploaded (_no_ absolute path) + * @return + */ + public static boolean processImageAfterUpload(String username, String filename) { + if (!images.containsKey(username)) { + return false; + } + log.info("Will now process '" + filename + "' from user '" + username + "'"); @@ -27,7 +35,7 @@ public class ImageProcessor { if (!imageFile.exists()) { // image file does not exist - return; + return false; } imageFile.renameTo( new File(newFileName) ); @@ -40,6 +48,9 @@ public class ImageProcessor { // update database DbImage.update(images.get(username), newFileName); log.info("Updated db: " + images.get(username).uuid); + + images.remove(username); + return true; } /** diff --git a/src/main/java/org/openslx/imagemaster/db/LdapUser.java b/src/main/java/org/openslx/imagemaster/db/LdapUser.java index 17bf65e..1124696 100644 --- a/src/main/java/org/openslx/imagemaster/db/LdapUser.java +++ b/src/main/java/org/openslx/imagemaster/db/LdapUser.java @@ -14,6 +14,7 @@ import org.apache.directory.api.ldap.model.message.SearchScope; import org.apache.directory.ldap.client.api.LdapConnectionConfig; import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.apache.log4j.Logger; +import org.openslx.imagemaster.Globals; import org.openslx.imagemaster.session.User; import org.openslx.imagemaster.thrift.iface.AuthenticationError; import org.openslx.imagemaster.thrift.iface.AuthenticationException; @@ -63,24 +64,27 @@ public class LdapUser extends User * @param login Login of user in the form "user@organization.com" * @return instance of LDAPUser for matching entry from LDAP, or null if not found */ - @SuppressWarnings("finally") public static LdapUser forLogin( final String login, final String password ) throws AuthenticationException { - String username, organization, firstName, lastName, eMail, satelliteAddress; + String username, organization, firstName, lastName, eMail, satelliteAddress; + + String[] temp = login.split("@"); + if (temp.length != 2) throw new AuthenticationException( AuthenticationError.GENERIC_ERROR, "Login must be in form user@organization.com"); + username = temp[0]; - // TODO: Read connection info from config file LdapConnectionConfig ldapConfig = new LdapConnectionConfig(); ldapConfig.setTrustManagers(new MyTrustManager()); - ldapConfig.setLdapPort(636); - ldapConfig.setLdapHost("bv1.ruf.uni-freiburg.de"); - ldapConfig.setUseSsl(true); + ldapConfig.setLdapPort(Integer.valueOf(Globals.properties.getProperty(Globals.ldapPort))); + ldapConfig.setLdapHost(Globals.properties.getProperty(Globals.ldapHost)); + ldapConfig.setUseSsl(Boolean.valueOf(Globals.properties.getProperty(Globals.ldapSsl))); LdapNetworkConnection connection = new LdapNetworkConnection( ldapConfig ); // bind connection - // TODO: Hard coded stuff here too. binddn, search query etc. need to be configurable try { - if ( connection.connect() ) - connection.bind("uid=" + login + ",ou=people,dc=uni-freiburg,dc=de", password); + if ( connection.connect() ) { + String name = Globals.properties.getProperty(Globals.ldapBindQuery).replace("%", username); + connection.bind(name, password); + } } catch (LdapException e1) { log.warn( "Connection to LDAP failed: " + e1.getMessage() ); } @@ -108,8 +112,8 @@ public class LdapUser extends User // make search query try { - EntryCursor cursor = connection.search("ou=people,dc=uni-freiburg,dc=de", "(&(objectclass=person)(uid=" - + login + "))", SearchScope.SUBTREE); + EntryCursor cursor = connection.search(Globals.properties.getProperty(Globals.ldapSearchBaseDn), + Globals.properties.getProperty(Globals.ldapSearchFilter).replace("%", username), SearchScope.SUBTREE); // only use the first result cursor.next(); Entry entry = cursor.get(); -- cgit v1.2.3-55-g7522