aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/App.kt5
-rw-r--r--src/main/kotlin/DatabaseController.kt21
-rw-r--r--src/main/kotlin/FileController.kt18
3 files changed, 37 insertions, 7 deletions
diff --git a/src/main/kotlin/App.kt b/src/main/kotlin/App.kt
index 8fb289c..39275ec 100644
--- a/src/main/kotlin/App.kt
+++ b/src/main/kotlin/App.kt
@@ -118,6 +118,11 @@ fun main() {
* Shows the shared file
*/
get("/shared", fileController::renderShared, roles(Roles.GUEST))
+
+ /**
+ * Shares file in directory
+ */
+ post("/shared", fileController::handleSharedFile, roles(Roles.GUEST))
}
}
diff --git a/src/main/kotlin/DatabaseController.kt b/src/main/kotlin/DatabaseController.kt
index b3fac60..6ec13e4 100644
--- a/src/main/kotlin/DatabaseController.kt
+++ b/src/main/kotlin/DatabaseController.kt
@@ -243,12 +243,12 @@ class DatabaseController(dbFileLocation: String = "main.db") {
}
/**
- * Returns the accessId of the given File
+ * Returns the accessId of the given file
*/
fun getAccessId(fileLocation: String, userId: Int): String {
return transaction {
try {
- FileLocation.update({ (FileLocation.userId eq userId) and (FileLocation.path eq fileLocation) }) {
+ FileLocation.update({ (FileLocation.userId eq userId) and (FileLocation.path like "$fileLocation%") }) {
it[isShared] = true
}
FileLocation.select { (FileLocation.path eq fileLocation) and (FileLocation.userId eq userId) }.map { it[FileLocation.accessId] }[0]
@@ -259,6 +259,23 @@ class DatabaseController(dbFileLocation: String = "main.db") {
}
/**
+ * Returns accessId of file in directory
+ */
+ fun getAccessIdOfDirectory(fileName: String, accessId: String): String {
+ return transaction {
+ try {
+ val fileData =
+ FileLocation.select { FileLocation.accessId eq accessId }.map { it[FileLocation.path] to it[FileLocation.userId] to it[FileLocation.isShared] }[0]
+ if (fileData.second)
+ FileLocation.select { (FileLocation.path eq "${fileData.first.first}${fileName.substring(1)}") and (FileLocation.userId eq fileData.first.second) }.map { it[FileLocation.accessId] }[0]
+ else ""
+ } catch (_: Exception) {
+ ""
+ }
+ }
+ }
+
+ /**
* Gets the shared file via [accessId]
*/
fun getSharedFile(accessId: String): ReturnFileData {
diff --git a/src/main/kotlin/FileController.kt b/src/main/kotlin/FileController.kt
index 40ca1c9..1d5bada 100644
--- a/src/main/kotlin/FileController.kt
+++ b/src/main/kotlin/FileController.kt
@@ -48,7 +48,8 @@ class FileController {
ctx.render(
"files.rocker.html", TemplateUtil.model(
"files", files,
- "path", (if (firstParam.firstOrNull() == '/') firstParam.drop(1) else firstParam)
+ "path", (if (firstParam.firstOrNull() == '/') firstParam.drop(1) else firstParam),
+ "isShared", false
)
)
}
@@ -194,12 +195,11 @@ class FileController {
)
)
} else {
- val fileProbe = Files.probeContentType(Paths.get(sharedFileLocation)) // is null if file type is not recognized
- ctx.contentType(fileProbe)
+ // TODO: Fix name of downloaded file ("shared")
+ ctx.contentType(Files.probeContentType(Paths.get(sharedFileLocation)))
ctx.result(FileInputStream(File(sharedFileLocation)))
}
} else {
- // TODO: Add support for accessing files in shared directories
// TODO: Combine the two file-crawling-render functions
val files = ArrayList<Array<String>>()
Files.list(Paths.get(sharedFileLocation)).forEach {
@@ -226,7 +226,8 @@ class FileController {
"files.rocker.html", TemplateUtil.model(
"files", files,
"path",
- (if (sharedFileData.fileLocation.firstOrNull() == '/') sharedFileData.fileLocation.drop(1) else sharedFileData.fileLocation)
+ (if (sharedFileData.fileLocation.firstOrNull() == '/') sharedFileData.fileLocation.drop(1) else sharedFileData.fileLocation),
+ "isShared", true
)
)
}
@@ -234,4 +235,11 @@ class FileController {
log.info("Unknown file!")
}
}
+
+ fun handleSharedFile(ctx: Context) {
+ val fileName = ctx.formParam("fileName").toString()
+ val accessId = ctx.formParam("accessId").toString()
+ val returnAccessId = databaseController.getAccessIdOfDirectory(fileName, accessId)
+ ctx.result(returnAccessId)
+ }
}