mirror of https://github.com/usbharu/Hideout.git
feat: /users/:usernameにアクセスすることでActivityを得られるように
This commit is contained in:
parent
98964cc656
commit
d4157a3b38
|
@ -1,19 +1,30 @@
|
||||||
package dev.usbharu.hideout.activitypub.application.actor
|
package dev.usbharu.hideout.activitypub.application.actor
|
||||||
|
|
||||||
|
import dev.usbharu.activitystreamsserialization.other.JsonLd
|
||||||
|
import dev.usbharu.hideout.activitypub.external.activitystreams.ActorTranslator
|
||||||
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.Transaction
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
import dev.usbharu.hideout.core.domain.model.actor.Actor
|
import dev.usbharu.hideout.core.config.ApplicationConfig
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
import dev.usbharu.hideout.core.domain.model.support.domain.apHost
|
||||||
import dev.usbharu.hideout.core.domain.model.support.principal.Principal
|
import dev.usbharu.hideout.core.domain.model.support.principal.Principal
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class GetActorApplicationService(transaction: Transaction) : AbstractApplicationService<String, Actor>(
|
class GetActorApplicationService(
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val applicationConfig: ApplicationConfig,
|
||||||
|
private val actorTranslator: ActorTranslator,
|
||||||
|
transaction: Transaction,
|
||||||
|
) : AbstractApplicationService<String, JsonLd>(
|
||||||
transaction,
|
transaction,
|
||||||
logger
|
logger,
|
||||||
) {
|
) {
|
||||||
override suspend fun internalExecute(command: String, principal: Principal): Actor {
|
override suspend fun internalExecute(command: String, principal: Principal): JsonLd {
|
||||||
TODO()
|
val actor = actorRepository.findByNameAndDomain(command, applicationConfig.url.apHost)
|
||||||
|
?: throw IllegalArgumentException("Actor $command not found")
|
||||||
|
return actorTranslator.translate(actor, null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package dev.usbharu.hideout.activitypub.config
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.activitypub.external.activitystreams.ActivityStreamHttpMessageConverter
|
||||||
|
import org.springframework.context.annotation.Configuration
|
||||||
|
import org.springframework.core.annotation.Order
|
||||||
|
import org.springframework.http.converter.HttpMessageConverter
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Order(2)
|
||||||
|
class ActivityPubWebMvcConfigurer(private val activityStreamsHttpMessageConverter: ActivityStreamHttpMessageConverter) :
|
||||||
|
WebMvcConfigurer {
|
||||||
|
override fun extendMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
|
||||||
|
converters.add(activityStreamsHttpMessageConverter)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package dev.usbharu.hideout.activitypub.external.activitystreams
|
||||||
|
|
||||||
|
import com.github.jsonldjava.core.JsonLdOptions
|
||||||
|
import com.github.jsonldjava.core.JsonLdProcessor
|
||||||
|
import com.github.jsonldjava.utils.JsonUtils
|
||||||
|
import dev.usbharu.activitystreamsserialization.json.impl.JacksonSerializationConverter
|
||||||
|
import dev.usbharu.activitystreamsserialization.other.JsonLd
|
||||||
|
import org.springframework.http.HttpInputMessage
|
||||||
|
import org.springframework.http.HttpOutputMessage
|
||||||
|
import org.springframework.http.MediaType
|
||||||
|
import org.springframework.http.converter.HttpMessageConverter
|
||||||
|
import org.springframework.stereotype.Component
|
||||||
|
|
||||||
|
@Component
|
||||||
|
class ActivityStreamHttpMessageConverter : HttpMessageConverter<JsonLd> {
|
||||||
|
override fun canRead(clazz: Class<*>, mediaType: MediaType?): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canWrite(clazz: Class<*>, mediaType: MediaType?): Boolean {
|
||||||
|
return JsonLd::class.java.isAssignableFrom(clazz)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getSupportedMediaTypes(): MutableList<MediaType> {
|
||||||
|
return mutableListOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun write(t: JsonLd, contentType: MediaType?, outputMessage: HttpOutputMessage) {
|
||||||
|
outputMessage.headers.contentType = MediaType.APPLICATION_JSON
|
||||||
|
outputMessage.body.bufferedWriter()
|
||||||
|
.use {
|
||||||
|
it.write(JsonUtils.toString(
|
||||||
|
JsonLdProcessor.compact(
|
||||||
|
JsonUtils.fromString(JacksonSerializationConverter.convert(t.json).toString()), "https://www.w3.org/ns/activitystreams",
|
||||||
|
JsonLdOptions()
|
||||||
|
)
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun read(clazz: Class<out JsonLd>, inputMessage: HttpInputMessage): JsonLd {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,9 @@
|
||||||
package dev.usbharu.hideout.activitypub.`interface`.api
|
package dev.usbharu.hideout.activitypub.`interface`.api
|
||||||
|
|
||||||
|
import dev.usbharu.activitystreamsserialization.other.JsonLd
|
||||||
import dev.usbharu.hideout.activitypub.application.actor.GetActorApplicationService
|
import dev.usbharu.hideout.activitypub.application.actor.GetActorApplicationService
|
||||||
import dev.usbharu.hideout.core.domain.model.actor.Actor
|
|
||||||
import dev.usbharu.hideout.core.domain.model.support.principal.Anonymous
|
import dev.usbharu.hideout.core.domain.model.support.principal.Anonymous
|
||||||
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.stereotype.Controller
|
import org.springframework.stereotype.Controller
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
import org.springframework.web.bind.annotation.PathVariable
|
||||||
|
@ -14,7 +15,7 @@ class APActorController(private val getActorApplicationService: GetActorApplicat
|
||||||
consumes = ["application/activity+json"],
|
consumes = ["application/activity+json"],
|
||||||
produces = ["application/activity+json"]
|
produces = ["application/activity+json"]
|
||||||
)
|
)
|
||||||
suspend fun user(@PathVariable username: String): Actor {
|
suspend fun user(@PathVariable username: String): ResponseEntity<JsonLd> {
|
||||||
return getActorApplicationService.execute(username, Anonymous)
|
return ResponseEntity.ok(getActorApplicationService.execute(username, Anonymous))
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,6 +23,7 @@ import dev.usbharu.hideout.generate.JsonOrFormModelMethodProcessor
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean
|
import org.springframework.boot.web.servlet.FilterRegistrationBean
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
|
import org.springframework.core.annotation.Order
|
||||||
import org.springframework.http.converter.HttpMessageConverter
|
import org.springframework.http.converter.HttpMessageConverter
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver
|
||||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
|
||||||
|
@ -31,10 +32,11 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBody
|
||||||
import org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor
|
import org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@Order(2)
|
||||||
class MvcConfigurer(
|
class MvcConfigurer(
|
||||||
private val jsonOrFormModelMethodProcessor: JsonOrFormModelMethodProcessor,
|
private val jsonOrFormModelMethodProcessor: JsonOrFormModelMethodProcessor,
|
||||||
private val spaInterceptor: SPAInterceptor,
|
private val spaInterceptor: SPAInterceptor,
|
||||||
private val applicationRequestLogInterceptor: ApplicationRequestLogInterceptor
|
private val applicationRequestLogInterceptor: ApplicationRequestLogInterceptor,
|
||||||
) : WebMvcConfigurer {
|
) : WebMvcConfigurer {
|
||||||
override fun addArgumentResolvers(resolvers: MutableList<HandlerMethodArgumentResolver>) {
|
override fun addArgumentResolvers(resolvers: MutableList<HandlerMethodArgumentResolver>) {
|
||||||
resolvers.add(jsonOrFormModelMethodProcessor)
|
resolvers.add(jsonOrFormModelMethodProcessor)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package dev.usbharu.hideout.core.domain.model.support.principal
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.support.acct.Acct
|
||||||
|
|
||||||
|
class RemoteUser(actorId: ActorId, acct: Acct?) : Principal(actorId, null, acct)
|
Loading…
Reference in New Issue