init: 클린 기반 auth 서버 설계

This commit is contained in:
DongHyeonka
2026-07-24 14:30:18 +09:00
parent 471db0203d
commit 8a1ac1e769
3642 changed files with 275893 additions and 1 deletions
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>InvalidKeycloakClaimsException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_class">InvalidKeycloakClaimsException</span></div><h1>InvalidKeycloakClaimsException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="InvalidKeycloakClaimsException.java.html#L9" class="el_method">InvalidKeycloakClaimsException()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>InvalidKeycloakClaimsException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_source">InvalidKeycloakClaimsException.java</span></div><h1>InvalidKeycloakClaimsException.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.exception;
import com.project.auth.application.support.exception.AuthErrorCode;
import com.project.auth.application.support.exception.BusinessException;
public class InvalidKeycloakClaimsException extends BusinessException {
public InvalidKeycloakClaimsException() {
<span class="fc" id="L9"> super(AuthErrorCode.KEYCLOAK_CLAIMS_INVALID);</span>
<span class="fc" id="L10"> }</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakAccountConflictException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_class">KeycloakAccountConflictException</span></div><h1>KeycloakAccountConflictException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="KeycloakAccountConflictException.java.html#L9" class="el_method">KeycloakAccountConflictException()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakAccountConflictException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_source">KeycloakAccountConflictException.java</span></div><h1>KeycloakAccountConflictException.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.exception;
import com.project.auth.application.support.exception.AuthErrorCode;
import com.project.auth.application.support.exception.BusinessException;
public class KeycloakAccountConflictException extends BusinessException {
public KeycloakAccountConflictException() {
<span class="fc" id="L9"> super(AuthErrorCode.KEYCLOAK_ACCOUNT_CONFLICT);</span>
<span class="fc" id="L10"> }</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserNotFoundException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_class">KeycloakUserNotFoundException</span></div><h1>KeycloakUserNotFoundException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="KeycloakUserNotFoundException.java.html#L9" class="el_method">KeycloakUserNotFoundException()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserNotFoundException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.exception</a> &gt; <span class="el_source">KeycloakUserNotFoundException.java</span></div><h1>KeycloakUserNotFoundException.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.exception;
import com.project.auth.application.support.exception.AuthErrorCode;
import com.project.auth.application.support.exception.BusinessException;
public class KeycloakUserNotFoundException extends BusinessException {
public KeycloakUserNotFoundException() {
<span class="nc" id="L9"> super(AuthErrorCode.KEYCLOAK_USER_NOT_FOUND);</span>
<span class="nc" id="L10"> }</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.exception</span></div><h1>com.project.auth.application.auth.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 12</td><td class="ctr2">66%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="KeycloakUserNotFoundException.html" class="el_class">KeycloakUserNotFoundException</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="InvalidKeycloakClaimsException.html" class="el_class">InvalidKeycloakClaimsException</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="KeycloakAccountConflictException.html" class="el_class">KeycloakAccountConflictException</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.exception</span></div><h1>com.project.auth.application.auth.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 12</td><td class="ctr2">66%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="KeycloakUserNotFoundException.java.html" class="el_source">KeycloakUserNotFoundException.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="KeycloakAccountConflictException.java.html" class="el_source">KeycloakAccountConflictException.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="InvalidKeycloakClaimsException.java.html" class="el_source">InvalidKeycloakClaimsException.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserClaimsValidator</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_class">KeycloakUserClaimsValidator</span></div><h1>KeycloakUserClaimsValidator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 45</td><td class="ctr2">100%</td><td class="bar">4 of 12</td><td class="ctr2">66%</td><td class="ctr1">4</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="KeycloakUserClaimsValidator.java.html#L15" class="el_method">validate(KeycloakUserClaims)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="75" height="10" title="5" alt="5"/></td><td class="ctr2" id="e1">62%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="KeycloakUserClaimsValidator.java.html#L34" class="el_method">isBlank(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserClaimsValidator.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_source">KeycloakUserClaimsValidator.java</span></div><h1>KeycloakUserClaimsValidator.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.identity.internal;
import com.project.auth.application.auth.exception.InvalidKeycloakClaimsException;
import com.project.auth.application.auth.identity.KeycloakUserClaims;
import com.project.auth.domain.user.exception.DomainException;
import com.project.auth.domain.user.model.UserEmail;
import com.project.auth.domain.user.model.UserName;
final class KeycloakUserClaimsValidator {
private KeycloakUserClaimsValidator() {
}
static ValidatedKeycloakUserClaims validate(KeycloakUserClaims claims) {
<span class="pc bpc" id="L15" title="1 of 2 branches missed."> if (claims == null</span>
<span class="pc bpc" id="L16" title="1 of 2 branches missed."> || isBlank(claims.subject())</span>
<span class="fc bfc" id="L17" title="All 2 branches covered."> || isBlank(claims.email())</span>
<span class="pc bpc" id="L18" title="1 of 2 branches missed."> || isBlank(claims.name())) {</span>
<span class="fc" id="L19"> throw new InvalidKeycloakClaimsException();</span>
}
try {
<span class="fc" id="L23"> return new ValidatedKeycloakUserClaims(</span>
<span class="fc" id="L24"> claims.subject().trim(),</span>
<span class="fc" id="L25"> UserEmail.from(claims.email()),</span>
<span class="fc" id="L26"> UserName.from(claims.name())</span>
);
<span class="fc" id="L28"> } catch (DomainException exception) {</span>
<span class="fc" id="L29"> throw new InvalidKeycloakClaimsException();</span>
}
}
private static boolean isBlank(String value) {
<span class="pc bpc" id="L34" title="1 of 4 branches missed."> return value == null || value.isBlank();</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserLoader</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_class">KeycloakUserLoader</span></div><h1>KeycloakUserLoader</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 103</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">23</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="KeycloakUserLoader.java.html#L59" class="el_method">autoRegister(ValidatedKeycloakUserClaims)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="54" alt="54"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="KeycloakUserLoader.java.html#L34" class="el_method">KeycloakUserLoader(LoadKeycloakUserPort, RegisterKeycloakUserPort, AuthAuditEventPublisher, Clock)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="27" alt="27"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="KeycloakUserLoader.java.html#L50" class="el_method">load(KeycloakUserClaims)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="18" alt="18"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="KeycloakUserLoader.java.html#L53" class="el_method">lambda$load$0(ValidatedKeycloakUserClaims)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserLoader.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_source">KeycloakUserLoader.java</span></div><h1>KeycloakUserLoader.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.identity.internal;
import com.project.auth.application.auth.exception.KeycloakAccountConflictException;
import com.project.auth.application.auth.identity.KeycloakUserClaims;
import com.project.auth.application.auth.identity.LoadKeycloakUserUseCase;
import com.project.auth.application.auth.identity.LoadedKeycloakUser;
import com.project.auth.application.auth.identity.port.out.LoadKeycloakUserPort;
import com.project.auth.application.auth.identity.port.out.RegisterKeycloakUserPort;
import com.project.auth.application.support.audit.AuthAuditEvent;
import com.project.auth.application.support.audit.AuthAuditEventPublisher;
import com.project.auth.application.support.audit.AuthAuditEventType;
import com.project.auth.application.support.audit.AuthAuditFields;
import com.project.auth.domain.user.model.AuthProvider;
import com.project.auth.domain.user.model.User;
import org.springframework.transaction.annotation.Transactional;
import java.time.Clock;
import java.time.Instant;
import java.util.Objects;
import java.util.UUID;
public class KeycloakUserLoader implements LoadKeycloakUserUseCase {
private final LoadKeycloakUserPort loadKeycloakUserPort;
private final RegisterKeycloakUserPort registerKeycloakUserPort;
private final AuthAuditEventPublisher authAuditEventPublisher;
private final Clock clock;
public KeycloakUserLoader(
LoadKeycloakUserPort loadKeycloakUserPort,
RegisterKeycloakUserPort registerKeycloakUserPort,
AuthAuditEventPublisher authAuditEventPublisher,
Clock clock
<span class="fc" id="L34"> ) {</span>
<span class="fc" id="L35"> this.loadKeycloakUserPort = Objects.requireNonNull(loadKeycloakUserPort, &quot;loadKeycloakUserPort must not be null&quot;);</span>
<span class="fc" id="L36"> this.registerKeycloakUserPort = Objects.requireNonNull(</span>
registerKeycloakUserPort,
&quot;registerKeycloakUserPort must not be null&quot;
);
<span class="fc" id="L40"> this.authAuditEventPublisher = Objects.requireNonNull(</span>
authAuditEventPublisher,
&quot;authAuditEventPublisher must not be null&quot;
);
<span class="fc" id="L44"> this.clock = Objects.requireNonNull(clock, &quot;clock must not be null&quot;);</span>
<span class="fc" id="L45"> }</span>
@Override
@Transactional
public LoadedKeycloakUser load(KeycloakUserClaims claims) {
<span class="fc" id="L50"> ValidatedKeycloakUserClaims validatedClaims = KeycloakUserClaimsValidator.validate(claims);</span>
<span class="fc" id="L52"> User user = loadKeycloakUserPort.findByProviderAndProviderSubject(AuthProvider.KEYCLOAK, validatedClaims.subject())</span>
<span class="fc" id="L53"> .orElseGet(() -&gt; autoRegister(validatedClaims));</span>
<span class="fc" id="L55"> return LoadedKeycloakUser.from(user);</span>
}
private User autoRegister(ValidatedKeycloakUserClaims claims) {
<span class="fc bfc" id="L59" title="All 2 branches covered."> if (loadKeycloakUserPort.existsByEmail(claims.email())) {</span>
<span class="fc" id="L60"> throw new KeycloakAccountConflictException();</span>
}
<span class="fc" id="L63"> User newUser = User.registerKeycloak(</span>
<span class="fc" id="L64"> UUID.randomUUID(),</span>
<span class="fc" id="L65"> claims.email(),</span>
<span class="fc" id="L66"> claims.name(),</span>
<span class="fc" id="L67"> claims.subject(),</span>
<span class="fc" id="L68"> Instant.now(clock)</span>
);
<span class="fc" id="L70"> User saved = registerKeycloakUserPort.register(newUser);</span>
<span class="fc" id="L71"> authAuditEventPublisher.publish(AuthAuditEvent.info(</span>
<span class="fc" id="L72"> AuthAuditEventType.KEYCLOAK_USER_AUTO_REGISTERED.code(),</span>
AuthAuditFields.PROVIDER, AuthProvider.KEYCLOAK,
<span class="fc" id="L74"> AuthAuditFields.SUBJECT, claims.subject()</span>
));
<span class="fc" id="L76"> return saved;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ValidatedKeycloakUserClaims</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_class">ValidatedKeycloakUserClaims</span></div><h1>ValidatedKeycloakUserClaims</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 12</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="ValidatedKeycloakUserClaims.java.html#L6" class="el_method">ValidatedKeycloakUserClaims(String, UserEmail, UserName)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ValidatedKeycloakUserClaims.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.identity.internal</a> &gt; <span class="el_source">ValidatedKeycloakUserClaims.java</span></div><h1>ValidatedKeycloakUserClaims.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.identity.internal;
import com.project.auth.domain.user.model.UserEmail;
import com.project.auth.domain.user.model.UserName;
<span class="fc" id="L6">record ValidatedKeycloakUserClaims(</span>
String subject,
UserEmail email,
UserName name
) {
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.identity.internal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.identity.internal</span></div><h1>com.project.auth.application.auth.identity.internal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 160</td><td class="ctr2">100%</td><td class="bar">4 of 14</td><td class="ctr2">71%</td><td class="ctr1">4</td><td class="ctr2">14</td><td class="ctr1">0</td><td class="ctr2">36</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="KeycloakUserLoader.html" class="el_class">KeycloakUserLoader</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="103" alt="103"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">23</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="KeycloakUserClaimsValidator.html" class="el_class">KeycloakUserClaimsValidator</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="52" height="10" title="45" alt="45"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">66%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">2</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="ValidatedKeycloakUserClaims.html" class="el_class">ValidatedKeycloakUserClaims</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.identity.internal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.identity.internal</span></div><h1>com.project.auth.application.auth.identity.internal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 160</td><td class="ctr2">100%</td><td class="bar">4 of 14</td><td class="ctr2">71%</td><td class="ctr1">4</td><td class="ctr2">14</td><td class="ctr1">0</td><td class="ctr2">36</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="KeycloakUserLoader.java.html" class="el_source">KeycloakUserLoader.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="103" alt="103"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">23</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="KeycloakUserClaimsValidator.java.html" class="el_source">KeycloakUserClaimsValidator.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="52" height="10" title="45" alt="45"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">66%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">2</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="ValidatedKeycloakUserClaims.java.html" class="el_source">ValidatedKeycloakUserClaims.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserClaims</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.identity</a> &gt; <span class="el_class">KeycloakUserClaims</span></div><h1>KeycloakUserClaims</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 12</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="KeycloakUserClaims.java.html#L3" class="el_method">KeycloakUserClaims(String, String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>KeycloakUserClaims.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.identity</a> &gt; <span class="el_source">KeycloakUserClaims.java</span></div><h1>KeycloakUserClaims.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.identity;
<span class="fc" id="L3">public record KeycloakUserClaims(</span>
String subject,
String email,
String name
) {
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LoadedKeycloakUser</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.auth.identity</a> &gt; <span class="el_class">LoadedKeycloakUser</span></div><h1>LoadedKeycloakUser</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 33</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="LoadedKeycloakUser.java.html#L7" class="el_method">LoadedKeycloakUser(UUID, String, String, String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="LoadedKeycloakUser.java.html#L16" class="el_method">from(User)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="100" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LoadedKeycloakUser.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.auth.identity</a> &gt; <span class="el_source">LoadedKeycloakUser.java</span></div><h1>LoadedKeycloakUser.java</h1><pre class="source lang-java linenums">package com.project.auth.application.auth.identity;
import com.project.auth.domain.user.model.User;
import java.util.UUID;
<span class="fc" id="L7">public record LoadedKeycloakUser(</span>
UUID userId,
String email,
String name,
String provider,
String providerSubject
) {
public static LoadedKeycloakUser from(User user) {
<span class="fc" id="L16"> return new LoadedKeycloakUser(</span>
<span class="fc" id="L17"> user.getId(),</span>
<span class="fc" id="L18"> user.getEmail(),</span>
<span class="fc" id="L19"> user.getName(),</span>
<span class="fc" id="L20"> user.getProvider().name(),</span>
<span class="fc" id="L21"> user.getProviderSubject()</span>
);
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.identity</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.identity</span></div><h1>com.project.auth.application.auth.identity</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 45</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="LoadedKeycloakUser.html" class="el_class">LoadedKeycloakUser</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">2</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="KeycloakUserClaims.html" class="el_class">KeycloakUserClaims</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="43" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.auth.identity</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.auth.identity</span></div><h1>com.project.auth.application.auth.identity</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 45</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="LoadedKeycloakUser.java.html" class="el_source">LoadedKeycloakUser.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">2</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="KeycloakUserClaims.java.html" class="el_source">KeycloakUserClaims.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="43" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuditLevel</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_class">AuditLevel</span></div><h1>AuditLevel</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 15</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AuditLevel.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuditLevel.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_source">AuditLevel.java</span></div><h1>AuditLevel.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.audit;
<span class="fc" id="L3">public enum AuditLevel {</span>
<span class="fc" id="L4"> INFO,</span>
<span class="fc" id="L5"> WARN</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditEvent</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_class">AuthAuditEvent</span></div><h1>AuthAuditEvent</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">13 of 91</td><td class="ctr2">85%</td><td class="bar">1 of 4</td><td class="ctr2">75%</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">2</td><td class="ctr2">16</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="AuthAuditEvent.java.html#L22" class="el_method">warn(String, Object[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AuthAuditEvent.java.html#L26" class="el_method">toFields(Object[])</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="106" height="10" title="40" alt="40"/></td><td class="ctr2" id="c2">88%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AuthAuditEvent.java.html#L10" class="el_method">AuthAuditEvent(AuditLevel, String, Map)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="AuthAuditEvent.java.html#L18" class="el_method">info(String, Object[])</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="21" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditEvent.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_source">AuthAuditEvent.java</span></div><h1>AuthAuditEvent.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.audit;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
public record AuthAuditEvent(AuditLevel level, String eventType, Map&lt;String, String&gt; fields) {
<span class="fc" id="L10"> public AuthAuditEvent {</span>
<span class="fc" id="L11"> Objects.requireNonNull(level, &quot;level must not be null&quot;);</span>
<span class="fc" id="L12"> Objects.requireNonNull(eventType, &quot;eventType must not be null&quot;);</span>
<span class="fc" id="L13"> Objects.requireNonNull(fields, &quot;fields must not be null&quot;);</span>
<span class="fc" id="L14"> fields = Collections.unmodifiableMap(new LinkedHashMap&lt;&gt;(fields));</span>
<span class="fc" id="L15"> }</span>
public static AuthAuditEvent info(String eventType, Object... keyValues) {
<span class="fc" id="L18"> return new AuthAuditEvent(AuditLevel.INFO, eventType, toFields(keyValues));</span>
}
public static AuthAuditEvent warn(String eventType, Object... keyValues) {
<span class="nc" id="L22"> return new AuthAuditEvent(AuditLevel.WARN, eventType, toFields(keyValues));</span>
}
private static Map&lt;String, String&gt; toFields(Object... keyValues) {
<span class="pc bpc" id="L26" title="1 of 2 branches missed."> if (keyValues.length % 2 != 0) {</span>
<span class="nc" id="L27"> throw new IllegalArgumentException(&quot;keyValues must contain an even number of elements&quot;);</span>
}
<span class="fc" id="L30"> LinkedHashMap&lt;String, String&gt; fields = new LinkedHashMap&lt;&gt;();</span>
<span class="fc bfc" id="L31" title="All 2 branches covered."> for (int index = 0; index &lt; keyValues.length; index += 2) {</span>
<span class="fc" id="L32"> Object key = Objects.requireNonNull(keyValues[index], &quot;field key must not be null&quot;);</span>
<span class="fc" id="L33"> Object value = Objects.requireNonNull(keyValues[index + 1], &quot;field value must not be null&quot;);</span>
<span class="fc" id="L34"> fields.put(key.toString(), value.toString());</span>
}
<span class="fc" id="L36"> return fields;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditEventType</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_class">AuthAuditEventType</span></div><h1>AuthAuditEventType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 42</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="AuthAuditEventType.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="31" alt="31"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AuthAuditEventType.java.html#L11" class="el_method">AuthAuditEventType(String, int, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="AuthAuditEventType.java.html#L16" class="el_method">code()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditEventType.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_source">AuthAuditEventType.java</span></div><h1>AuthAuditEventType.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.audit;
<span class="fc" id="L3">public enum AuthAuditEventType {</span>
<span class="fc" id="L4"> KEYCLOAK_USER_NOT_FOUND(&quot;KEYCLOAK_USER_NOT_FOUND&quot;),</span>
<span class="fc" id="L5"> KEYCLOAK_USER_AUTO_REGISTERED(&quot;KEYCLOAK_USER_AUTO_REGISTERED&quot;),</span>
<span class="fc" id="L6"> AUTHENTICATION_REQUIRED(&quot;AUTHENTICATION_REQUIRED&quot;),</span>
<span class="fc" id="L7"> ACCESS_DENIED(&quot;ACCESS_DENIED&quot;);</span>
private final String code;
<span class="fc" id="L11"> AuthAuditEventType(String code) {</span>
<span class="fc" id="L12"> this.code = code;</span>
<span class="fc" id="L13"> }</span>
public String code() {
<span class="fc" id="L16"> return code;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditFailureReason</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_class">AuthAuditFailureReason</span></div><h1>AuthAuditFailureReason</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">28 of 28</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="AuthAuditFailureReason.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AuthAuditFailureReason.java.html#L9" class="el_method">AuthAuditFailureReason(String, int, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="56" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="AuthAuditFailureReason.java.html#L14" class="el_method">code()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditFailureReason.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_source">AuthAuditFailureReason.java</span></div><h1>AuthAuditFailureReason.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.audit;
<span class="nc" id="L3">public enum AuthAuditFailureReason {</span>
<span class="nc" id="L4"> EMAIL_CONFLICT(&quot;email_conflict&quot;),</span>
<span class="nc" id="L5"> DUPLICATE_EMAIL_RACE_CONDITION(&quot;duplicate_email_race_condition&quot;);</span>
private final String code;
<span class="nc" id="L9"> AuthAuditFailureReason(String code) {</span>
<span class="nc" id="L10"> this.code = code;</span>
<span class="nc" id="L11"> }</span>
public String code() {
<span class="nc" id="L14"> return code;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthAuditFields.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.audit</a> &gt; <span class="el_source">AuthAuditFields.java</span></div><h1>AuthAuditFields.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.audit;
import com.project.auth.domain.user.model.UserEmail;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HexFormat;
import java.util.Objects;
import java.util.UUID;
public final class AuthAuditFields {
public static final String EVENT_TYPE = &quot;eventType&quot;;
public static final String ACTOR_ID = &quot;actorId&quot;;
public static final String USER_ID_HASH = &quot;userIdHash&quot;;
public static final String EMAIL_MASKED = &quot;emailMasked&quot;;
public static final String PROVIDER = &quot;provider&quot;;
public static final String REASON = &quot;reason&quot;;
public static final String METHOD = &quot;method&quot;;
public static final String REQUEST_PATH = &quot;requestPath&quot;;
public static final String KEY_ID = &quot;keyId&quot;;
public static final String EXPIRES_IN_SECONDS = &quot;expiresInSeconds&quot;;
public static final String SUBJECT = &quot;subject&quot;;
private static final String HASH_PREFIX = &quot;sha256:&quot;;
private static final int HASH_HEX_LENGTH = 16;
<span class="nc" id="L28"> private static final HexFormat HEX_FORMAT = HexFormat.of();</span>
private AuthAuditFields() {
}
public static String maskedEmail(UserEmail email) {
<span class="nc" id="L34"> Objects.requireNonNull(email, &quot;email must not be null&quot;);</span>
<span class="nc" id="L35"> return maskEmail(email.value());</span>
}
public static String userIdHash(UUID userId) {
<span class="nc" id="L39"> Objects.requireNonNull(userId, &quot;userId must not be null&quot;);</span>
<span class="nc" id="L40"> return HASH_PREFIX + sha256Hex(userId.toString()).substring(0, HASH_HEX_LENGTH);</span>
}
private static String maskEmail(String email) {
<span class="nc" id="L44"> int atIndex = email.indexOf('@');</span>
<span class="nc bnc" id="L45" title="All 4 branches missed."> if (atIndex &lt;= 0 || atIndex == email.length() - 1) {</span>
<span class="nc" id="L46"> return &quot;***&quot;;</span>
}
<span class="nc" id="L49"> String localPart = email.substring(0, atIndex);</span>
<span class="nc" id="L50"> String domain = email.substring(atIndex + 1);</span>
<span class="nc" id="L51"> return localPartPrefix(localPart) + &quot;***@&quot; + domain;</span>
}
private static String localPartPrefix(String localPart) {
<span class="nc bnc" id="L55" title="All 2 branches missed."> if (localPart.length() == 1) {</span>
<span class="nc" id="L56"> return localPart;</span>
}
<span class="nc" id="L58"> return localPart.substring(0, Math.min(localPart.length(), 2));</span>
}
private static String sha256Hex(String value) {
try {
<span class="nc" id="L63"> MessageDigest digest = MessageDigest.getInstance(&quot;SHA-256&quot;);</span>
<span class="nc" id="L64"> return HEX_FORMAT.formatHex(digest.digest(value.getBytes(StandardCharsets.UTF_8)));</span>
<span class="nc" id="L65"> } catch (NoSuchAlgorithmException exception) {</span>
<span class="nc" id="L66"> throw new IllegalStateException(&quot;SHA-256 digest is not available.&quot;, exception);</span>
}
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthErrorCode</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_class">AuthErrorCode</span></div><h1>AuthErrorCode</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 60</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="AuthErrorCode.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="43" alt="43"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AuthErrorCode.java.html#L13" class="el_method">AuthErrorCode(String, int, String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="AuthErrorCode.java.html#L20" class="el_method">code()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AuthErrorCode.java.html#L25" class="el_method">message()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthErrorCode.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_source">AuthErrorCode.java</span></div><h1>AuthErrorCode.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.exception;
<span class="fc" id="L3">public enum AuthErrorCode implements ClientFacingErrorCode {</span>
<span class="fc" id="L4"> AUTHENTICATION_REQUIRED(&quot;AUTH-001&quot;, &quot;인증이 필요합니다.&quot;),</span>
<span class="fc" id="L5"> ACCESS_DENIED(&quot;AUTH-002&quot;, &quot;접근 권한이 없습니다.&quot;),</span>
<span class="fc" id="L6"> KEYCLOAK_CLAIMS_INVALID(&quot;AUTH-003&quot;, &quot;Keycloak 토큰 클레임이 올바르지 않습니다.&quot;),</span>
<span class="fc" id="L7"> KEYCLOAK_USER_NOT_FOUND(&quot;AUTH-004&quot;, &quot;연결된 내부 Keycloak 사용자를 찾을 수 없습니다.&quot;),</span>
<span class="fc" id="L8"> KEYCLOAK_ACCOUNT_CONFLICT(&quot;AUTH-005&quot;, &quot;Keycloak 계정과 연결할 수 없는 내부 사용자 정보입니다.&quot;);</span>
private final String code;
private final String message;
<span class="fc" id="L13"> AuthErrorCode(String code, String message) {</span>
<span class="fc" id="L14"> this.code = code;</span>
<span class="fc" id="L15"> this.message = message;</span>
<span class="fc" id="L16"> }</span>
@Override
public String code() {
<span class="fc" id="L20"> return code;</span>
}
@Override
public String message() {
<span class="fc" id="L25"> return message;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BusinessException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_class">BusinessException</span></div><h1>BusinessException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 35</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="BusinessException.java.html#L18" class="el_method">BusinessException(ClientFacingErrorCode, Throwable)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="BusinessException.java.html#L8" class="el_method">BusinessException(ClientFacingErrorCode)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="106" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="BusinessException.java.html#L23" class="el_method">BusinessException(ClientFacingErrorCode, String, Throwable)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="106" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="BusinessException.java.html#L13" class="el_method">BusinessException(ClientFacingErrorCode, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="93" height="10" title="7" alt="7"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="BusinessException.java.html#L28" class="el_method">getErrorCode()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BusinessException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_source">BusinessException.java</span></div><h1>BusinessException.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.exception;
public abstract class BusinessException extends RuntimeException {
private final ClientFacingErrorCode errorCode;
protected BusinessException(ClientFacingErrorCode errorCode) {
<span class="fc" id="L8"> super(errorCode.message());</span>
<span class="fc" id="L9"> this.errorCode = errorCode;</span>
<span class="fc" id="L10"> }</span>
protected BusinessException(ClientFacingErrorCode errorCode, String detailMessage) {
<span class="fc" id="L13"> super(detailMessage);</span>
<span class="fc" id="L14"> this.errorCode = errorCode;</span>
<span class="fc" id="L15"> }</span>
protected BusinessException(ClientFacingErrorCode errorCode, Throwable cause) {
<span class="fc" id="L18"> super(errorCode.message(), cause);</span>
<span class="fc" id="L19"> this.errorCode = errorCode;</span>
<span class="fc" id="L20"> }</span>
protected BusinessException(ClientFacingErrorCode errorCode, String detailMessage, Throwable cause) {
<span class="fc" id="L23"> super(detailMessage, cause);</span>
<span class="fc" id="L24"> this.errorCode = errorCode;</span>
<span class="fc" id="L25"> }</span>
public ClientFacingErrorCode getErrorCode() {
<span class="fc" id="L28"> return errorCode;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommonErrorCode</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_class">CommonErrorCode</span></div><h1>CommonErrorCode</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 28</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="CommonErrorCode.java.html#L9" class="el_method">CommonErrorCode(String, int, String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="CommonErrorCode.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="CommonErrorCode.java.html#L16" class="el_method">code()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="CommonErrorCode.java.html#L21" class="el_method">message()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommonErrorCode.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.exception</a> &gt; <span class="el_source">CommonErrorCode.java</span></div><h1>CommonErrorCode.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.exception;
<span class="fc" id="L3">public enum CommonErrorCode implements ClientFacingErrorCode {</span>
<span class="fc" id="L4"> INTERNAL_SERVER_ERROR(&quot;COMMON-999&quot;, &quot;예상하지 못한 오류가 발생했습니다.&quot;);</span>
private final String code;
private final String message;
<span class="fc" id="L9"> CommonErrorCode(String code, String message) {</span>
<span class="fc" id="L10"> this.code = code;</span>
<span class="fc" id="L11"> this.message = message;</span>
<span class="fc" id="L12"> }</span>
@Override
public String code() {
<span class="fc" id="L16"> return code;</span>
}
@Override
public String message() {
<span class="fc" id="L21"> return message;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.support.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.support.exception</span></div><h1>com.project.auth.application.support.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 123</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">33</td><td class="ctr1">0</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="AuthErrorCode.html" class="el_class">AuthErrorCode</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="BusinessException.html" class="el_class">BusinessException</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="70" height="10" title="35" alt="35"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="CommonErrorCode.html" class="el_class">CommonErrorCode</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="56" height="10" title="28" alt="28"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.support.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.support.exception</span></div><h1>com.project.auth.application.support.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 123</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">33</td><td class="ctr1">0</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="AuthErrorCode.java.html" class="el_source">AuthErrorCode.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="BusinessException.java.html" class="el_source">BusinessException.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="70" height="10" title="35" alt="35"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="CommonErrorCode.java.html" class="el_source">CommonErrorCode.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="56" height="10" title="28" alt="28"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LogSanitizer.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.application.support.logging</a> &gt; <span class="el_source">LogSanitizer.java</span></div><h1>LogSanitizer.java</h1><pre class="source lang-java linenums">package com.project.auth.application.support.logging;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HexFormat;
public final class LogSanitizer {
private static final String UNAVAILABLE_VALUE = &quot;-&quot;;
private static final String ANONYMOUS_VALUE = &quot;anonymous&quot;;
private static final String HASH_PREFIX = &quot;sha256:&quot;;
private static final int HASH_HEX_LENGTH = 16;
private static final int DEFAULT_MAX_LENGTH = 160;
private static final int USER_AGENT_MAX_LENGTH = 120;
private static final int REQUEST_PATH_MAX_LENGTH = 200;
<span class="fc" id="L17"> private static final HexFormat HEX_FORMAT = HexFormat.of();</span>
private LogSanitizer() {
}
public static String userAgent(String value) {
<span class="fc" id="L23"> return normalize(value, USER_AGENT_MAX_LENGTH);</span>
}
public static String clientIp(String value) {
<span class="fc bfc" id="L27" title="All 4 branches covered."> if (value == null || value.isBlank()) {</span>
<span class="fc" id="L28"> return UNAVAILABLE_VALUE;</span>
}
<span class="fc" id="L30"> String normalized = normalize(value, DEFAULT_MAX_LENGTH);</span>
<span class="fc" id="L31"> String[] octets = normalized.split(&quot;\\.&quot;, -1);</span>
<span class="fc bfc" id="L32" title="All 4 branches covered."> if (octets.length == 4 &amp;&amp; isIpv4Octets(octets)) {</span>
<span class="fc" id="L33"> return octets[0] + &quot;.&quot; + octets[1] + &quot;.&quot; + octets[2] + &quot;.0&quot;;</span>
}
<span class="fc" id="L35"> return HASH_PREFIX + sha256Hex(normalized).substring(0, HASH_HEX_LENGTH);</span>
}
public static String requestPath(String value) {
<span class="fc" id="L39"> return normalize(value, REQUEST_PATH_MAX_LENGTH);</span>
}
public static String actorId(String value) {
<span class="fc bfc" id="L43" title="All 6 branches covered."> if (value == null || value.isBlank() || ANONYMOUS_VALUE.equals(value)) {</span>
<span class="fc" id="L44"> return ANONYMOUS_VALUE;</span>
}
<span class="fc" id="L46"> String normalized = normalize(value, DEFAULT_MAX_LENGTH);</span>
<span class="fc bfc" id="L47" title="All 2 branches covered."> if (normalized.contains(&quot;@&quot;)) {</span>
<span class="fc" id="L48"> return maskEmail(normalized);</span>
}
<span class="fc" id="L50"> return HASH_PREFIX + sha256Hex(normalized).substring(0, HASH_HEX_LENGTH);</span>
}
public static String normalize(String value) {
<span class="fc" id="L54"> return normalize(value, DEFAULT_MAX_LENGTH);</span>
}
private static String normalize(String value, int maxLength) {
<span class="fc bfc" id="L58" title="All 4 branches covered."> if (value == null || value.isBlank()) {</span>
<span class="fc" id="L59"> return UNAVAILABLE_VALUE;</span>
}
<span class="fc" id="L62"> StringBuilder builder = new StringBuilder(Math.min(value.length(), maxLength));</span>
<span class="fc bfc" id="L63" title="All 4 branches covered."> for (int index = 0; index &lt; value.length() &amp;&amp; builder.length() &lt; maxLength; index++) {</span>
<span class="fc" id="L64"> char character = value.charAt(index);</span>
<span class="fc bfc" id="L65" title="All 8 branches covered."> if (Character.isISOControl(character) || Character.isWhitespace(character) || character == '='</span>
|| character == '|') {
<span class="fc" id="L67"> builder.append('_');</span>
} else {
<span class="fc" id="L69"> builder.append(character);</span>
}
}
<span class="fc bfc" id="L72" title="All 2 branches covered."> if (value.length() &gt; maxLength) {</span>
<span class="fc" id="L73"> builder.append(&quot;...&quot;);</span>
}
<span class="fc" id="L75"> return builder.toString();</span>
}
private static String maskEmail(String email) {
<span class="fc" id="L79"> int atIndex = email.indexOf('@');</span>
<span class="fc bfc" id="L80" title="All 4 branches covered."> if (atIndex &lt;= 0 || atIndex == email.length() - 1) {</span>
<span class="fc" id="L81"> return &quot;***&quot;;</span>
}
<span class="fc" id="L84"> String localPart = email.substring(0, atIndex);</span>
<span class="fc" id="L85"> String domain = email.substring(atIndex + 1);</span>
<span class="fc" id="L86"> return localPartPrefix(localPart) + &quot;***@&quot; + domain;</span>
}
private static String localPartPrefix(String localPart) {
<span class="fc bfc" id="L90" title="All 2 branches covered."> if (localPart.length() == 1) {</span>
<span class="fc" id="L91"> return localPart;</span>
}
<span class="fc" id="L93"> return localPart.substring(0, Math.min(localPart.length(), 2));</span>
}
private static boolean isIpv4Octets(String[] octets) {
<span class="fc bfc" id="L97" title="All 2 branches covered."> for (String octet : octets) {</span>
<span class="fc bfc" id="L98" title="All 2 branches covered."> if (!isIpv4Octet(octet)) {</span>
<span class="fc" id="L99"> return false;</span>
}
}
<span class="fc" id="L102"> return true;</span>
}
private static boolean isIpv4Octet(String octet) {
<span class="pc bpc" id="L106" title="1 of 4 branches missed."> if (octet.isEmpty() || octet.length() &gt; 3) {</span>
<span class="fc" id="L107"> return false;</span>
}
<span class="fc" id="L109"> int value = 0;</span>
<span class="fc bfc" id="L110" title="All 2 branches covered."> for (int index = 0; index &lt; octet.length(); index++) {</span>
<span class="fc" id="L111"> char character = octet.charAt(index);</span>
<span class="fc bfc" id="L112" title="All 2 branches covered."> if (!Character.isDigit(character)) {</span>
<span class="fc" id="L113"> return false;</span>
}
<span class="fc" id="L115"> value = value * 10 + Character.digit(character, 10);</span>
}
<span class="fc bfc" id="L117" title="All 2 branches covered."> return value &lt;= 255;</span>
}
private static String sha256Hex(String value) {
try {
<span class="fc" id="L122"> MessageDigest digest = MessageDigest.getInstance(&quot;SHA-256&quot;);</span>
<span class="fc" id="L123"> return HEX_FORMAT.formatHex(digest.digest(value.getBytes(StandardCharsets.UTF_8)));</span>
<span class="nc" id="L124"> } catch (NoSuchAlgorithmException exception) {</span>
<span class="nc" id="L125"> throw new IllegalStateException(&quot;SHA-256 digest is not available.&quot;, exception);</span>
}
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.support.logging</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.support.logging</span></div><h1>com.project.auth.application.support.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 276</td><td class="ctr2">97%</td><td class="bar">1 of 54</td><td class="ctr2">98%</td><td class="ctr1">1</td><td class="ctr2">39</td><td class="ctr1">2</td><td class="ctr2">54</td><td class="ctr1">0</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="LogSanitizer.html" class="el_class">LogSanitizer</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="7" alt="7"/><img src="../jacoco-resources/greenbar.gif" width="116" height="10" title="269" alt="269"/></td><td class="ctr2" id="c0">97%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="117" height="10" title="53" alt="53"/></td><td class="ctr2" id="e0">98%</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">39</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">54</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">12</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>com.project.auth.application.support.logging</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">application</a> &gt; <span class="el_package">com.project.auth.application.support.logging</span></div><h1>com.project.auth.application.support.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 276</td><td class="ctr2">97%</td><td class="bar">1 of 54</td><td class="ctr2">98%</td><td class="ctr1">1</td><td class="ctr2">39</td><td class="ctr1">2</td><td class="ctr2">54</td><td class="ctr1">0</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="LogSanitizer.java.html" class="el_source">LogSanitizer.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="7" alt="7"/><img src="../jacoco-resources/greenbar.gif" width="116" height="10" title="269" alt="269"/></td><td class="ctr2" id="c0">97%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="117" height="10" title="53" alt="53"/></td><td class="ctr2" id="e0">98%</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">39</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">54</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">12</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

@@ -0,0 +1,13 @@
/* Pretty printing styles. Used with prettify.js. */
.str { color: #2A00FF; }
.kwd { color: #7F0055; font-weight:bold; }
.com { color: #3F5FBF; }
.typ { color: #606; }
.lit { color: #066; }
.pun { color: #660; }
.pln { color: #000; }
.tag { color: #008; }
.atn { color: #606; }
.atv { color: #080; }
.dec { color: #606; }
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

@@ -0,0 +1,243 @@
body, td {
font-family:sans-serif;
font-size:10pt;
}
h1 {
font-weight:bold;
font-size:18pt;
}
.breadcrumb {
border:#d6d3ce 1px solid;
padding:2px 4px 2px 4px;
}
.breadcrumb .info {
float:right;
}
.breadcrumb .info a {
margin-left:8px;
}
.el_report {
padding-left:18px;
background-image:url(report.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_group {
padding-left:18px;
background-image:url(group.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_bundle {
padding-left:18px;
background-image:url(bundle.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_package {
padding-left:18px;
background-image:url(package.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_class {
padding-left:18px;
background-image:url(class.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_source {
padding-left:18px;
background-image:url(source.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_method {
padding-left:18px;
background-image:url(method.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_session {
padding-left:18px;
background-image:url(session.gif);
background-position:left center;
background-repeat:no-repeat;
}
pre.source {
border:#d6d3ce 1px solid;
font-family:monospace;
}
pre.source ol {
margin-bottom: 0px;
margin-top: 0px;
}
pre.source li {
border-left: 1px solid #D6D3CE;
color: #A0A0A0;
padding-left: 0px;
}
pre.source span.fc {
background-color:#ccffcc;
}
pre.source span.nc {
background-color:#ffaaaa;
}
pre.source span.pc {
background-color:#ffffcc;
}
pre.source span.bfc {
background-image: url(branchfc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bfc:hover {
background-color:#80ff80;
}
pre.source span.bnc {
background-image: url(branchnc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bnc:hover {
background-color:#ff8080;
}
pre.source span.bpc {
background-image: url(branchpc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bpc:hover {
background-color:#ffff80;
}
table.coverage {
empty-cells:show;
border-collapse:collapse;
}
table.coverage thead {
background-color:#e0e0e0;
}
table.coverage thead td {
white-space:nowrap;
padding:2px 14px 0px 6px;
border-bottom:#b0b0b0 1px solid;
}
table.coverage thead td.bar {
border-left:#cccccc 1px solid;
}
table.coverage thead td.ctr1 {
text-align:right;
border-left:#cccccc 1px solid;
}
table.coverage thead td.ctr2 {
text-align:right;
padding-left:2px;
}
table.coverage thead td.sortable {
cursor:pointer;
background-image:url(sort.gif);
background-position:right center;
background-repeat:no-repeat;
}
table.coverage thead td.up {
background-image:url(up.gif);
}
table.coverage thead td.down {
background-image:url(down.gif);
}
table.coverage tbody td {
white-space:nowrap;
padding:2px 6px 2px 6px;
border-bottom:#d6d3ce 1px solid;
}
table.coverage tbody tr:hover {
background: #f0f0d0 !important;
}
table.coverage tbody td.bar {
border-left:#e8e8e8 1px solid;
}
table.coverage tbody td.ctr1 {
text-align:right;
padding-right:14px;
border-left:#e8e8e8 1px solid;
}
table.coverage tbody td.ctr2 {
text-align:right;
padding-right:14px;
padding-left:2px;
}
table.coverage tfoot td {
white-space:nowrap;
padding:2px 6px 2px 6px;
}
table.coverage tfoot td.bar {
border-left:#e8e8e8 1px solid;
}
table.coverage tfoot td.ctr1 {
text-align:right;
padding-right:14px;
border-left:#e8e8e8 1px solid;
}
table.coverage tfoot td.ctr2 {
text-align:right;
padding-right:14px;
padding-left:2px;
}
.footer {
margin-top:20px;
border-top:#d6d3ce 1px solid;
padding-top:2px;
font-size:8pt;
color:#a0a0a0;
}
.footer a {
color:#a0a0a0;
}
.right {
float:right;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

@@ -0,0 +1,148 @@
/*******************************************************************************
* Copyright (c) 2009, 2025 Mountainminds GmbH & Co. KG and Contributors
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
(function () {
/**
* Sets the initial sorting derived from the hash.
*
* @param linkelementids
* list of element ids to search for links to add sort inidcator
* hash links
*/
function initialSort(linkelementids) {
window.linkelementids = linkelementids;
var hash = window.location.hash;
if (hash) {
var m = hash.match(/up-./);
if (m) {
var header = window.document.getElementById(m[0].charAt(3));
if (header) {
sortColumn(header, true);
}
return;
}
var m = hash.match(/dn-./);
if (m) {
var header = window.document.getElementById(m[0].charAt(3));
if (header) {
sortColumn(header, false);
}
return
}
}
}
/**
* Sorts the columns with the given header dependening on the current sort state.
*/
function toggleSort(header) {
var sortup = header.className.indexOf('down ') == 0;
sortColumn(header, sortup);
}
/**
* Sorts the columns with the given header in the given direction.
*/
function sortColumn(header, sortup) {
var table = header.parentNode.parentNode.parentNode;
var body = table.tBodies[0];
var colidx = getNodePosition(header);
resetSortedStyle(table);
var rows = body.rows;
var sortedrows = [];
for (var i = 0; i < rows.length; i++) {
r = rows[i];
sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
}
var hash;
if (sortup) {
for (var i = sortedrows.length - 1; i >= 0; i--) {
body.appendChild(sortedrows[i]);
}
header.className = 'up ' + header.className;
hash = 'up-' + header.id;
} else {
for (var i = 0; i < sortedrows.length; i++) {
body.appendChild(sortedrows[i]);
}
header.className = 'down ' + header.className;
hash = 'dn-' + header.id;
}
setHash(hash);
}
/**
* Adds the sort indicator as a hash to the document URL and all links.
*/
function setHash(hash) {
window.document.location.hash = hash;
ids = window.linkelementids;
for (var i = 0; i < ids.length; i++) {
setHashOnAllLinks(document.getElementById(ids[i]), hash);
}
}
/**
* Extend all links within the given tag with the given hash.
*/
function setHashOnAllLinks(tag, hash) {
links = tag.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
var a = links[i];
var href = a.href;
var hashpos = href.indexOf("#");
if (hashpos != -1) {
href = href.substring(0, hashpos);
}
a.href = href + "#" + hash;
}
}
/**
* Calculates the position of a element within its parent.
*/
function getNodePosition(element) {
var pos = -1;
while (element) {
element = element.previousSibling;
pos++;
}
return pos;
}
/**
* Remove the sorting indicator style from all headers.
*/
function resetSortedStyle(table) {
for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
if (c.className) {
if (c.className.indexOf('down ') == 0) {
c.className = c.className.slice(5);
}
if (c.className.indexOf('up ') == 0) {
c.className = c.className.slice(3);
}
}
}
}
window['initialSort'] = initialSort;
window['toggleSort'] = toggleSort;
})();
Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,153 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.application.auth.identity.internal.KeycloakUserLoaderTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.application.auth.identity.internal.KeycloakUserLoaderTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>KeycloakUserLoaderTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">5</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.304s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">loadAutoRegistersMissingInternalUser()</td>
<td class="path" hidden="">loadAutoRegistersMissingInternalUser()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.250s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">loadRejectsBlankClaimsAsInvalid()</td>
<td class="path" hidden="">loadRejectsBlankClaimsAsInvalid()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.006s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">loadRejectsMalformedEmailClaimAsInvalid()</td>
<td class="path" hidden="">loadRejectsMalformedEmailClaimAsInvalid()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">loadRejectsMissingSubjectWhenEmailAlreadyBelongsToAnotherUser()</td>
<td class="path" hidden="">loadRejectsMissingSubjectWhenEmailAlreadyBelongsToAnotherUser()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">loadReturnsExistingUserByKeycloakSubject()</td>
<td class="path" hidden="">loadReturnsExistingUserByKeycloakSubject()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.application.support.exception.BusinessExceptionTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.application.support.exception.BusinessExceptionTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>BusinessExceptionTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">4</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.008s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">cause_constructor_preserves_cause_and_uses_error_code_message()</td>
<td class="path" hidden="">cause_constructor_preserves_cause_and_uses_error_code_message()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">detail_message_and_cause_constructor_preserves_both()</td>
<td class="path" hidden="">detail_message_and_cause_constructor_preserves_both()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">detail_message_constructor_overrides_message()</td>
<td class="path" hidden="">detail_message_constructor_overrides_message()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">single_arg_constructor_uses_error_code_message()</td>
<td class="path" hidden="">single_arg_constructor_uses_error_code_message()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,154 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - auth_error_code_exposes_code_and_message(AuthErrorCode)</title>
<link href="../../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../../index.html">all</a> &gt;
<a class="breadcrumb" href="../index.html">com.project.auth.application.support.exception.ErrorCodeEnumTest</a> &gt;
<span class="breadcrumb">auth_error_code_exposes_code_and_message(AuthErrorCode)</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>auth_error_code_exposes_code_and_message(AuthErrorCode)</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">5</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.089s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">[1] AUTHENTICATION_REQUIRED</td>
<td class="path">auth_error_code_exposes_code_and_message(AuthErrorCode)[1]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.012s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[2] ACCESS_DENIED</td>
<td class="path">auth_error_code_exposes_code_and_message(AuthErrorCode)[2]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[3] KEYCLOAK_CLAIMS_INVALID</td>
<td class="path">auth_error_code_exposes_code_and_message(AuthErrorCode)[3]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[4] KEYCLOAK_USER_NOT_FOUND</td>
<td class="path">auth_error_code_exposes_code_and_message(AuthErrorCode)[4]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[5] KEYCLOAK_ACCOUNT_CONFLICT</td>
<td class="path">auth_error_code_exposes_code_and_message(AuthErrorCode)[5]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - common_error_code_exposes_code_and_message(CommonErrorCode)</title>
<link href="../../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../../index.html">all</a> &gt;
<a class="breadcrumb" href="../index.html">com.project.auth.application.support.exception.ErrorCodeEnumTest</a> &gt;
<span class="breadcrumb">common_error_code_exposes_code_and_message(CommonErrorCode)</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>common_error_code_exposes_code_and_message(CommonErrorCode)</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.006s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">[1] INTERNAL_SERVER_ERROR</td>
<td class="path">common_error_code_exposes_code_and_message(CommonErrorCode)[1]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.application.support.exception.ErrorCodeEnumTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.application.support.exception.ErrorCodeEnumTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>ErrorCodeEnumTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">6</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.102s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="auth_error_code_exposes_code_and_message(AuthErrorCode)/index.html">auth_error_code_exposes_code_and_message(AuthErrorCode)</a>
</td>
<td class="path" hidden="">auth_error_code_exposes_code_and_message(AuthErrorCode)</td>
<td>5</td>
<td>0</td>
<td>0</td>
<td>0.089s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="common_error_code_exposes_code_and_message(CommonErrorCode)/index.html">common_error_code_exposes_code_and_message(CommonErrorCode)</a>
</td>
<td class="path" hidden="">common_error_code_exposes_code_and_message(CommonErrorCode)</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.006s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - client_ip_falls_back_to_hash_when_octet_invalid(String)</title>
<link href="../../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../../index.html">all</a> &gt;
<a class="breadcrumb" href="../index.html">com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest</a> &gt;
<span class="breadcrumb">client_ip_falls_back_to_hash_when_octet_invalid(String)</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>client_ip_falls_back_to_hash_when_octet_invalid(String)</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">3</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.016s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">[1] &quot;1.2.3.999&quot;</td>
<td class="path">client_ip_falls_back_to_hash_when_octet_invalid(String)[1]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[2] &quot;1.2.3.1234&quot;</td>
<td class="path">client_ip_falls_back_to_hash_when_octet_invalid(String)[2]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[3] &quot;1.2.3.abc&quot;</td>
<td class="path">client_ip_falls_back_to_hash_when_octet_invalid(String)[3]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>LogSanitizerEdgeCaseTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">7</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.029s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="client_ip_falls_back_to_hash_when_octet_invalid(String)/index.html">client_ip_falls_back_to_hash_when_octet_invalid(String)</a>
</td>
<td class="path" hidden="">client_ip_falls_back_to_hash_when_octet_invalid(String)</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.016s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="mask_email_returns_triple_star_for_malformed_emails(String)/index.html">mask_email_returns_triple_star_for_malformed_emails(String)</a>
</td>
<td class="path" hidden="">mask_email_returns_triple_star_for_malformed_emails(String)</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.009s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">normalize_single_arg_uses_default_max_length()</td>
<td class="path" hidden="">normalize_single_arg_uses_default_max_length()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.003s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - mask_email_returns_triple_star_for_malformed_emails(String)</title>
<link href="../../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../../index.html">all</a> &gt;
<a class="breadcrumb" href="../index.html">com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest</a> &gt;
<span class="breadcrumb">mask_email_returns_triple_star_for_malformed_emails(String)</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>mask_email_returns_triple_star_for_malformed_emails(String)</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">3</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.009s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">[1] &quot;@example.com&quot;</td>
<td class="path">mask_email_returns_triple_star_for_malformed_emails(String)[1]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[2] &quot;user@&quot;</td>
<td class="path">mask_email_returns_triple_star_for_malformed_emails(String)[2]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.002s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">[3] &quot;@&quot;</td>
<td class="path">mask_email_returns_triple_star_for_malformed_emails(String)[3]</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.001s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - actorId for blank anonymous returns anonymous</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">actorId for blank anonymous returns anonymous</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>actorId for blank anonymous returns anonymous</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.040s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-actorId for blank anonymous returns anonymous">timestamp = 2026-05-12T15:24:24.503929423, LogSanitizerPropertyTest:actorId for blank anonymous returns anonymous =
|-----------------------jqwik-----------------------
tries = 4 | # of calls to property
checks = 4 | # of not rejected calls
generation = EXHAUSTIVE | parameters are exhaustively generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 0 | # of all combined edge cases
edge-cases#tried = 0 | # of edge cases tried in current run
seed = 8904195071759405195 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-actorId for blank anonymous returns anonymous">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - actorId for email masks local part</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">actorId for email masks local part</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>actorId for email masks local part</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.890s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-actorId for email masks local part">timestamp = 2026-05-12T15:24:24.268964781, LogSanitizerPropertyTest:actorId for email masks local part =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 16 | # of all combined edge cases
edge-cases#tried = 16 | # of edge cases tried in current run
seed = 9079599534688328379 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-actorId for email masks local part">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - actorId for non email non blank returns hash prefix</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">actorId for non email non blank returns hash prefix</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>actorId for non email non blank returns hash prefix</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.165s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-actorId for non email non blank returns hash prefix">timestamp = 2026-05-12T15:24:25.334091836, LogSanitizerPropertyTest:actorId for non email non blank returns hash prefix =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 2 | # of all combined edge cases
edge-cases#tried = 2 | # of edge cases tried in current run
seed = -8049545379471102578 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-actorId for non email non blank returns hash prefix">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - clientIp for blank returns dash</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">clientIp for blank returns dash</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>clientIp for blank returns dash</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.007s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-clientIp for blank returns dash">timestamp = 2026-05-12T15:24:25.631015469, LogSanitizerPropertyTest:clientIp for blank returns dash =
|-----------------------jqwik-----------------------
tries = 6 | # of calls to property
checks = 6 | # of not rejected calls
generation = EXHAUSTIVE | parameters are exhaustively generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 0 | # of all combined edge cases
edge-cases#tried = 0 | # of edge cases tried in current run
seed = 2015364430866042887 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-clientIp for blank returns dash">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - clientIp with non ipv4 falls back to hash</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">clientIp with non ipv4 falls back to hash</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>clientIp with non ipv4 falls back to hash</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.040s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-clientIp with non ipv4 falls back to hash">timestamp = 2026-05-12T15:24:25.623821470, LogSanitizerPropertyTest:clientIp with non ipv4 falls back to hash =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 2 | # of all combined edge cases
edge-cases#tried = 2 | # of edge cases tried in current run
seed = -1099456930371871667 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-clientIp with non ipv4 falls back to hash">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - clientIp with valid ipv4 masks last octet</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">clientIp with valid ipv4 masks last octet</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>clientIp with valid ipv4 masks last octet</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.511s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-clientIp with valid ipv4 masks last octet">timestamp = 2026-05-12T15:24:25.016843837, LogSanitizerPropertyTest:clientIp with valid ipv4 masks last octet =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 625 | # of all combined edge cases
edge-cases#tried = 148 | # of edge cases tried in current run
seed = -6250169561580069028 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-clientIp with valid ipv4 masks last octet">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,229 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.application.support.logging.LogSanitizerPropertyTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.application.support.logging.LogSanitizerPropertyTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>LogSanitizerPropertyTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">11</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">2.261s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="actorId-for-blank-anonymous-returns-anonymous.html">actorId for blank anonymous returns anonymous</a>
</td>
<td class="path" hidden="">actorId for blank anonymous returns anonymous</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.040s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="actorId-for-email-masks-local-part.html">actorId for email masks local part</a>
</td>
<td class="path" hidden="">actorId for email masks local part</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.890s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="actorId-for-non-email-non-blank-returns-hash-prefix.html">actorId for non email non blank returns hash prefix</a>
</td>
<td class="path" hidden="">actorId for non email non blank returns hash prefix</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.165s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="clientIp-for-blank-returns-dash.html">clientIp for blank returns dash</a>
</td>
<td class="path" hidden="">clientIp for blank returns dash</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.007s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="clientIp-with-non-ipv4-falls-back-to-hash.html">clientIp with non ipv4 falls back to hash</a>
</td>
<td class="path" hidden="">clientIp with non ipv4 falls back to hash</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.040s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="clientIp-with-valid-ipv4-masks-last-octet.html">clientIp with valid ipv4 masks last octet</a>
</td>
<td class="path" hidden="">clientIp with valid ipv4 masks last octet</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.511s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="normalize-null-or-blank-returns-dash.html">normalize null or blank returns dash</a>
</td>
<td class="path" hidden="">normalize null or blank returns dash</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.016s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="normalize-output-length-is-bounded-by-max-plus-three.html">normalize output length is bounded by max plus three</a>
</td>
<td class="path" hidden="">normalize output length is bounded by max plus three</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.128s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="normalize-strips-control-whitespace-equals-pipe-chars.html">normalize strips control whitespace equals pipe chars</a>
</td>
<td class="path" hidden="">normalize strips control whitespace equals pipe chars</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.103s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="requestPath-output-length-is-bounded.html">requestPath output length is bounded</a>
</td>
<td class="path" hidden="">requestPath output length is bounded</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.150s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="userAgent-output-length-is-bounded.html">userAgent output length is bounded</a>
</td>
<td class="path" hidden="">userAgent output length is bounded</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.184s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - normalize null or blank returns dash</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">normalize null or blank returns dash</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>normalize null or blank returns dash</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.016s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-normalize null or blank returns dash">timestamp = 2026-05-12T15:24:25.348856958, LogSanitizerPropertyTest:normalize null or blank returns dash =
|-----------------------jqwik-----------------------
tries = 6 | # of calls to property
checks = 6 | # of not rejected calls
generation = EXHAUSTIVE | parameters are exhaustively generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 0 | # of all combined edge cases
edge-cases#tried = 0 | # of edge cases tried in current run
seed = -8999208271958527147 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-normalize null or blank returns dash">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - normalize output length is bounded by max plus three</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">normalize output length is bounded by max plus three</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>normalize output length is bounded by max plus three</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.128s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-normalize output length is bounded by max plus three">timestamp = 2026-05-12T15:24:25.471211279, LogSanitizerPropertyTest:normalize output length is bounded by max plus three =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 3 | # of all combined edge cases
edge-cases#tried = 3 | # of edge cases tried in current run
seed = -1917702041628164457 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-normalize output length is bounded by max plus three">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - normalize strips control whitespace equals pipe chars</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">normalize strips control whitespace equals pipe chars</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>normalize strips control whitespace equals pipe chars</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.103s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-normalize strips control whitespace equals pipe chars">timestamp = 2026-05-12T15:24:25.583555150, LogSanitizerPropertyTest:normalize strips control whitespace equals pipe chars =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 2 | # of all combined edge cases
edge-cases#tried = 2 | # of edge cases tried in current run
seed = -9127916090391585149 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-normalize strips control whitespace equals pipe chars">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - requestPath output length is bounded</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">requestPath output length is bounded</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>requestPath output length is bounded</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.150s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-requestPath output length is bounded">timestamp = 2026-05-12T15:24:25.166700790, LogSanitizerPropertyTest:requestPath output length is bounded =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 3 | # of all combined edge cases
edge-cases#tried = 3 | # of edge cases tried in current run
seed = -5603906610245910658 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-requestPath output length is bounded">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - userAgent output length is bounded</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.application.support.logging.LogSanitizerPropertyTest</a> &gt;
<span class="breadcrumb">userAgent output length is bounded</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>userAgent output length is bounded</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.184s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-userAgent output length is bounded">timestamp = 2026-05-12T15:24:24.463365086, LogSanitizerPropertyTest:userAgent output length is bounded =
|-----------------------jqwik-----------------------
tries = 1000 | # of calls to property
checks = 1000 | # of not rejected calls
generation = RANDOMIZED | parameters are randomly generated
after-failure = SAMPLE_FIRST | try previously failed sample, then previous seed
when-fixed-seed = ALLOW | fixing the random seed is allowed
edge-cases#mode = MIXIN | edge cases are mixed in
edge-cases#total = 3 | # of all combined edge cases
edge-cases#tried = 3 | # of edge cases tried in current run
seed = -8720060840285361729 | random seed to reproduce generated values
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-userAgent output length is bounded">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,175 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
font-size: 12pt;
}
body, a, a:visited {
color: #303030;
}
#content {
padding: 30px 50px;
}
#content h1 {
font-size: 160%;
margin-bottom: 10px;
}
#footer {
margin-top: 100px;
font-size: 80%;
white-space: nowrap;
}
#footer, #footer a {
color: #a0a0a0;
}
#line-wrapping-toggle {
vertical-align: middle;
}
#label-for-line-wrapping-toggle {
vertical-align: middle;
}
ul {
margin-left: 0;
}
h1, h2, h3 {
white-space: nowrap;
}
h2 {
font-size: 120%;
}
.tab-container .tab-container {
margin-left: 8px;
}
ul.tabLinks {
padding: 0;
margin-bottom: 0;
overflow: auto;
min-width: 800px;
width: auto;
border-bottom: solid 1px #aaa;
}
ul.tabLinks li {
float: left;
height: 100%;
list-style: none;
padding: 5px 10px;
border-radius: 7px 7px 0 0;
border: solid 1px transparent;
border-bottom: none;
margin-right: 6px;
background-color: #f0f0f0;
cursor: pointer;
}
ul.tabLinks li.deselected > a {
color: #6d6d6d;
}
ul.tabLinks li:hover {
background-color: #fafafa;
}
ul.tabLinks li.selected {
background-color: #c5f0f5;
border-color: #aaa;
}
ul.tabLinks a {
font-size: 120%;
display: block;
outline: none;
text-decoration: none;
margin: 0;
padding: 0;
}
ul.tabLinks li h2 {
margin: 0;
padding: 0;
}
div.tab {
}
div.selected {
display: block;
}
div.deselected {
display: none;
}
div.tab table {
min-width: 350px;
width: auto;
border-collapse: collapse;
}
div.tab th, div.tab table {
border-bottom: solid 1px #d0d0d0;
}
div.tab th {
text-align: left;
white-space: nowrap;
padding-left: 6em;
}
div.tab th:first-child {
padding-left: 0;
}
div.tab td {
white-space: nowrap;
padding-left: 6em;
padding-top: 5px;
padding-bottom: 5px;
}
div.tab td:first-child {
padding-left: 0;
}
div.tab td.numeric, div.tab th.numeric {
text-align: right;
}
span.code {
display: inline-block;
margin-top: 0;
margin-bottom: 1em;
}
span.code pre {
font-size: 11pt;
padding: 10px;
margin: 0;
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
min-width: 700px;
width: auto;
}
span.wrapped pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-all;
}
label.hidden {
display: none;
}
@@ -0,0 +1,154 @@
.summary {
margin-top: 30px;
margin-bottom: 40px;
}
.summary table {
border-collapse: collapse;
}
.summary td {
vertical-align: top;
}
div.tab table.test-results td {
padding-left: 1em;
}
div.tab table.test-results th {
padding-top: 0.5em;
padding-left: 1em;
}
.breadcrumbs, .breadcrumbs a {
color: #606060;
}
.infoBox {
width: 110px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.infoBox p {
margin: 0;
}
.counter, .percent {
font-size: 120%;
font-weight: bold;
margin-bottom: 8px;
}
.duration {
width: 125px;
}
.successRate, .summaryGroup {
border: solid 2px #d0d0d0;
-moz-border-radius: 10px;
border-radius: 10px;
}
.successRate {
width: 140px;
margin-left: 35px;
}
.successRate .percent {
font-size: 180%;
}
.success, .success a {
color: #008000;
}
div.success, .successRate.success {
background-color: #bbd9bb;
border-color: #008000;
}
.failures, .failures a {
color: #b60808;
}
.skipped, .skipped a {
color: #c09853;
}
div.failures, .successRate.failures {
background-color: #ecdada;
border-color: #b60808;
}
ul.linkList {
padding-left: 0;
}
ul.linkList li {
list-style: none;
margin-bottom: 5px;
}
div.metadata td:first-child {
padding-left: 5px;
}
div.metadata td {
padding-left: 5px;
}
.metadata tr.odd {
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
}
.metadata tr.even {
border: solid 1px #d0d0d0;
}
.metadata th, .metadata td {
padding: 5px;
text-align: left;
}
.metadata a {
color: blue;
}
.metadata .unrenderable {
color: darkred;
}
.code {
position: relative;
}
.clipboard-copy-btn {
position: absolute;
top: 8px;
right: 8px;
padding: 4px 8px;
font-size: 0.9em;
cursor: pointer;
}
.successGroup::before {
content: "\23FA";
margin-right: 8px;
color: #008000;
display: inline-block;
}
.failureGroup::before {
content: "\2297";
margin-right: 8px;
color: #b60808;
display: inline-block;
}
.skippedGroup::before {
content: "\2296";
margin-right: 8px;
color: #c09853;
display: inline-block;
}
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - All Results</title>
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script src="js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>All Results</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :application:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :application:test</h2>
<h1>Gradle Test Run :application:test</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">33</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">4.979s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="com.project.auth.application.auth.identity.internal.KeycloakUserLoaderTest/index.html">KeycloakUserLoaderTest</a>
</td>
<td class="path">com.project.auth.application.auth.identity.internal.KeycloakUserLoaderTest</td>
<td>5</td>
<td>0</td>
<td>0</td>
<td>0.304s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="com.project.auth.application.support.exception.BusinessExceptionTest/index.html">BusinessExceptionTest</a>
</td>
<td class="path">com.project.auth.application.support.exception.BusinessExceptionTest</td>
<td>4</td>
<td>0</td>
<td>0</td>
<td>0.008s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="com.project.auth.application.support.exception.ErrorCodeEnumTest/index.html">ErrorCodeEnumTest</a>
</td>
<td class="path">com.project.auth.application.support.exception.ErrorCodeEnumTest</td>
<td>6</td>
<td>0</td>
<td>0</td>
<td>0.102s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest/index.html">LogSanitizerEdgeCaseTest</a>
</td>
<td class="path">com.project.auth.application.support.logging.LogSanitizerEdgeCaseTest</td>
<td>7</td>
<td>0</td>
<td>0</td>
<td>0.029s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="com.project.auth.application.support.logging.LogSanitizerPropertyTest/index.html">LogSanitizerPropertyTest</a>
</td>
<td class="path">com.project.auth.application.support.logging.LogSanitizerPropertyTest</td>
<td>11</td>
<td>0</td>
<td>0</td>
<td>2.261s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:24:25PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,228 @@
(function (window, document) {
"use strict";
function changeElementClass(element, classValue) {
if (element.getAttribute("className")) {
element.setAttribute("className", classValue);
} else {
element.setAttribute("class", classValue);
}
}
function getClassAttribute(element) {
if (element.getAttribute("className")) {
return element.getAttribute("className");
} else {
return element.getAttribute("class");
}
}
function addClass(element, classValue) {
changeElementClass(element, getClassAttribute(element) + " " + classValue);
}
function removeClass(element, classValue) {
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
}
function getCheckBox() {
return document.getElementById("line-wrapping-toggle");
}
function getLabelForCheckBox() {
return document.getElementById("label-for-line-wrapping-toggle");
}
function findCodeBlocks() {
const codeBlocks = [];
const tabContainers = getTabContainers();
for (let i = 0; i < tabContainers.length; i++) {
const spans = tabContainers[i].getElementsByTagName("span");
for (let i = 0; i < spans.length; ++i) {
if (spans[i].className.indexOf("code") >= 0) {
codeBlocks.push(spans[i]);
}
}
}
return codeBlocks;
}
function forAllCodeBlocks(operation) {
const codeBlocks = findCodeBlocks();
for (let i = 0; i < codeBlocks.length; ++i) {
operation(codeBlocks[i], "wrapped");
}
}
function toggleLineWrapping() {
const checkBox = getCheckBox();
if (checkBox.checked) {
forAllCodeBlocks(addClass);
} else {
forAllCodeBlocks(removeClass);
}
}
function initClipboardCopyButton() {
document.querySelectorAll(".clipboard-copy-btn").forEach((button) => {
const copyElementId = button.getAttribute("data-copy-element-id");
const elementWithCodeToSelect = document.getElementById(copyElementId);
button.addEventListener("click", () => {
const text = elementWithCodeToSelect.innerText.trim();
navigator.clipboard
.writeText(text)
.then(() => {
button.textContent = "Copied!";
setTimeout(() => {
button.textContent = "Copy";
}, 1500);
})
.catch((err) => {
alert("Failed to copy to the clipboard: '" + err.message + "'. Check JavaScript console for more details.")
console.warn("Failed to copy to the clipboard", err);
});
});
});
}
function initControls() {
if (findCodeBlocks().length > 0) {
const checkBox = getCheckBox();
const label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping;
checkBox.checked = false;
removeClass(label, "hidden");
}
initClipboardCopyButton()
}
class TabManager {
baseId;
tabs;
titles;
headers;
constructor(baseId, tabs, titles, headers) {
this.baseId = baseId;
this.tabs = tabs;
this.titles = titles;
this.headers = headers;
this.init();
}
init() {
for (let i = 0; i < this.headers.length; i++) {
const header = this.headers[i];
header.onclick = () => {
this.select(i);
return false;
};
}
}
select(i) {
this.deselectAll();
changeElementClass(this.tabs[i], "tab selected");
changeElementClass(this.headers[i], "selected");
}
deselectAll() {
for (let i = 0; i < this.tabs.length; i++) {
changeElementClass(this.tabs[i], "tab deselected");
changeElementClass(this.headers[i], "deselected");
}
}
}
function getTabContainers() {
const tabContainers = Array.from(document.getElementsByClassName("tab-container"));
// Used by existing TabbedPageRenderer users, which have not adjusted to use TabsRenderer yet.
const legacyContainer = document.getElementById("tabs");
if (legacyContainer) {
tabContainers.push(legacyContainer);
}
return tabContainers;
}
function initTabs() {
let tabGroups = 0;
function createTab(num, container) {
const tabElems = findTabs(container);
const tabManager = new TabManager("tabs" + num, tabElems, findTitles(tabElems), findHeaders(container));
tabManager.select(0);
}
const tabContainers = getTabContainers();
for (let i = 0; i < tabContainers.length; i++) {
createTab(tabGroups, tabContainers[i]);
tabGroups++;
}
return true;
}
function findTabs(container) {
return findChildElements(container, "DIV", "tab");
}
function findHeaders(container) {
const owner = findChildElements(container, "UL", "tabLinks");
return findChildElements(owner[0], "LI", null);
}
function findTitles(tabs) {
const titles = [];
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
const header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) {
titles.push(header.innerText);
} else {
titles.push(header.textContent);
}
}
return titles;
}
function findChildElements(container, name, targetClass) {
const elements = [];
const children = container.childNodes;
for (let i = 0; i < children.length; i++) {
const child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) {
if (targetClass && child.className.indexOf(targetClass) < 0) {
continue;
}
elements.push(child);
}
}
return elements;
}
// Entry point.
window.onload = function() {
initTabs();
initControls();
};
} (window, window.document));