diff options
Diffstat (limited to 'src/main/kotlin')
-rw-r--r-- | src/main/kotlin/App.kt | 5 | ||||
-rw-r--r-- | src/main/kotlin/DatabaseController.kt | 21 | ||||
-rw-r--r-- | src/main/kotlin/FileController.kt | 18 |
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) + } } |