generated from pricelees/issue-pr-template
test: RoomescapeLogMaskingConverter 테스트 추가 및 잘못 작성된 로직 수정
This commit is contained in:
parent
e2f77b982b
commit
7131d11fad
@ -36,7 +36,7 @@ class RoomescapeLogMaskingConverter : MessageConverter() {
|
||||
|
||||
private fun maskedPlainMessage(message: String): String {
|
||||
val keys: String = SENSITIVE_KEYS.joinToString("|")
|
||||
val regex = Regex("(?i)($keys)(\\s*=\\s*)(\\S+)")
|
||||
val regex = Regex("(?i)($keys)(\\s*=\\s*)([^,\\s]+)")
|
||||
|
||||
return regex.replace(message) { matchResult ->
|
||||
val key = matchResult.groupValues[1]
|
||||
@ -47,19 +47,11 @@ class RoomescapeLogMaskingConverter : MessageConverter() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun maskValue(value: String): String {
|
||||
return if (value.length <= 2) {
|
||||
MASK
|
||||
} else {
|
||||
"${value.first()}$MASK${value.last()}"
|
||||
}
|
||||
}
|
||||
|
||||
private fun maskRecursive(node: JsonNode?) {
|
||||
node?.forEachEntry { key, childNode ->
|
||||
when {
|
||||
childNode.isValueNode -> {
|
||||
if (key in SENSITIVE_KEYS) (node as ObjectNode).put(key, MASK)
|
||||
if (key in SENSITIVE_KEYS) (node as ObjectNode).put(key, maskValue(childNode.asText()))
|
||||
}
|
||||
|
||||
childNode.isObject -> maskRecursive(childNode)
|
||||
@ -78,4 +70,12 @@ class RoomescapeLogMaskingConverter : MessageConverter() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun maskValue(value: String): String {
|
||||
return if (value.length <= 2) {
|
||||
MASK
|
||||
} else {
|
||||
"${value.first()}$MASK${value.last()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
package roomescape.common.log
|
||||
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent
|
||||
import io.kotest.assertions.assertSoftly
|
||||
import io.kotest.core.spec.style.FunSpec
|
||||
import io.kotest.matchers.equals.shouldBeEqual
|
||||
import io.kotest.matchers.string.shouldContain
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
|
||||
class RoomescapeLogMaskingConverterTest : FunSpec({
|
||||
|
||||
val converter = RoomescapeLogMaskingConverter()
|
||||
val event: ILoggingEvent = mockk()
|
||||
|
||||
context("평문 로그에서는 key=value 형식을 처리한다.") {
|
||||
|
||||
test("2글자 초과이면 맨 앞, 맨 뒤를 제외한 나머지를 가린다.") {
|
||||
val email = "a@a.a"
|
||||
val password = "password12"
|
||||
val accessToken = "accessToken12"
|
||||
|
||||
every {
|
||||
event.formattedMessage
|
||||
} returns "email=${email}, password=${password}, accessToken = $accessToken"
|
||||
|
||||
assertSoftly(converter.convert(event)) {
|
||||
this shouldContain "email=${email}"
|
||||
this shouldContain "password=${password.first()}****${password.last()}"
|
||||
this shouldContain "accessToken = ${accessToken.first()}****${accessToken.last()}"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
test("2글자 이하이면 전부 가린다.") {
|
||||
val email = "a@a.a"
|
||||
val password = "pa"
|
||||
val accessToken = "a"
|
||||
|
||||
every {
|
||||
event.formattedMessage
|
||||
} returns "email=${email}, password=${password}, accessToken = ${accessToken}"
|
||||
|
||||
assertSoftly(converter.convert(event)) {
|
||||
this shouldContain "email=${email}"
|
||||
this shouldContain "password=****"
|
||||
this shouldContain "accessToken = ****"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context("JSON 형식 로그를 처리한다.") {
|
||||
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"password12\"}}"
|
||||
|
||||
test("2글자 초과이면 맨 앞, 맨 뒤를 제외한 나머지를 가린다.") {
|
||||
val password = "password12"
|
||||
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password}\"}}"
|
||||
|
||||
every {
|
||||
event.formattedMessage
|
||||
} returns json
|
||||
|
||||
converter.convert(event) shouldBeEqual "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password.first()}****${password.last()}\"}}"
|
||||
}
|
||||
|
||||
test("2글자 이하이면 전부 가린다.") {
|
||||
val password = "pa"
|
||||
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password}\"}}"
|
||||
|
||||
every {
|
||||
event.formattedMessage
|
||||
} returns json
|
||||
|
||||
converter.convert(event) shouldBeEqual "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"****\"}}"
|
||||
}
|
||||
}
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user