Skip to content

Commit

Permalink
Refactor BrukerServiceConsumer and BrukerServiceGetTilgangCommand to …
Browse files Browse the repository at this point in the history
…return Mono<TilgangDTO> for improved data handling and add TilgangDTO class for user access management #deploy-test-dolly-backend #deploy-dolly-backend
  • Loading branch information
krharum committed Feb 28, 2025
1 parent 0d671e8 commit d7fc977
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.dolly.config.Consumers;
import no.nav.dolly.consumer.brukerservice.command.BrukerServiceGetTilgangCommand;
import no.nav.dolly.consumer.brukerservice.dto.TilgangDTO;
import no.nav.testnav.libs.securitycore.domain.ServerProperties;
import no.nav.testnav.libs.standalone.servletsecurity.exchange.TokenExchange;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.List;

@Service
@Slf4j
public class BrukerServiceConsumer {
Expand All @@ -32,7 +30,7 @@ public BrukerServiceConsumer(
.build();
}

public Mono<List<String>> getKollegaerIOrganisasjon(String brukerId) {
public Mono<TilgangDTO> getKollegaerIOrganisasjon(String brukerId) {

return tokenService.exchange(serverProperties)
.flatMap(token ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package no.nav.dolly.consumer.brukerservice.command;

import lombok.RequiredArgsConstructor;
import no.nav.dolly.consumer.brukerservice.dto.TilgangDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;

Expand All @@ -13,7 +13,7 @@
import java.util.concurrent.Callable;

@RequiredArgsConstructor
public class BrukerServiceGetTilgangCommand implements Callable<Mono<List<String>>> {
public class BrukerServiceGetTilgangCommand implements Callable<Mono<TilgangDTO>> {

private static final String TILGANG_URL = "/api/v1/tilgang";

Expand All @@ -22,18 +22,19 @@ public class BrukerServiceGetTilgangCommand implements Callable<Mono<List<String
private final String token;

@Override
public Mono<List<String>> call() {
public Mono<TilgangDTO> call() {

return webClient.get()
.uri(uriBuilder -> uriBuilder.path(TILGANG_URL)
.queryParam("brukerId", brukerId)
.build())
.header(HttpHeaders.AUTHORIZATION, "Bearer " + token)
.retrieve()
.bodyToMono(String[].class)
.map(List::of)
.bodyToMono(TilgangDTO.class)
.doOnError(WebClientFilter::logErrorMessage)
.onErrorResume(error -> Mono.just(List.of(brukerId)))
.onErrorResume(error -> Mono.just(TilgangDTO.builder()
.brukere(List.of(brukerId))
.build()))
.retryWhen(Retry.backoff(3, Duration.ofSeconds(5))
.filter(WebClientFilter::is5xxException));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package no.nav.dolly.consumer.brukerservice.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

import static java.util.Objects.isNull;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TilgangDTO {

private List<String> brukere;

public List<String> getBrukere() {

if (isNull(brukere)) {
brukere = new ArrayList<>();
}
return brukere;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import ma.glasnost.orika.MapperFacade;
import no.nav.dolly.bestilling.pdldata.PdlDataConsumer;
import no.nav.dolly.consumer.brukerservice.BrukerServiceConsumer;
import no.nav.dolly.consumer.brukerservice.dto.TilgangDTO;
import no.nav.dolly.domain.dto.TestidentDTO;
import no.nav.dolly.domain.jpa.Bruker;
import no.nav.dolly.domain.jpa.Testgruppe;
Expand Down Expand Up @@ -71,7 +72,7 @@ public Testgruppe opprettTestgruppe(RsOpprettEndreTestgruppe rsTestgruppe) {
@Transactional(readOnly = true)
public RsTestgruppeMedBestillingId fetchPaginertTestgruppeById(Long gruppeId, Integer pageNo, Integer pageSize, String sortColumn, String sortRetning) {

sjekkTilgang(gruppeId, pageNo, pageSize);
sjekkTilgang(gruppeId);

var testgruppeUtenIdenter = testgruppeRepository.findByIdOrderById(gruppeId)
.orElseThrow(() -> new NotFoundException(format("Gruppe med id %s ble ikke funnet.", gruppeId)));
Expand Down Expand Up @@ -101,11 +102,12 @@ public RsTestgruppeMedBestillingId fetchPaginertTestgruppeById(Long gruppeId, In
return rsTestgruppe;
}

private void sjekkTilgang(Long gruppeId, Integer pageNo, Integer pageSize) {
private void sjekkTilgang(Long gruppeId) {

var bruker = brukerService.fetchOrCreateBruker();
if (bruker.getBrukertype() == BANKID) {
brukerServiceConsumer.getKollegaerIOrganisasjon(bruker.getBrukerId())
.map(TilgangDTO::getBrukere)
.map(testgruppeRepository::findAllByOpprettetAv_BrukerIdIn)
.filter(page -> page.stream().anyMatch(gruppe -> gruppe.equals(gruppeId)))
.switchIfEmpty(Mono.error(new NotFoundException(format("Gruppe med id %s ble ikke funnet.", gruppeId))))
Expand All @@ -123,6 +125,7 @@ public Mono<Page<Testgruppe>> getAllTestgrupper(Integer pageNo, Integer pageSize
var bruker = brukerService.fetchOrCreateBruker();
if (bruker.getBrukertype() == BANKID) {
return brukerServiceConsumer.getKollegaerIOrganisasjon(bruker.getBrukerId())
.map(TilgangDTO::getBrukere)
.map(brukere -> testgruppeRepository.findAllByOpprettetAv_BrukerIdIn(brukere,
PageRequest.of(pageNo, pageSize, Sort.by("id").descending())));
} else {
Expand Down Expand Up @@ -204,6 +207,7 @@ public RsTestgruppePage getTestgruppeByBrukerId(Integer pageNo, Integer pageSize

if (bruker.getBrukertype() == BANKID) {
paginertGruppe = brukerServiceConsumer.getKollegaerIOrganisasjon(bruker.getBrukerId())
.map(TilgangDTO::getBrukere)
.map(brukere -> testgruppeRepository.findAllByOpprettetAv_BrukerIdIn(brukere,
PageRequest.of(pageNo, pageSize, Sort.by("id").descending())))
.block();
Expand Down

0 comments on commit d7fc977

Please sign in to comment.