forked from SteamWar/SteamWar
Fix Schematic Upload
This commit is contained in:
@@ -19,14 +19,11 @@
|
||||
|
||||
package de.steamwar.routes
|
||||
|
||||
import de.steamwar.ResponseError
|
||||
import de.steamwar.plugins.SWAuthPrincipal
|
||||
import de.steamwar.plugins.SWPermissionCheck
|
||||
import de.steamwar.sql.NodeData
|
||||
import de.steamwar.sql.*
|
||||
import de.steamwar.sql.NodeData.SchematicFormat
|
||||
import de.steamwar.sql.NodeDownload
|
||||
import de.steamwar.sql.NodeMember
|
||||
import de.steamwar.sql.SWException
|
||||
import de.steamwar.sql.SchematicNode
|
||||
import dev.dewy.nbt.Nbt
|
||||
import dev.dewy.nbt.tags.collection.CompoundTag
|
||||
import io.ktor.http.*
|
||||
@@ -36,12 +33,15 @@ import io.ktor.server.request.*
|
||||
import io.ktor.server.response.*
|
||||
import io.ktor.server.routing.*
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromByteArray
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.DataInputStream
|
||||
import java.security.MessageDigest
|
||||
import java.time.Duration
|
||||
import java.time.Instant
|
||||
import java.time.temporal.ChronoUnit
|
||||
import java.util.*
|
||||
import java.util.zip.GZIPInputStream
|
||||
|
||||
@Serializable
|
||||
data class ResponseSchematic(val name: String, val id: Int, val type: String?, val owner: Int, val item: String, val lastUpdate: Long, val rank: Int, val replaceColor: Boolean, val allowReplay: Boolean) {
|
||||
@@ -109,10 +109,20 @@ fun Route.configureSchematic() {
|
||||
post {
|
||||
val file = call.receive<UploadSchematic>()
|
||||
val schemName = file.name.substringBeforeLast(".")
|
||||
|
||||
if (SchematicNode.invalidSchemName(arrayOf(schemName))) {
|
||||
call.respond(HttpStatusCode.BadRequest, ResponseError(
|
||||
error = "INVALID_NAME"
|
||||
))
|
||||
return@post
|
||||
}
|
||||
|
||||
val schemType = file.name.substringAfterLast(".")
|
||||
|
||||
if (schemType != "schem" && schemType != "schematic") {
|
||||
call.respond(HttpStatusCode.BadRequest)
|
||||
call.respond(HttpStatusCode.BadRequest, ResponseError(
|
||||
error = "INVALID_SUFFIX"
|
||||
))
|
||||
return@post
|
||||
}
|
||||
|
||||
@@ -126,7 +136,7 @@ fun Route.configureSchematic() {
|
||||
try {
|
||||
val content = Base64.getDecoder().decode(file.content)
|
||||
|
||||
var schem = nbt.fromByteArray(content)
|
||||
var schem = nbt.fromStream(DataInputStream(BufferedInputStream(GZIPInputStream(ByteArrayInputStream(content)))))
|
||||
|
||||
if (schem.size() == 1) schem = schem.first() as CompoundTag
|
||||
|
||||
@@ -144,7 +154,9 @@ fun Route.configureSchematic() {
|
||||
|
||||
call.respond(ResponseSchematic(node))
|
||||
} catch (e: Exception) {
|
||||
call.respond(HttpStatusCode.BadRequest)
|
||||
call.respond(HttpStatusCode.BadRequest, ResponseError(
|
||||
error = e.message ?: "GENERIC", code = "UPLOAD_ERROR"
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user