summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodulserver')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowFinalizer.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSession.java47
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSessionManager.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java3
4 files changed, 30 insertions, 24 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowFinalizer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowFinalizer.java
index b305374a..8a219ce1 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowFinalizer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowFinalizer.java
@@ -156,7 +156,7 @@ public class CowFinalizer {
User.canEditBaseImageOrFail(data.owner, data.imageBaseId);
copy = false;
} catch (Exception e) {
-
+ LOGGER.info("Permission check for EDIT failed, falling back to COPY");
}
}
String baseId = data.imageBaseId;
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSession.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSession.java
index f53cb2cc..cfe17a4e 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSession.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSession.java
@@ -10,8 +10,12 @@ import java.util.List;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.openslx.bwlp.sat.permissions.User;
import org.openslx.bwlp.sat.util.Configuration;
import org.openslx.bwlp.sat.util.Formatter;
+import org.openslx.bwlp.thrift.iface.TAuthorizationException;
+import org.openslx.bwlp.thrift.iface.TInvocationException;
+import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.util.Json;
import org.openslx.util.Util;
@@ -70,13 +74,28 @@ public class CowSession {
private CowFinalizer finalizer;
public CowSession(String sourceFileName, byte[] machineDescription, String imageBaseId, String vmName,
- boolean restricted, UserInfo owner, String sessionType) {
+ boolean restricted, UserInfo owner, String sessionType) throws RuntimeException {
+ if ("EDIT".equals(sessionType)) {
+ try {
+ User.canEditBaseImageOrFail(owner, imageBaseId);
+ } catch (TInvocationException | TNotFoundException | TAuthorizationException e) {
+ LOGGER.warn(Formatter.userFullName(owner) + " requested EDIT CoW session, but no permission", e);
+ throw new RuntimeException("EDIT permission denied");
+ }
+ }
RandomAccessFile srcFile;
+ long sfl = -1;
try {
srcFile = new RandomAccessFile(Configuration.getVmStoreBasePath() + "/" + sourceFileName, "r");
} catch (IOException e) {
- setError("Cannot open source file for reading", e);
- srcFile = null;
+ LOGGER.error("Cannot open source file for reading", e);
+ throw new RuntimeException("Cannot open source file for reading");
+ }
+ try {
+ sfl = srcFile.length();
+ } catch (IOException e) {
+ LOGGER.error("Cannot determine size of source file", e);
+ throw new RuntimeException("Cannot determine size of source file");
}
// Create filenames
File tmpFile = null;
@@ -89,28 +108,19 @@ public class CowSession {
Formatter.vmName(System.currentTimeMillis(), owner, vmName,
ext)).getAbsoluteFile();
RandomAccessFile df = null;
- long sfl = -1;
try {
df = new RandomAccessFile(tmpFile, "rw");
} catch (Exception e) {
- setError("Cannot open destination file for writing", e);
- }
- if (srcFile != null) {
- try {
- sfl = srcFile.length();
- } catch (IOException e) {
- setError("Cannot determine size of source file", e);
- }
+ Util.safeClose(srcFile);
+ LOGGER.error("Cannot open destination file for writing", e);
+ throw new RuntimeException("Cannot open destination file for writing");
}
this.sourceFileSize = sfl;
- if (srcFile != null && df != null && sfl != -1) {
- this.sourceFile = srcFile;
- this.destinationFile = df;
- } else {
- Util.safeClose(srcFile, df);
- }
+ this.sourceFile = srcFile;
+ this.destinationFile = df;
this.data = new CowSessionData(imageBaseId, restricted, tmpFile, finalFile, owner,
machineDescription, sessionType);
+ LOGGER.info("Started new " + sessionType + " CoW session for " + Formatter.userFullName(owner));
startCopying();
}
@@ -135,6 +145,7 @@ public class CowSession {
ret.tasks.add(new ProgressItem("Copying source file", (int) (fileCopyPosition * 100 / sourceFileSize),
errorMessage));
} else {
+ ret.tasks.add(new ProgressItem("Copying source file", 100, null));
ret.tasks.add(new ProgressItem("Waiting for Upload to finish",
status == Status.WAITING_FOR_UPLOAD_DONE ? -1 : 100, errorMessage));
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSessionManager.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSessionManager.java
index 679e2551..197341fe 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSessionManager.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/cow/CowSessionManager.java
@@ -67,8 +67,6 @@ public class CowSessionManager {
/**
* Create a new cow session for the given image. Returns an according session id.
* On error, an exception is thrown, this will never return null.
- * @param sessionType
- * @throws RuntimeException
*/
public static String create(String cowid, LaunchData ld, String sessionType) throws RuntimeException {
UserInfo user = SessionManager.get(cowid);
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
index eed9651c..29314db4 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
@@ -227,7 +227,6 @@ public class WebServer extends NanoHTTPD {
}
if (finalSize < 0 || finalSize > limit)
return badRequest("Illegal final file size");
- LOGGER.info("Got upload finished for CoW session");
try {
session.uploadFinished(finalSize);
} catch (Exception e) {
@@ -244,7 +243,6 @@ public class WebServer extends NanoHTTPD {
CowSession session = CowSessionManager.get(sessionId);
if (session == null)
return notFound("Invalid session ID");
- LOGGER.info("User requested finalization for CoW session");
try {
session.requestFinalization();
} catch (Exception e) {
@@ -262,7 +260,6 @@ public class WebServer extends NanoHTTPD {
CowSession session = CowSessionManager.get(sessionId);
if (session == null)
return notFound("Invalid session ID");
- LOGGER.info("User sent abort request for CoW session");
session.abort();
return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", "OK");
}