Files
project-auth-server/application/build/reports/jacoco/test/html/com.project.auth.application.auth.identity.internal/KeycloakUserLoader.java.html
T

79 lines
5.4 KiB
HTML

<?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>