commit a925b3563f52cccf0702ff5f8ecab7dda3748ea5
parent 284317c67ce1d3d813c4ecf149be582470a590d2
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Mon, 5 Feb 2024 23:17:17 +0100
fix: anonymize logs
- better file path regex
Diffstat:
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/LogManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/LogManager.kt
@@ -2,6 +2,7 @@ package me.rhunk.snapenhance
import android.util.Log
import com.google.gson.GsonBuilder
+import me.rhunk.snapenhance.common.data.FileType
import me.rhunk.snapenhance.common.logger.AbstractLogger
import me.rhunk.snapenhance.common.logger.LogChannel
import me.rhunk.snapenhance.common.logger.LogLevel
@@ -119,6 +120,10 @@ class LogManager(
private val logFolder = File(remoteSideContext.androidContext.cacheDir, "logs")
private var logFile: File
+ private val uuidRegex by lazy { Regex("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", RegexOption.MULTILINE) }
+ private val contentUriRegex by lazy { Regex("content://[a-zA-Z0-9_\\-./]+") }
+ private val filePathRegex by lazy { Regex("([a-zA-Z0-9_\\-./]+)\\.(${FileType.entries.joinToString("|") { file -> file.fileExtension.toString() }})") }
+
init {
if (!logFolder.exists()) {
logFolder.mkdirs()
@@ -133,6 +138,30 @@ class LogManager(
}
}
+ fun internalLog(tag: String, logLevel: LogLevel, message: Any?) {
+ runCatching {
+ val anonymizedMessage = message.toString().let {
+ if (remoteSideContext.config.isInitialized() && anonymizeLogs)
+ it.replace(uuidRegex, "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
+ .replace(contentUriRegex, "content://xxx")
+ .replace(filePathRegex, "xxxxxxxx.$2")
+ else it
+ }
+ val line = LogLine(
+ logLevel = logLevel,
+ dateTime = getCurrentDateTime(),
+ tag = tag,
+ message = anonymizedMessage
+ )
+ logFile.appendText("|$line\n", Charsets.UTF_8)
+ lineAddListener(line)
+ Log.println(logLevel.priority, tag, anonymizedMessage)
+ }.onFailure {
+ Log.println(Log.ERROR, tag, "Failed to log message: $message")
+ Log.println(Log.ERROR, tag, it.stackTraceToString())
+ }
+ }
+
private fun getCurrentDateTime(pathSafe: Boolean = false): String {
return DateTimeFormatter.ofPattern(if (pathSafe) "yyyy-MM-dd_HH-mm-ss" else "yyyy-MM-dd HH:mm:ss").format(
java.time.LocalDateTime.now()
@@ -204,32 +233,4 @@ class LogManager(
override fun assert(message: Any?, tag: String) {
internalLog(tag, LogLevel.ASSERT, message)
}
-
- fun internalLog(tag: String, logLevel: LogLevel, message: Any?) {
- runCatching {
- val anonymizedMessage = message.toString().let {
- if (remoteSideContext.config.isInitialized() && anonymizeLogs)
- it
- // remove uuids
- .replace(Regex("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", RegexOption.MULTILINE), "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
- // remove content uris
- .replace(Regex("content://[a-zA-Z0-9_\\-./]+"), "content://xxx")
- // remove file names
- .replace(Regex("[a-zA-Z0-9_\\-./]+\\.[a-zA-Z0-9_\\-./]+"), "xxx.xxx")
- else it
- }
- val line = LogLine(
- logLevel = logLevel,
- dateTime = getCurrentDateTime(),
- tag = tag,
- message = anonymizedMessage
- )
- logFile.appendText("|$line\n", Charsets.UTF_8)
- lineAddListener(line)
- Log.println(logLevel.priority, tag, anonymizedMessage)
- }.onFailure {
- Log.println(Log.ERROR, tag, "Failed to log message: $message")
- Log.println(Log.ERROR, tag, it.stackTraceToString())
- }
- }
}
\ No newline at end of file