Skip to content

Commit

Permalink
Add detailed organization access functionality deploy #deploy-altinn3…
Browse files Browse the repository at this point in the history
…-tilgang-service-prod #deploy-altinn3-tilgang-service

Introduced `PersonDTO` to encapsulate detailed access information for organizations and extended the service and controller to handle this functionality. Updated Altinn integration to include additional filters and parameters for access checks, and added logic for generating detailed access messages.
  • Loading branch information
krharum committed Dec 19, 2024
1 parent e2d641a commit 6e4116d
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public Mono<AuthorizedPartyDTO[]> call() {
log.info("Spørring på bruker {}", request);
return webClient
.post()
.uri(builder -> builder.path(ALTINN_URL).build())
.uri(builder -> builder.path(ALTINN_URL)
.queryParam("includeAltinn2", true).build())
.header(HttpHeaders.AUTHORIZATION, "Bearer " + token)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.bodyValue(request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class AuthorizedPartyDTO {
private String name;
private String organizationNumber;
private String unitType;
private Boolean isDeleted;
private List<String> authorizedResources;
private List<AuthorizedPartyDTO> subunits;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
import no.nav.testnav.altinn3tilgangservice.domain.PersonRequest;
import no.nav.testnav.altinn3tilgangservice.service.AltinnBrukerTilgangService;
import no.nav.testnav.libs.dto.altinn3.v1.OrganisasjonDTO;
import org.springframework.web.bind.annotation.GetMapping;
import no.nav.testnav.libs.dto.altinn3.v1.PersonDTO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@RestController
@RequestMapping("/api/v1/brukertilgang")
Expand All @@ -23,4 +24,10 @@ public Flux<OrganisasjonDTO> getPersonOrganisasjonTilgang(@RequestBody PersonReq

return brukerTilgangService.getPersonOrganisasjonTilgang(request.getIdent());
}

@PostMapping("/detaljert")
public Mono<PersonDTO> getPersonOrganisasjonDetaljertTilgang(@RequestBody PersonRequest request) {

return brukerTilgangService.getPersonOrganisasjonDetaljertTilgang(request.getIdent());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AuthorizedPartyDTO;
import no.nav.testnav.altinn3tilgangservice.domain.Organisasjon;
import no.nav.testnav.libs.dto.altinn3.v1.OrganisasjonDTO;
import no.nav.testnav.libs.dto.altinn3.v1.PersonDTO;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.function.Tuple2;

import java.util.List;

import static org.apache.commons.lang3.BooleanUtils.isFalse;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

@Slf4j
@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -41,4 +45,68 @@ private Mono<OrganisasjonDTO> getOrganisasjon(Tuple2<AuthorizedPartyDTO, List<Or
.organisasjonsform(part.getUnitType())
.build());
}

public Mono<PersonDTO> getPersonOrganisasjonDetaljertTilgang(String ident) {

return Mono.zip(
altinnConsumer.getAuthorizedParties(ident).collectList(),
altinnConsumer.getOrganisasjoner().collectList())
.flatMapMany(this::getTilpassetOrganisasjon)
.collectList()
.map(organisasjoner -> PersonDTO.builder()
.ident(ident)
.organisasjoner(organisasjoner)
.build());
}

private Flux<PersonDTO.OrganisasjonDTO> getTilpassetOrganisasjon(Tuple2<List<AuthorizedPartyDTO>, List<Organisasjon>> organisasjoner) {

return Flux.fromIterable(organisasjoner.getT1())
.filter(party -> isNotBlank(party.getOrganizationNumber()) && isNotBlank(party.getName()))
.filter(party -> isFalse(party.getIsDeleted()))
.map(party -> PersonDTO.OrganisasjonDTO.builder()
.navn(party.getName())
.organisasjonsnummer(party.getOrganizationNumber())
.organisasjonsform(party.getUnitType())
.hasAltinnDollyTilgang(hasAltinnDollyTilgang(party))
.hasDollyOrganisasjonTilgang(hasDollyOrganisasjonTilgang(organisasjoner.getT2(), party))
.melding(getMelding(party.getName(), party.getOrganizationNumber(),
hasAltinnDollyTilgang(party), hasDollyOrganisasjonTilgang(organisasjoner.getT2(), party)))
.build());
}

private static boolean hasAltinnDollyTilgang(AuthorizedPartyDTO authorizedParty) {

return authorizedParty.getAuthorizedResources().contains(DOLLY_RESOURCE);
}

private static boolean hasDollyOrganisasjonTilgang(List<Organisasjon> organisasjoner, AuthorizedPartyDTO party) {

return organisasjoner.stream()
.anyMatch(organisasjon -> organisasjon.getOrganisasjonsnummer().equals(party.getOrganizationNumber()));
}

private static String getMelding(String orgnavn, String orgnummer, boolean hasAltinnDollyTilgang, boolean hasDollyOrganisasjonTilgang) {

return new StringBuilder()
.append(!hasAltinnDollyTilgang ?
"Du mangler tilgang i Altinn på følgende tjenste: " +
"\"Tilgang til NAVs Dolly for samarbeidspartnere\" " +
"for organisasjon %s (med orgnummer %s)%n".formatted(orgnavn, orgnummer) : "")
.append(!hasAltinnDollyTilgang && !hasDollyOrganisasjonTilgang ?
" og %n" : "")
.append(!hasDollyOrganisasjonTilgang ?
"Organisasjon %s (med orgnummer %s) " .formatted(orgnavn, orgnummer) +
"mangler tilgang på Dolly syntetiske testdata selvbetjening%n" : "")
.append(!hasAltinnDollyTilgang || !hasDollyOrganisasjonTilgang ?
"Hvis du har til hensikt å bruke Dolly til å generere testdata, gjør følgende:%n" : "")
.append(!hasAltinnDollyTilgang ?
"- Ta kontakt med Altinn-ansvarlig i %s (med orgnummer %s) ".formatted(orgnavn, orgnummer) +
"og spør om vedkommene kan gi deg tilgang til tjenesten: " +
"\"Tilgang til NAVs Dolly for samarbeidspartnere\"%n" : "")
.append(!hasDollyOrganisasjonTilgang ?
"- Ta kontakt med NAV ved Anders Marstrander epost: [email protected], og spør om " +
"organisasjon med orgnr %s kan gis tilgang til Dolly syntetiske testdata selvbetjening%n".formatted(orgnummer) : "")
.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.testnav.libs.dto.altinn3.v1;

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

import java.util.List;

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

private String ident;
private List<OrganisasjonDTO> organisasjoner;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class OrganisasjonDTO {

private String navn;
private String organisasjonsnummer;
private String organisasjonsform;
private Boolean hasAltinnDollyTilgang;
private Boolean hasDollyOrganisasjonTilgang;
private String melding;
}
}

0 comments on commit 6e4116d

Please sign in to comment.