diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts index b524e010af..f0ccb2f280 100644 --- a/core/datasource/build.gradle.kts +++ b/core/datasource/build.gradle.kts @@ -18,6 +18,10 @@ android { } } +tasks.withType().configureEach { + useJUnitPlatform() +} + dependencies { /** Project */ @@ -84,7 +88,8 @@ dependencies { ksp(deps.room.compiler) testImplementation(deps.test.coroutine) - testImplementation(deps.test.junit) + testImplementation(deps.test.junit5) + testRuntimeOnly(deps.test.junit5.engine) testImplementation(deps.test.mockk) testImplementation(deps.test.truth) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/logs/AppLogsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/logs/AppLogsStore.kt index b12549863a..4cadac0967 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/logs/AppLogsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/logs/AppLogsStore.kt @@ -115,7 +115,8 @@ class AppLogsStore @Inject constructor( BufferedWriter(FileWriter(logFile, true)).use { writer -> writer.append(formatter.print(DateTime.now())) writer.append(": $tag ") - messages.forEach(writer::append) + messages.map(LogsSanitizer::sanitize) + .forEach(writer::append) writer.newLine() } } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/logs/LogsSanitizer.kt b/core/datasource/src/main/java/com/tangem/datasource/local/logs/LogsSanitizer.kt new file mode 100644 index 0000000000..438f1ba53e --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/logs/LogsSanitizer.kt @@ -0,0 +1,16 @@ +package com.tangem.datasource.local.logs + +/** + * Logs sanitizer + * +[REDACTED_AUTHOR] + */ +internal object LogsSanitizer { + + private val HEX_REGEX = Regex("(0[xX])?(?:[A-Fa-f0-9]{2}-?){4,}") + private const val HIDDEN_TEXT = "******" + + fun sanitize(value: String): String { + return HEX_REGEX.replace(input = value, replacement = HIDDEN_TEXT) + } +} \ No newline at end of file diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/local/logs/LogsSanitizerTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/local/logs/LogsSanitizerTest.kt new file mode 100644 index 0000000000..db62131d61 --- /dev/null +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/local/logs/LogsSanitizerTest.kt @@ -0,0 +1,53 @@ +package com.tangem.datasource.local.logs + +import com.google.common.truth.Truth +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.MethodSource + +/** +[REDACTED_AUTHOR] + */ +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class LogsSanitizerTest { + + @ParameterizedTest + @MethodSource("provideTestModels") + fun sanitize(model: TestModel) { + // Act + val actual = LogsSanitizer.sanitize(model.input) + + // Assert + val expected = model.expected + Truth.assertThat(actual).isEqualTo(expected) + } + + private fun provideTestModels() = listOf( + TestModel(input = "dead-beef-cafe-babe", expected = HIDDEN_TEXT), + TestModel(input = "[dead-beef-cafe-babe]", expected = "[$HIDDEN_TEXT]"), + TestModel(input = "0xdead-beef-cafe-babe", expected = HIDDEN_TEXT), + TestModel(input = "0XaA-Bb-Cc-Dd-Ee-Ff", expected = HIDDEN_TEXT), + TestModel(input = "A1B2C3D4E5F6", expected = HIDDEN_TEXT), + TestModel(input = "deadbeefcafebabe", expected = HIDDEN_TEXT), + TestModel(input = "deadbeefcafebabe", expected = HIDDEN_TEXT), + TestModel( + input = "Values: 12345678 and ABCDEF12 and cafe9876", + expected = "Values: $HIDDEN_TEXT and $HIDDEN_TEXT and $HIDDEN_TEXT", + ), + TestModel( + input = "Chunks: DEADBEEF CAFEBABE F00DBABE", + expected = "Chunks: $HIDDEN_TEXT $HIDDEN_TEXT $HIDDEN_TEXT", + ), + TestModel( + input = "Normal log message without secrets", + expected = "Normal log message without secrets", + ), + ) + + data class TestModel(val input: String, val expected: String) + + private companion object { + + const val HIDDEN_TEXT = "******" + } +} \ No newline at end of file