Adapt desensitize in StructureToStringTransformer

This commit is contained in:
Him188 2022-05-21 15:59:30 +01:00
parent 796df9b79f
commit 8b6b06ea3b
5 changed files with 33 additions and 4 deletions

View File

@ -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<D, R>(attributes, traceLogging) {
override suspend fun processAlso(data: D, attributes: TypeSafeMap): Collection<R> {
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<R> {
traceLogging.info { "process: data=$data" }
traceLogging.info { "process: data=${data.structureToStringAndDesensitizeIfAvailable()}" }
val context = createContext(attributes)
val diff = if (traceLogging.isEnabled) CollectionDiff<R>() else null

View File

@ -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 {

View File

@ -165,7 +165,7 @@ private val format = Yaml {
}
private class DesensitizationVisitor(
internal class DesensitizationVisitor(
private val desensitizer: Desensitizer,
) : ValueDescTransformerNotNull<Nothing?>() {
override fun visitValue(desc: ValueDesc, data: Nothing?): ValueDesc {

View File

@ -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)

View File

@ -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)
}
}