41 lines
1.3 KiB
Kotlin
41 lines
1.3 KiB
Kotlin
package com.smallhacker.disbrowser.resource
|
|
|
|
import com.smallhacker.disbrowser.Service
|
|
import com.smallhacker.disbrowser.asm.Address
|
|
import com.smallhacker.disbrowser.asm.MetadataLine
|
|
import com.smallhacker.disbrowser.util.toUInt24
|
|
import com.smallhacker.disbrowser.util.tryParseInt
|
|
import javax.ws.rs.Consumes
|
|
import javax.ws.rs.POST
|
|
import javax.ws.rs.Path
|
|
import javax.ws.rs.PathParam
|
|
import javax.ws.rs.core.MediaType
|
|
import javax.ws.rs.core.Response
|
|
|
|
@Path("/rest")
|
|
class RestResource {
|
|
@POST
|
|
@Path("{address}/{field}")
|
|
@Consumes(MediaType.TEXT_PLAIN)
|
|
fun getIt(@PathParam("address") address: String, @PathParam("field") fieldName: String, body: String): Response {
|
|
val parsedAddress = parseAddress(address) ?: return Response.status(400).build()
|
|
val field = when (fieldName) {
|
|
"preComment" -> MetadataLine::preComment
|
|
"comment" -> MetadataLine::comment
|
|
"label" -> MetadataLine::label
|
|
else -> return Response.status(404).build()
|
|
}
|
|
|
|
Service.updateMetadata(parsedAddress, field, body)
|
|
|
|
return Response.noContent().build()
|
|
}
|
|
|
|
|
|
private fun parseAddress(address: String): Address? {
|
|
return tryParseInt(address, 16)
|
|
?.let { Address(it.toUInt24()) }
|
|
}
|
|
|
|
}
|