mirror of https://github.com/usbharu/Hideout.git
feat: 既存のgetAPの箇所を apResourceResolveServiceに切り替え
This commit is contained in:
parent
5b65630556
commit
3e7d05a128
|
@ -12,19 +12,19 @@ import dev.usbharu.hideout.domain.model.job.DeliverPostJob
|
|||
import dev.usbharu.hideout.exception.FailedToGetResourcesException
|
||||
import dev.usbharu.hideout.exception.ap.FailedToGetActivityPubResourceException
|
||||
import dev.usbharu.hideout.exception.ap.IllegalActivityPubObjectException
|
||||
import dev.usbharu.hideout.plugins.getAp
|
||||
import dev.usbharu.hideout.plugins.postAp
|
||||
import dev.usbharu.hideout.query.FollowerQueryService
|
||||
import dev.usbharu.hideout.query.MediaQueryService
|
||||
import dev.usbharu.hideout.query.PostQueryService
|
||||
import dev.usbharu.hideout.query.UserQueryService
|
||||
import dev.usbharu.hideout.repository.PostRepository
|
||||
import dev.usbharu.hideout.service.ap.resource.APResourceResolveService
|
||||
import dev.usbharu.hideout.service.ap.resource.resolve
|
||||
import dev.usbharu.hideout.service.job.JobQueueParentService
|
||||
import dev.usbharu.hideout.service.post.PostCreateInterceptor
|
||||
import dev.usbharu.hideout.service.post.PostService
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.plugins.*
|
||||
import io.ktor.client.statement.*
|
||||
import kjob.core.job.JobProps
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Deferred
|
||||
|
@ -68,7 +68,8 @@ class APNoteServiceImpl(
|
|||
private val mediaQueryService: MediaQueryService,
|
||||
@Qualifier("activitypub") private val objectMapper: ObjectMapper,
|
||||
private val applicationConfig: ApplicationConfig,
|
||||
private val postService: PostService
|
||||
private val postService: PostService,
|
||||
private val apResourceResolveService: APResourceResolveService
|
||||
|
||||
) : APNoteService, PostCreateInterceptor {
|
||||
|
||||
|
@ -143,11 +144,8 @@ class APNoteServiceImpl(
|
|||
}
|
||||
|
||||
logger.info("AP GET url: {}", url)
|
||||
val response = try {
|
||||
httpClient.getAp(
|
||||
url,
|
||||
targetActor?.let { "$targetActor#pubkey" }
|
||||
)
|
||||
val note = try {
|
||||
apResourceResolveService.resolve<Note>(url, null as Long?)
|
||||
} catch (e: ClientRequestException) {
|
||||
logger.warn(
|
||||
"FAILED Failed to retrieve ActivityPub resource. HTTP Status Code: {} url: {}",
|
||||
|
@ -156,7 +154,6 @@ class APNoteServiceImpl(
|
|||
)
|
||||
throw FailedToGetActivityPubResourceException("Could not retrieve $url.", e)
|
||||
}
|
||||
val note = objectMapper.readValue<Note>(response.bodyAsText())
|
||||
val savedNote = saveIfMissing(note, targetActor, url)
|
||||
logger.debug("SUCCESS Fetch Note url: {}", url)
|
||||
return savedNote
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package dev.usbharu.hideout.service.ap
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import dev.usbharu.hideout.config.ApplicationConfig
|
||||
import dev.usbharu.hideout.domain.model.ap.Image
|
||||
import dev.usbharu.hideout.domain.model.ap.Key
|
||||
|
@ -10,15 +9,12 @@ import dev.usbharu.hideout.domain.model.hideout.dto.RemoteUserCreateDto
|
|||
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||
import dev.usbharu.hideout.exception.FailedToGetResourcesException
|
||||
import dev.usbharu.hideout.exception.ap.IllegalActivityPubObjectException
|
||||
import dev.usbharu.hideout.plugins.getAp
|
||||
import dev.usbharu.hideout.query.UserQueryService
|
||||
import dev.usbharu.hideout.service.ap.resource.APResourceResolveService
|
||||
import dev.usbharu.hideout.service.ap.resource.resolve
|
||||
import dev.usbharu.hideout.service.core.Transaction
|
||||
import dev.usbharu.hideout.service.user.UserService
|
||||
import dev.usbharu.hideout.util.HttpUtil.Activity
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import io.ktor.http.*
|
||||
import org.springframework.beans.factory.annotation.Qualifier
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
|
@ -44,6 +40,7 @@ class APUserServiceImpl(
|
|||
private val userQueryService: UserQueryService,
|
||||
private val transaction: Transaction,
|
||||
private val applicationConfig: ApplicationConfig,
|
||||
private val apResourceResolveService: APResourceResolveService,
|
||||
@Qualifier("activitypub") private val objectMapper: ObjectMapper
|
||||
) :
|
||||
APUserService {
|
||||
|
@ -111,14 +108,8 @@ class APUserServiceImpl(
|
|||
endpoints = mapOf("sharedInbox" to "${applicationConfig.url}/inbox")
|
||||
) to userEntity
|
||||
} catch (ignore: FailedToGetResourcesException) {
|
||||
val httpResponse = if (targetActor != null) {
|
||||
httpClient.getAp(url, "$targetActor#pubkey")
|
||||
} else {
|
||||
httpClient.get(url) {
|
||||
accept(ContentType.Application.Activity)
|
||||
}
|
||||
}
|
||||
val person = objectMapper.readValue<Person>(httpResponse.bodyAsText())
|
||||
|
||||
val person = apResourceResolveService.resolve<Person>(url, null as Long?)
|
||||
|
||||
person to userService.createRemoteUser(
|
||||
RemoteUserCreateDto(
|
||||
|
|
|
@ -4,9 +4,11 @@ import com.fasterxml.jackson.databind.ObjectMapper
|
|||
import dev.usbharu.hideout.domain.model.ap.Object
|
||||
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||
import dev.usbharu.hideout.repository.UserRepository
|
||||
import dev.usbharu.hideout.util.HttpUtil.Activity
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import io.ktor.http.*
|
||||
import org.springframework.beans.factory.annotation.Qualifier
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
|
@ -46,7 +48,9 @@ class APResourceResolveServiceImpl(
|
|||
}
|
||||
|
||||
private suspend fun <T : Object> runResolve(url: String, singer: User?, clazz: Class<T>): Object {
|
||||
val bodyAsText = httpClient.get(url).bodyAsText()
|
||||
val bodyAsText = httpClient.get(url) {
|
||||
header("Accept", ContentType.Application.Activity)
|
||||
}.bodyAsText()
|
||||
return objectMapper.readValue(bodyAsText, clazz)
|
||||
}
|
||||
|
||||
|
|
|
@ -96,7 +96,8 @@ class APNoteServiceImplTest {
|
|||
objectMapper = objectMapper,
|
||||
applicationConfig = testApplicationConfig,
|
||||
postService = mock(),
|
||||
mediaQueryService = mediaQueryService
|
||||
mediaQueryService = mediaQueryService,
|
||||
apResourceResolveService = mock()
|
||||
)
|
||||
val postEntity = Post.of(
|
||||
1L,
|
||||
|
@ -136,7 +137,8 @@ class APNoteServiceImplTest {
|
|||
objectMapper = objectMapper,
|
||||
applicationConfig = testApplicationConfig,
|
||||
postService = mock(),
|
||||
mediaQueryService = mediaQueryService
|
||||
mediaQueryService = mediaQueryService,
|
||||
apResourceResolveService = mock()
|
||||
)
|
||||
activityPubNoteService.createNoteJob(
|
||||
JobProps(
|
||||
|
|
Loading…
Reference in New Issue