KNETSensitiveDataRedactor automatycznie ukrywa wrażliwe dane
w logach - hasła, tokeny, numery kart kredytowych i inne PII.
Zawsze używaj redactora przy logowaniu requestów/response w produkcji. Przypadkowe logowanie sekretów może prowadzić do wycieków danych.
import rip.nerd.kitsunenet.util.KNETSensitiveDataRedactor
import rip.nerd.kitsunenet.util.toSafeString
val redactor = KNETSensitiveDataRedactor.default()
// Redact request
val safeRequest = redactor.redactRequest(request)
println(safeRequest.headers)
// {"Authorization": "[REDACTED]", "Content-Type": "application/json"}
// Redact response body
val safeBody = redactor.redactBody(response.bodyString)
println(safeBody)
// {"password": "[REDACTED]", "name": "John", "email": "john@example.com"}
// Redact URL
val safeUrl = redactor.redactUrl("https://api.com/login?api_key=secret123")
// https://api.com/login?api_key=[REDACTED]
AuthorizationX-API-KeyX-Auth-TokenCookie / Set-CookieX-Access-Token / X-Refresh-TokenProxy-Authorizationpassword, passwd, secrettoken, access_token, refresh_tokenapi_key, api_secret, private_keycredit_card, card_number, cvvssn, social_security, bank_accountval redactor = KNETSensitiveDataRedactor.builder()
// Dodaj własne headery
.addSensitiveHeader("X-Secret-Key", "X-Internal-Token")
// Dodaj własne pola JSON
.addSensitiveField("ssn", "social_security", "tax_id")
// Dodaj własne query params
.addSensitiveQueryParam("secret", "key")
// Dodaj własne wzorce regex
.addPattern("polish_pesel", Regex("\\d{11}"))
.addPattern("polish_nip", Regex("\\d{3}-\\d{3}-\\d{2}-\\d{2}"))
// Custom wartość zastępcza
.redactedValue("***HIDDEN***")
// Pokaż część wartości
.showPartial(4) // "secr***HIDDEN***"
.build()
// Domyślny - popularne wzorce
val redactor = KNETSensitiveDataRedactor.default()
// Minimalny - tylko auth headers
val minimal = KNETSensitiveDataRedactor.minimal()
// Strict - wszystkie możliwe dane osobowe
val strict = KNETSensitiveDataRedactor.strict()
// Dodatkowo: telefony, emaile, adresy IP
// PCI Compliant - karty kredytowe
val pci = KNETSensitiveDataRedactor.pciCompliant()
// Visa, MasterCard, Amex, CVV, expiry
// Bezpieczne logowanie requestu
println(request.toSafeString())
// POST https://api.com/login
// Headers: {Authorization: [REDACTED]}
// Body: {"password": "[REDACTED]", "username": "john"}
// Bezpieczne logowanie response
println(response.toSafeString())
// 200 OK
// Body: {"token": "[REDACTED]", "user": {...}}
// Z custom redactorem
println(request.toSafeString(myCustomRedactor))
class SafeLoggingInterceptor(
private val redactor: KNETSensitiveDataRedactor = KNETSensitiveDataRedactor.default()
) : KNETInterceptor {
override suspend fun intercept(chain: KNETInterceptor.Chain): KNETResponse {
val request = chain.request
// Loguj bezpiecznie
Log.d("HTTP", "→ ${request.toSafeString(redactor)}")
val response = chain.proceed(request)
Log.d("HTTP", "← ${response.toSafeString(redactor)}")
return response
}
}
class RequestLogger(
private val analytics: Analytics,
private val redactor: KNETSensitiveDataRedactor = KNETSensitiveDataRedactor.strict()
) {
fun logRequest(request: KNETRequest, response: KNETResponse) {
val safeRequest = redactor.redactRequest(request)
val safeResponse = redactor.redactResponse(response)
analytics.log("http_request", mapOf(
"url" to redactor.redactUrl(safeRequest.url),
"method" to safeRequest.method,
"status" to safeResponse.statusCode,
"headers" to safeRequest.headers,
"body" to safeResponse.bodyString.take(1000)
))
}
}
class PaymentLogger {
private val redactor = KNETSensitiveDataRedactor.pciCompliant()
fun logPayment(request: KNETRequest) {
// Numery kart są automatycznie ukrywane
val safeBody = redactor.redactBody(request.data.toString())
// "4111111111111111" → "[REDACTED]"
// "cvv: 123" → "cvv: [REDACTED]"
auditLog.write(safeBody)
}
}
val debugRedactor = KNETSensitiveDataRedactor.builder()
.showPartial(4) // Pokaż pierwsze 4 znaki
.redactedValue("...")
.build()
// "secret_token_12345" → "secr..."
// Przydatne do debugowania (widzisz początek tokena)
KNETSensitiveDataRedactor| Metoda | Opis |
|---|---|
redactRequest(request) | Redactuje cały request |
redactResponse(response) | Redactuje cały response |
redactHeaders(headers) | Redactuje headery |
redactQueryParams(params) | Redactuje query params |
redactUrl(url) | Redactuje URL |
redactBody(body) | Redactuje JSON body |
redactMap(map) | Redactuje mapę |
| Metoda | Opis |
|---|---|
addSensitiveHeader(...) | Dodaje headery do redakcji |
addSensitiveField(...) | Dodaje pola JSON |
addSensitiveQueryParam(...) | Dodaje query params |
addPattern(name, regex) | Dodaje wzorzec regex |
redactedValue(value) | Ustawia wartość zastępczą |
showPartial(length) | Pokazuje część wartości |
clearDefaults() | Czyści domyślne reguły |