feat: ActorをJSONに変換する処理を追加

This commit is contained in:
usbharu 2025-02-14 17:46:41 +09:00
parent ae0e4a4013
commit 98964cc656
Signed by: usbharu
GPG Key ID: 8CB1087135660B8D
4 changed files with 59 additions and 2 deletions

View File

@ -20,6 +20,15 @@ repositories {
maven {
url = uri("https://git.usbharu.dev/api/packages/usbharu/maven")
}
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/usbharu/activity-streams-serialization")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
}
}
}
dependencies {
@ -33,6 +42,7 @@ dependencies {
implementation(libs.owl.producer.embedded)
implementation(libs.owl.common.serialize.jackson)
implementation(libs.activity.streams.serialization)
implementation(libs.jsonld)
implementation(libs.coroutines.core)
}
@ -66,7 +76,7 @@ tasks {
exclude("**/org/koin/ksp/generated/**", "**/generated/**")
}
}
withType<io.gitlab.arturbosch.detekt.DetektCreateBaselineTask>() {
withType<io.gitlab.arturbosch.detekt.DetektCreateBaselineTask> {
configureEach {
exclude("**/org/koin/ksp/generated/**", "**/generated/**")
}

View File

@ -5,7 +5,9 @@ import dev.usbharu.activitystreamsserialization.dsl.ActivityBuilder
import dev.usbharu.activitystreamsserialization.other.JsonLd
import dev.usbharu.hideout.core.domain.model.actor.Actor
import dev.usbharu.hideout.core.domain.model.media.Media
import org.springframework.stereotype.Service
@Service
class ActorTranslator {
fun translate(actor: Actor, iconMedia: Media?, bannerMedia: Media?): JsonLd {
//todo actorにbot等の属性が生えてきたら対応する

View File

@ -1,12 +1,55 @@
package dev.usbharu.hideout.activitypub.external.activitystreams
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
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 org.junit.jupiter.api.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class ActorTranslatorTest {
@Test
fun translate() {
val translate = ActorTranslator().translate(TestActorFactory.create(), null, null)
val actor = TestActorFactory.create()
val translate = ActorTranslator().translate(actor, null, null)
println(translate)
val compact = JsonLdProcessor.compact(
JsonUtils.fromString(JacksonSerializationConverter.convert(translate.json).toString()),
"https://www.w3.org/ns/activitystreams",
JsonLdOptions()
)
println(JsonUtils.toPrettyString(compact))
val readTree = jacksonObjectMapper().readTree(JsonUtils.toString(compact))
assertEquals(actor.url.toString(), readTree["id"].asText())
assertEquals("Person", readTree["type"].asText())
// inbox, outbox のテスト
assertEquals(actor.inbox.toString(), readTree["inbox"].asText())
assertEquals(actor.outbox.toString(), readTree["outbox"].asText())
// followers, following のテスト
assertEquals(actor.followersEndpoint.toString(), readTree["followers"].asText())
assertEquals(actor.followingEndpoint.toString(), readTree["following"].asText())
// preferredUsername のテスト
assertEquals(actor.name.name, readTree["preferredUsername"].asText())
// name のテスト
assertEquals(actor.screenName.screenName, readTree["name"].asText())
// publicKey のテスト
val publicKeyNode = readTree["https://w3id.org/security#publicKey"]
assertTrue(publicKeyNode.isObject) // publicKey がオブジェクトか確認
assertEquals(actor.keyId.keyId, publicKeyNode["id"].asText())
assertEquals(actor.url.toString(), publicKeyNode["https://w3id.org/security#owner"].asText())
assertEquals(actor.publicKey.publicKey, publicKeyNode["https://w3id.org/security#publicKeyPem"].asText())
// @context のテスト
assertEquals("https://www.w3.org/ns/activitystreams", readTree["@context"].asText())
}
}

View File

@ -108,6 +108,8 @@ activity-streams-serialization = { module = "dev.usbharu:activity-streams-serial
logback-ecs-encoder = { module = "co.elastic.logging:logback-ecs-encoder", version = "1.6.0" }
jsonld = { module = "com.github.jsonld-java:jsonld-java", version = "0.13.5" }
[bundles]
exposed = ["exposed-core", "exposed-java-time", "exposed-jdbc", "exposed-spring"]