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:
Mapp/src/main/kotlin/me/rhunk/snapenhance/LogManager.kt | 57+++++++++++++++++++++++++++++----------------------------
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