From 8b6b06ea3b4099bce2c87b923bc0d2e1bc6fa732 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 21 May 2022 15:59:30 +0100 Subject: [PATCH] Adapt desensitize in StructureToStringTransformer --- .../kotlin/pipeline/ProcessorPipeline.kt | 5 +++-- .../commonMain/kotlin/utils/contentToString.kt | 15 ++++++++++++++- .../testFramework/desensitizer/Desensitizer.kt | 2 +- .../utils/StructureToStringTransformerLegacy.kt | 2 ++ .../utils/StructureToStringTransformerNew.kt | 13 +++++++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/pipeline/ProcessorPipeline.kt b/mirai-core/src/commonMain/kotlin/pipeline/ProcessorPipeline.kt index 03954302a..c3f4ad857 100644 --- a/mirai-core/src/commonMain/kotlin/pipeline/ProcessorPipeline.kt +++ b/mirai-core/src/commonMain/kotlin/pipeline/ProcessorPipeline.kt @@ -11,6 +11,7 @@ package net.mamoe.mirai.internal.pipeline import net.mamoe.mirai.internal.message.contextualBugReportException import net.mamoe.mirai.internal.network.components.NoticeProcessor +import net.mamoe.mirai.internal.utils.structureToStringAndDesensitizeIfAvailable import net.mamoe.mirai.utils.* import java.io.Closeable import java.util.* @@ -178,7 +179,7 @@ protected constructor( attributes: TypeSafeMap, ) : AbstractProcessorPipelineContext(attributes, traceLogging) { override suspend fun processAlso(data: D, attributes: TypeSafeMap): Collection { - traceLogging.info { "processAlso: data=$data" } + traceLogging.info { "processAlso: data=${data.structureToStringAndDesensitizeIfAvailable()}" } return process(data, this.attributes + attributes).also { this.collected.data += it traceLogging.info { "processAlso: result=$it" } @@ -195,7 +196,7 @@ protected constructor( ): Unit = throw e override suspend fun process(data: D, attributes: TypeSafeMap): Collection { - traceLogging.info { "process: data=$data" } + traceLogging.info { "process: data=${data.structureToStringAndDesensitizeIfAvailable()}" } val context = createContext(attributes) val diff = if (traceLogging.isEnabled) CollectionDiff() else null diff --git a/mirai-core/src/commonMain/kotlin/utils/contentToString.kt b/mirai-core/src/commonMain/kotlin/utils/contentToString.kt index f04998fca..31898b93b 100644 --- a/mirai-core/src/commonMain/kotlin/utils/contentToString.kt +++ b/mirai-core/src/commonMain/kotlin/utils/contentToString.kt @@ -26,6 +26,16 @@ internal fun Any?.structureToStringIfAvailable(): String? { } else null } + +internal fun Any?.structureToStringAndDesensitize(): String = + StructureToStringTransformer.instance.transformAndDesensitize(this) + +internal fun Any?.structureToStringAndDesensitizeIfAvailable(): String? { + return if (StructureToStringTransformer.available) { + StructureToStringTransformer.instance.transformAndDesensitize(this) + } else null +} + private val SoutvLogger: MiraiLogger by lazy { MiraiLogger.Factory.create( StructureToStringTransformer::class, @@ -37,12 +47,15 @@ internal fun Any?.printStructure(name: String = "unnamed") { return SoutvLogger.debug { "$name = ${this.structureToString()}" } } -internal fun interface StructureToStringTransformer { +internal interface StructureToStringTransformer { fun transform(any: Any?): String + fun transformAndDesensitize(any: Any?): String + companion object { private class ObjectToStringStructureToStringTransformer : StructureToStringTransformer { override fun transform(any: Any?): String = any.toString() + override fun transformAndDesensitize(any: Any?): String = any.toString() } val instance by lazy { diff --git a/mirai-core/src/commonTest/kotlin/testFramework/desensitizer/Desensitizer.kt b/mirai-core/src/commonTest/kotlin/testFramework/desensitizer/Desensitizer.kt index c25654f6a..70a84f536 100644 --- a/mirai-core/src/commonTest/kotlin/testFramework/desensitizer/Desensitizer.kt +++ b/mirai-core/src/commonTest/kotlin/testFramework/desensitizer/Desensitizer.kt @@ -165,7 +165,7 @@ private val format = Yaml { } -private class DesensitizationVisitor( +internal class DesensitizationVisitor( private val desensitizer: Desensitizer, ) : ValueDescTransformerNotNull() { override fun visitValue(desc: ValueDesc, data: Nothing?): ValueDesc { diff --git a/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerLegacy.kt b/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerLegacy.kt index 23666fc10..29b67d186 100644 --- a/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerLegacy.kt +++ b/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerLegacy.kt @@ -10,6 +10,7 @@ package net.mamoe.mirai.internal.utils import kotlinx.serialization.Transient +import net.mamoe.mirai.internal.testFramework.desensitizer.Desensitizer import net.mamoe.mirai.utils.toUHexString import java.lang.reflect.Modifier import kotlin.reflect.KClass @@ -20,6 +21,7 @@ import kotlin.reflect.jvm.javaField internal class StructureToStringTransformerLegacy : StructureToStringTransformer { override fun transform(any: Any?): String = any._miraiContentToString() + override fun transformAndDesensitize(any: Any?): String = Desensitizer.desensitize(any._miraiContentToString()) private val indent: String = " ".repeat(4) diff --git a/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerNew.kt b/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerNew.kt index 198baea4c..72634638c 100644 --- a/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerNew.kt +++ b/mirai-core/src/commonTest/kotlin/utils/StructureToStringTransformerNew.kt @@ -15,6 +15,8 @@ import net.mamoe.mirai.internal.testFramework.codegen.descriptors.transform import net.mamoe.mirai.internal.testFramework.codegen.removeDefaultValues import net.mamoe.mirai.internal.testFramework.codegen.visitors.OptimizeByteArrayAsHexStringTransformer import net.mamoe.mirai.internal.testFramework.codegen.visitors.renderToString +import net.mamoe.mirai.internal.testFramework.desensitizer.DesensitizationVisitor +import net.mamoe.mirai.internal.testFramework.desensitizer.Desensitizer internal class StructureToStringTransformerNew : StructureToStringTransformer { private val legacy = StructureToStringTransformerLegacy() @@ -26,4 +28,15 @@ internal class StructureToStringTransformerNew : StructureToStringTransformer { .removeDefaultValues() .renderToString() }.getOrNull() ?: legacy.transform(any) + + override fun transformAndDesensitize(any: Any?): String { + val desensitizer = Desensitizer.local + return kotlin.runCatching { + ValueDescAnalyzer.analyze(any) + .transform(OptimizeByteArrayAsHexStringTransformer()) + .removeDefaultValues() + .transform(DesensitizationVisitor(desensitizer)) + .renderToString() + }.getOrNull() ?: legacy.transform(any) + } } \ No newline at end of file