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
|
||||
|
||||
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.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 org.slf4j.LoggerFactory
|
||||
import org.springframework.stereotype.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,
|
||||
logger
|
||||
logger,
|
||||
) {
|
||||
override suspend fun internalExecute(command: String, principal: Principal): Actor {
|
||||
TODO()
|
||||
override suspend fun internalExecute(command: String, principal: Principal): JsonLd {
|
||||
val actor = actorRepository.findByNameAndDomain(command, applicationConfig.url.apHost)
|
||||
?: throw IllegalArgumentException("Actor $command not found")
|
||||
return actorTranslator.translate(actor, null, null)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
import dev.usbharu.activitystreamsserialization.other.JsonLd
|
||||
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 org.springframework.http.ResponseEntity
|
||||
import org.springframework.stereotype.Controller
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PathVariable
|
||||
|
@ -14,7 +15,7 @@ class APActorController(private val getActorApplicationService: GetActorApplicat
|
|||
consumes = ["application/activity+json"],
|
||||
produces = ["application/activity+json"]
|
||||
)
|
||||
suspend fun user(@PathVariable username: String): Actor {
|
||||
return getActorApplicationService.execute(username, Anonymous)
|
||||
suspend fun user(@PathVariable username: String): ResponseEntity<JsonLd> {
|
||||
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.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.annotation.Order
|
||||
import org.springframework.http.converter.HttpMessageConverter
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver
|
||||
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
|
||||
|
||||
@Configuration
|
||||
@Order(2)
|
||||
class MvcConfigurer(
|
||||
private val jsonOrFormModelMethodProcessor: JsonOrFormModelMethodProcessor,
|
||||
private val spaInterceptor: SPAInterceptor,
|
||||
private val applicationRequestLogInterceptor: ApplicationRequestLogInterceptor
|
||||
private val applicationRequestLogInterceptor: ApplicationRequestLogInterceptor,
|
||||
) : WebMvcConfigurer {
|
||||
override fun addArgumentResolvers(resolvers: MutableList<HandlerMethodArgumentResolver>) {
|
||||
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