fix: anonymize logs

- better file path regex
This commit is contained in:
rhunk 2024-02-05 23:17:17 +01:00
parent 284317c67c
commit a925b3563f

View File

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