Remove Schematic Download
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Dieser Commit ist enthalten in:
Chaoscaot 2024-01-06 16:40:58 +01:00
Ursprung 8523edaa76
Commit da6f26f13b

Datei anzeigen

@ -22,9 +22,7 @@ package de.steamwar.routes
import de.steamwar.plugins.SWAuthPrincipal
import de.steamwar.plugins.SWPermissionCheck
import de.steamwar.sql.NodeData
import de.steamwar.sql.NodeDownload
import de.steamwar.sql.NodeMember
import de.steamwar.sql.SWException
import de.steamwar.sql.SchematicNode
import io.ktor.http.*
import io.ktor.server.application.*
@ -34,9 +32,6 @@ import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.serialization.Serializable
import java.security.MessageDigest
import java.time.Duration
import java.time.Instant
import java.time.temporal.ChronoUnit
import java.util.*
@Serializable
@ -72,44 +67,6 @@ data class SchematicCode(val id: Int, val code: String, val expires: Long)
data class UploadSchematic(val name: String, val content: String)
fun Route.configureSchematic() {
get("/download/{code}") {
val code = call.parameters["code"] ?: run {
call.respond(HttpStatusCode.BadRequest)
return@get
}
val dl = NodeDownload.get(code) ?: run {
call.respond(HttpStatusCode.NotFound)
return@get
}
dl.delete()
if(dl.timestamp.toInstant().plus(Duration.of(5, ChronoUnit.MINUTES)).isBefore(Instant.now())) {
call.respond(HttpStatusCode.Gone)
return@get
}
val node = SchematicNode.getSchematicNode(dl.nodeId) ?: run {
call.respond(HttpStatusCode.NotFound)
return@get
}
val user = call.principal<SWAuthPrincipal>()?.user
if(user != null && !node.accessibleByUser(user)) {
call.respond(HttpStatusCode.Forbidden)
SWException.log("User ${user.userName} tried to download schematic ${node.name} without permission", user.id.toString())
return@get
}
val data = NodeData.get(node) ?: run {
call.respond(HttpStatusCode.InternalServerError)
return@get
}
call.response.header("Content-Disposition", "attachment; filename=\"${node.name}.${if (data.nodeFormat) "schem" else "schematic"}\"")
call.respondBytes(data.schemData().readAllBytes(), contentType = ContentType.Application.OctetStream, status = HttpStatusCode.OK)
}
route("/schem") {
install(SWPermissionCheck)
get {
@ -204,31 +161,6 @@ fun Route.configureSchematic() {
}
}.map { ResponseSchematic(it) }, parent.generateBreadcrumbsMap(user).map { ResponseBreadcrumb(it.key, it.value) }))
}
get("/download") {
val user = call.principal<SWAuthPrincipal>()!!.user
val schemId = call.parameters["id"]?.toIntOrNull() ?: run {
call.respond(HttpStatusCode.BadRequest)
return@get
}
val schem = SchematicNode.getSchematicNode(schemId) ?: run {
call.respond(HttpStatusCode.NotFound)
return@get
}
if(schem.owner != user.id) {
call.respond(HttpStatusCode.Forbidden)
return@get
}
val code = generateCode()
val dl = NodeDownload.addCode(schem, code)
val response = SchematicCode(schemId, code, dl.timestamp.toInstant().plus(Duration.of(5, ChronoUnit.MINUTES)).epochSecond);
call.respond(response)
}
}
}
}