mirror of https://github.com/usbharu/Hideout.git
feat: ActivityPubの判定をゆるく
This commit is contained in:
parent
527750b3a6
commit
2f15b0e3e4
|
@ -4,7 +4,6 @@ import io.ktor.http.*
|
||||||
import io.ktor.server.application.*
|
import io.ktor.server.application.*
|
||||||
import io.ktor.server.plugins.statuspages.*
|
import io.ktor.server.plugins.statuspages.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
|
||||||
|
|
||||||
fun Application.configureStatusPages() {
|
fun Application.configureStatusPages() {
|
||||||
install(StatusPages) {
|
install(StatusPages) {
|
||||||
|
|
|
@ -2,29 +2,33 @@ package dev.usbharu.hideout.routing.activitypub
|
||||||
|
|
||||||
import dev.usbharu.hideout.config.Config
|
import dev.usbharu.hideout.config.Config
|
||||||
import dev.usbharu.hideout.exception.ParameterNotExistException
|
import dev.usbharu.hideout.exception.ParameterNotExistException
|
||||||
import dev.usbharu.hideout.service.activitypub.ActivityPubService
|
|
||||||
import dev.usbharu.hideout.service.activitypub.ActivityPubUserService
|
import dev.usbharu.hideout.service.activitypub.ActivityPubUserService
|
||||||
import dev.usbharu.hideout.util.HttpUtil.Activity
|
import dev.usbharu.hideout.util.HttpUtil.Activity
|
||||||
|
import dev.usbharu.hideout.util.HttpUtil.JsonLd
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.server.application.*
|
import io.ktor.server.application.*
|
||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
|
|
||||||
fun Routing.usersAP(activityPubUserService:ActivityPubUserService){
|
fun Routing.usersAP(activityPubUserService: ActivityPubUserService) {
|
||||||
route("/users/{name}"){
|
route("/users/{name}") {
|
||||||
createChild(ContentTypeRouteSelector(ContentType.Application.Activity)).handle {
|
createChild(ContentTypeRouteSelector(ContentType.Application.Activity, ContentType.Application.JsonLd)).handle {
|
||||||
val name = call.parameters["name"] ?: throw ParameterNotExistException("Parameter(name='name') does not exist.")
|
val name =
|
||||||
|
call.parameters["name"] ?: throw ParameterNotExistException("Parameter(name='name') does not exist.")
|
||||||
val person = activityPubUserService.getPersonByName(name)
|
val person = activityPubUserService.getPersonByName(name)
|
||||||
call.response.header("Content-Type", ContentType.Application.Activity.toString())
|
call.response.header("Content-Type", ContentType.Application.Activity.toString())
|
||||||
call.respond(HttpStatusCode.OK,Config.configData.objectMapper.writeValueAsString(person))
|
call.respond(HttpStatusCode.OK, Config.configData.objectMapper.writeValueAsString(person))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContentTypeRouteSelector(private val contentType: ContentType) : RouteSelector() {
|
class ContentTypeRouteSelector(private vararg val contentType: ContentType) : RouteSelector() {
|
||||||
override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation {
|
override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation {
|
||||||
return if (ContentType.parse(context.call.request.accept() ?: return RouteSelectorEvaluation.FailedParameter) == contentType) {
|
|
||||||
|
val requestContentType =
|
||||||
|
ContentType.parse(context.call.request.accept() ?: return RouteSelectorEvaluation.FailedParameter)
|
||||||
|
return if (contentType.any { contentType -> contentType.match(requestContentType) }) {
|
||||||
RouteSelectorEvaluation.Constant
|
RouteSelectorEvaluation.Constant
|
||||||
} else {
|
} else {
|
||||||
RouteSelectorEvaluation.FailedParameter
|
RouteSelectorEvaluation.FailedParameter
|
||||||
|
|
|
@ -28,5 +28,8 @@ object HttpUtil {
|
||||||
|
|
||||||
val ContentType.Application.Activity: ContentType
|
val ContentType.Application.Activity: ContentType
|
||||||
get() = ContentType("application", "activity+json")
|
get() = ContentType("application", "activity+json")
|
||||||
|
|
||||||
|
val ContentType.Application.JsonLd: ContentType
|
||||||
|
get() = ContentType("application", "ld+json", listOf(HeaderValueParam("profile", "https://www.w3.org/ns/activitystreams")))
|
||||||
// fun
|
// fun
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue