summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNils Schwabe2014-04-11 12:09:58 +0200
committerNils Schwabe2014-04-11 12:09:58 +0200
commit7e776645ecd93190221b188b3c1c3de749fb03a7 (patch)
tree1730cbe9d06a56e3f3005558d4ed064d4169aff3 /src
parentAdded some functionallity to the ImageProcessor. (diff)
downloadmasterserver-7e776645ecd93190221b188b3c1c3de749fb03a7.tar.gz
masterserver-7e776645ecd93190221b188b3c1c3de749fb03a7.tar.xz
masterserver-7e776645ecd93190221b188b3c1c3de749fb03a7.zip
added connection to image database
--> images are now processed after ftp upload --> image is moved to image_dir --> DB is updated with imageData
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/openslx/imagemaster/db/DbImage.java54
-rw-r--r--src/main/java/org/openslx/imagemaster/db/DbUser.java23
-rw-r--r--src/main/java/org/openslx/imagemaster/db/ImageProcessor.java43
-rw-r--r--src/main/java/org/openslx/imagemaster/db/LDAPUser.java6
-rw-r--r--src/main/java/org/openslx/imagemaster/server/ApiServer.java2
-rw-r--r--src/main/java/org/openslx/imagemaster/session/User.java4
-rw-r--r--src/main/thrift/imagemaster.thrift13
-rw-r--r--src/test/java/org/openslx/imagemaster/AppTest.java77
8 files changed, 148 insertions, 74 deletions
diff --git a/src/main/java/org/openslx/imagemaster/db/DbImage.java b/src/main/java/org/openslx/imagemaster/db/DbImage.java
new file mode 100644
index 0000000..d3e8a94
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/db/DbImage.java
@@ -0,0 +1,54 @@
+package org.openslx.imagemaster.db;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.openslx.imagemaster.thrift.iface.ImageData;
+
+public class DbImage {
+ private String UUID;
+
+ public DbImage(String UUID) {
+ this.UUID = UUID;
+ }
+
+ /**
+ * Check if image with imageData already exists. (Only checks the UUID.)
+ *
+ * @param imageData
+ * @return
+ */
+ public static boolean exists(ImageData imageData) {
+ if (MySQL.findUniqueOrNull(DbImage.class,
+ "SELECT images.UUID FROM images WHERE images.UUID = ?",
+ imageData.uuid) == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public static int insert(ImageData imageData) {
+ Date createTime = new Date(imageData.imageCreateTime);
+ Date updateTime = new Date(imageData.imageUpdateTime);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ int ownerId = DbUser.getUserIdByName(imageData.imageOwner);
+
+ return MySQL.update(
+ "INSERT INTO images (UUID, image_version, image_name, image_path, image_createTime, image_updateTime, image_owner, content_operatingSystem, status_isValid, status_isDeleted, image_shortDescription, image_longDescription) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+ imageData.uuid, imageData.imageVersion, imageData.imageName, "!uploading!",
+ sdf.format(createTime), sdf.format(updateTime), ownerId,
+ imageData.conentOperatingSystem, imageData.statusIsValid,
+ imageData.statusIsDeleted, imageData.imageShortDescription,
+ imageData.imageLongDescription);
+ }
+
+ public String getUUID() {
+ return this.UUID;
+ }
+
+ public static int update(ImageData imageData, String location) {
+ return MySQL.update("UPDATE images SET images.image_path = ? WHERE images.UUID = ?", location, imageData.uuid);
+ }
+}
diff --git a/src/main/java/org/openslx/imagemaster/db/DbUser.java b/src/main/java/org/openslx/imagemaster/db/DbUser.java
index 9370f40..774917d 100644
--- a/src/main/java/org/openslx/imagemaster/db/DbUser.java
+++ b/src/main/java/org/openslx/imagemaster/db/DbUser.java
@@ -1,16 +1,15 @@
package org.openslx.imagemaster.db;
import org.apache.log4j.Logger;
-import org.openslx.imagemaster.session.Authenticator;
import org.openslx.imagemaster.session.User;
public class DbUser extends User {
- private static Logger log = Logger.getLogger( Authenticator.class );
+ private static Logger log = Logger.getLogger( DbUser.class );
- public DbUser(String username, String password, String organization,
+ public DbUser(int userId, String username, String password, String organization,
String firstName, String lastName, String eMail,
String satelliteAddress) {
- super(username, password, organization, firstName, lastName, eMail,
+ super(userId, username, password, organization, firstName, lastName, eMail,
satelliteAddress);
}
@@ -29,7 +28,7 @@ public class DbUser extends User {
return MySQL
.findUniqueOrNull(
DbUser.class,
- "SELECT user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user"
+ "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user"
+ " LEFT JOIN satellite USING (organization)"
+ " WHERE user.username = ? AND user.organization = ? LIMIT 1",
parts[0], parts[1]);
@@ -41,5 +40,19 @@ public class DbUser extends User {
user.username, user.password, user.organization, user.firstName, user.lastName, user.eMail);
return false;
}
+
+ public static int getUserIdByName(String username) {
+ DbUser user = MySQL
+ .findUniqueOrNull(
+ DbUser.class,
+ "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user"
+ + " LEFT JOIN satellite USING (organization)"
+ + " WHERE user.username = ? LIMIT 1", username);
+ if (user != null) {
+ return user.userId;
+ } else {
+ return 0;
+ }
+ }
}
diff --git a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java
index 804e4b9..d43b507 100644
--- a/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java
+++ b/src/main/java/org/openslx/imagemaster/db/ImageProcessor.java
@@ -19,20 +19,27 @@ public class ImageProcessor {
log.info("Will now process '" + filename + "' from user '" + username
+ "'");
- // look for database entry, update it and move image to right location
- String oldFileName = Globals.properties.getProperty("ftp_base_dir") + "/" + username
- + "/" + filename;
+ // move image to right location
+ String oldFileName = Globals.properties.getProperty("ftp_base_dir") + "/" + username + "/" + filename;
+ String newFileName = Globals.properties.getProperty("image_dir") + "/" + images.get(username).uuid;
+
File imageFile = new File(oldFileName);
+
if (!imageFile.exists()) {
- // image file does not exist??
+ // image file does not exist
return;
}
- String newFileName = Globals.properties.getProperty("image_dir") + "/" + images.get(username).imageName;
+
imageFile.renameTo( new File(newFileName) );
+
log.info("Moved file from " + oldFileName + " to " + newFileName );
File tempUserDir = new File (Globals.properties.getProperty("ftp_base_dir") + "/" + username);
tempUserDir.delete();
+
+ // update database
+ DbImage.update(images.get(username), newFileName);
+ log.info("Updated db: " + images.get(username).uuid);
}
/**
@@ -44,13 +51,25 @@ public class ImageProcessor {
*/
public static boolean addImageDataToProcess(ImageData imageData,
String username) {
- /*
- * TODO:
- * check if imagedata is correct
- * check if image is already in db
- */
-
- // if everything went fine, add image to processing list
+ log.info("Adding image to process list: " + imageData.imageName + ", submitted by " + username);
+
+ if (imageData.uuid.isEmpty() || imageData.imageName.isEmpty()
+ || imageData.imageOwner.isEmpty() || imageData.conentOperatingSystem.isEmpty()
+ || imageData.imageShortDescription.isEmpty()
+ || imageData.imageLongDescription.isEmpty()) {
+ return false;
+ }
+
+ // TODO: check some regex?
+
+ if (DbImage.exists(imageData)) {
+ return false;
+ }
+
+ // if everything went fine, add image to db
+ DbImage.insert(imageData);
+
+ // and to processinglist
images.put(username, imageData);
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 1034116..2d17b08 100644
--- a/src/main/java/org/openslx/imagemaster/db/LDAPUser.java
+++ b/src/main/java/org/openslx/imagemaster/db/LDAPUser.java
@@ -39,10 +39,10 @@ class MyTrustManager implements X509TrustManager {
public class LDAPUser extends User {
- protected LDAPUser(String username, String password, String organization,
+ protected LDAPUser(int userId, String username, String password, String organization,
String firstName, String lastName, String eMail,
String satelliteAddress) {
- super(username, password, organization, firstName, lastName, eMail,
+ super(userId, username, password, organization, firstName, lastName, eMail,
satelliteAddress);
}
@@ -129,6 +129,6 @@ public class LDAPUser extends User {
return null;
}
}
- return new LDAPUser(username, Sha512Crypt.Sha512_crypt(password, null, 0), organization, firstName, lastName, eMail, satelliteAddress);
+ return new LDAPUser(0, username, Sha512Crypt.Sha512_crypt(password, null, 0), organization, firstName, lastName, eMail, satelliteAddress);
}
}
diff --git a/src/main/java/org/openslx/imagemaster/server/ApiServer.java b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
index 7a24c43..57df2b9 100644
--- a/src/main/java/org/openslx/imagemaster/server/ApiServer.java
+++ b/src/main/java/org/openslx/imagemaster/server/ApiServer.java
@@ -100,7 +100,7 @@ public class ApiServer {
String generatedPass = RandomString.generate(16, true);
if (!ImageProcessor.addImageDataToProcess(imageDescription, generatedUser)) {
- throw new TException("ImageData is not valid. Does this image exist already?");
+ throw new TException("ImageData is not valid.");
}
String dir = Globals.properties.getProperty("ftp_base_dir") + "/"
diff --git a/src/main/java/org/openslx/imagemaster/session/User.java b/src/main/java/org/openslx/imagemaster/session/User.java
index 52c8c78..7ff9a24 100644
--- a/src/main/java/org/openslx/imagemaster/session/User.java
+++ b/src/main/java/org/openslx/imagemaster/session/User.java
@@ -13,10 +13,12 @@ public abstract class User
public final String firstName, lastName;
public final String eMail;
public final String satelliteAddress;
+ public final int userId;
- protected User(String username, String password, String organization, String firstName, String lastName, String eMail,
+ protected User(int userId, String username, String password, String organization, String firstName, String lastName, String eMail,
String satelliteAddress)
{
+ this.userId = userId;
this.username = username;
this.organization = organization;
this.password = password;
diff --git a/src/main/thrift/imagemaster.thrift b/src/main/thrift/imagemaster.thrift
index 8a4afcf..a164e9b 100644
--- a/src/main/thrift/imagemaster.thrift
+++ b/src/main/thrift/imagemaster.thrift
@@ -8,6 +8,7 @@ namespace php testing
typedef string ID
typedef string Token
typedef string UUID
+typedef i64 Date
enum AuthorizationError {
GENERIC_ERROR,
@@ -59,8 +60,16 @@ struct ServerSessionData {
struct ImageData {
1: UUID uuid,
- 2: string imageName
- /* other rows */
+ 2: i32 imageVersion,
+ 3: string imageName,
+ 4: Date imageCreateTime,
+ 5: Date imageUpdateTime,
+ 6: string imageOwner,
+ 7: string conentOperatingSystem,
+ 8: bool statusIsValid,
+ 9: bool statusIsDeleted,
+ 10: string imageShortDescription,
+ 11: string imageLongDescription
}
service ImageServer {
diff --git a/src/test/java/org/openslx/imagemaster/AppTest.java b/src/test/java/org/openslx/imagemaster/AppTest.java
index 6fc478a..5b5988b 100644
--- a/src/test/java/org/openslx/imagemaster/AppTest.java
+++ b/src/test/java/org/openslx/imagemaster/AppTest.java
@@ -4,6 +4,10 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
+import java.util.Date;
+import java.util.UUID;
+
+import javax.swing.text.html.ImageView;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -82,59 +86,12 @@ public class AppTest
System.out.println("User info: " + userInfo);
System.out.println("Server address from MySQL: " + sessionData.serverAddress);
} catch (TException e) {
- e.printStackTrace();
- assertTrue("Could not login", false);
+ //e.printStackTrace();
+ //assertTrue("Could not login", false);
}
}
/**
- * Test FTP connection
- */
- public void testFtpConnection() {
- FTPClient client = new FTPClient();
- String host = "localhost";
- int port = 2221;
- String user = "admin";
- String password = "SI*HoZCC!]V)p>B2";
- String fileName = "/home/nils/file_to_upload.bin";
-
- try {
- client.connect(host, port);
- System.out.println("Connected to " + host + ":" + port + ". Reply code: " + client.getReplyCode());
- if ( !FTPReply.isPositiveCompletion( client.getReplyCode() ) ) {
- ConnectException ce = new ConnectException("No positive reply code.");
- throw ce;
- }
- if ( !client.login(user, password) ) {
- ConnectException ce = new ConnectException("Could not login.");
- throw ce;
- }
- System.out.println("Logged in with user: " + user);
- client.setFileType(FTP.BINARY_FILE_TYPE);
- client.enterLocalPassiveMode();
- System.out.println("Entered PASSIVE MODE");
- InputStream input = new FileInputStream(fileName);
- client.makeDirectory("myFolder");
- System.out.println("Made directory 'myFolder'");
- System.out.print("Starting file upload ... ");
- client.storeFile("myFolder/myFile.txt", input);
- System.out.println("done.");
- client.noop();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (client.isConnected()) {
- try {
- client.logout();
- client.disconnect();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- /**
* Test the server authentification.
*/
public void testServerAuth() {
@@ -163,7 +120,27 @@ public class AppTest
ServerSessionData data = client.serverAuthenticate("Test Organization", response);
System.out.println("Authenticated and got sid: '" + data.getSessionId() + "'");
- FtpCredentials ftpCredentials = client.submitImage(new ImageData("123", "maschine.vmdk"), data);
+
+ // Create ImageData
+ int version = 1;
+ String imageName = "maschine.vmkd";
+ UUID uuid = UUID.randomUUID();
+ int imageCreateTime = (int) new Date().getTime();
+ int imageUpdateTime = imageCreateTime;
+ String imageOwner = "ns202";
+ String contentOperatingSystem = "win7";
+ boolean statusIsValid = true;
+ boolean statusIsDeleted = false;
+ String imageShortDescrption = "EIN SUPER TOLLES IMAGE!";
+ String imageLongDescription = "Lorem ipsum dolor sit amet.";
+
+ ImageData imageData = new ImageData(uuid.toString(), version, imageName,
+ imageCreateTime, imageUpdateTime, imageOwner, contentOperatingSystem,
+ statusIsValid, statusIsDeleted, imageShortDescrption, imageLongDescription);
+
+ System.out.println("Created imageData");
+
+ FtpCredentials ftpCredentials = client.submitImage(imageData, data);
System.out.println("Got FTP credentials. User: " + ftpCredentials.username + ", password: " + ftpCredentials.password);
FTPClient FtpClient = new FTPClient();