Skip to content

Commit

Permalink
Legger på ansettelsessted fra ldap.
Browse files Browse the repository at this point in the history
  • Loading branch information
dijjal committed Aug 5, 2024
1 parent 53acfd5 commit 19eaf37
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package no.nav.foreldrepenger.los.organisasjon.ansatt;

import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
Expand All @@ -26,6 +28,9 @@ public class AnsattTjeneste {
private OrganisasjonRepository organisasjonRepository;
private List<String> aktuelleEnhetIder;

private final Map<String, String> kodeAvdelingsnavnMap = new HashMap<>();


AnsattTjeneste() {
// for CDI proxy
}
Expand All @@ -35,20 +40,22 @@ public AnsattTjeneste(EnhetstilgangTjeneste enhetstilgangTjeneste,
OrganisasjonRepository organisasjonRepository) {
this.enhetstilgangTjeneste = enhetstilgangTjeneste;
this.organisasjonRepository = organisasjonRepository;
organisasjonRepository.hentAktiveAvdelinger().forEach(a -> kodeAvdelingsnavnMap.put(a.getAvdelingEnhet(), a.getNavn()));
}

public BrukerProfil hentBrukerProfil(String ident) {
if (ANSATT_PROFIL.get(ident) == null) {
//TODO: Her bør vi egentlig tenke om NOM er ikke riktigere å bruke - bør være raskere å slå opp navn og epost.
// Jeg har sjekket med NOM (01.07.2024) og de støtter en så lenge ikke Z-identer i dev. Men prod brukere er tilgjengelig.
var før = System.nanoTime();
var brukerProfil = new LdapBrukeroppslag().hentBrukerProfil(ident);
var ldapRespons = new LdapBrukeroppslag().hentBrukerProfil(ident);
LOG.info("LDAP bruker profil oppslag: {}ms. ", Duration.ofNanos(System.nanoTime() - før).toMillis());
if (brukerProfil == null) {
LOG.warn("Kunne ikke hente Bruker profil fra LDAP for {}", ident);
} else {
sammenlignMedAzureGraphFailSoft(ident, brukerProfil);
var ansattEnhet = kodeAvdelingsnavnMap.get(ldapRespons.ansattEnhet());
if (ansattEnhet == null) {
LOG.info("PROFIL LDAP: brukers enhet {} ikke blant saksbehandlingsenhetene", ldapRespons.ansattEnhet());
}
var brukerProfil = new BrukerProfil(ldapRespons.ident(), ldapRespons.navn(), ldapRespons.epostAdresse(), ansattEnhet);
sammenlignMedAzureGraphFailSoft(ident, brukerProfil);
ANSATT_PROFIL.put(ident, brukerProfil);
}
return ANSATT_PROFIL.get(ident);
Expand All @@ -71,7 +78,7 @@ private static void sammenlignMedAzureGraphFailSoft(String ident, BrukerProfil l
}

private static BrukerProfil mapTilDomene(AzureBrukerKlient.BrukerProfilResponse klientResponse) {
return new BrukerProfil(klientResponse.ident(), klientResponse.navn(), klientResponse.epost());
return new BrukerProfil(klientResponse.ident(), klientResponse.fornavnEtternavn(), klientResponse.epost(), klientResponse.ansattVedEnhetId());
}

public List<String> hentAvdelingerNavnForAnsatt(String ident) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ public BrukerProfilResponse brukerProfil(String ident) {

record BrukerProfilRequest(@NotNull String ident) {}

public record BrukerProfilResponse(String ident, String navn, String epost) {}
public record BrukerProfilResponse(String ident, String fornavnEtternavn, String epost, String ansattVedEnhetId) {}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.foreldrepenger.los.organisasjon.ansatt;

public record BrukerProfil(String ident, String navn, String epostAdresse) {
public record BrukerProfil(String ident, String navn, String epostAdresse, String ansattKontornummer) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ public class LdapBrukeroppslag {

private static final Logger LOG = LoggerFactory.getLogger(LdapBrukeroppslag.class);
private static final Pattern IDENT_PATTERN = Pattern.compile("^\\p{LD}+$");
private static final String DISPLAY_NAME_ATTR = "displayName";
private static final String USER_PRINCIPAL_NAME_ATTR = "userPrincipalName";

private final LdapContext context;
private final LdapName searchBase;
private static final String GIVEN_NAME = "givenName";
private static final String SURNAME = "sn";
private static final String USER_PRINCIPAL_NAME = "userPrincipalName";
private static final String STREET_ADDRESS = "streetAddress";

public LdapBrukeroppslag() {
this(LdapInnlogging.lagLdapContext(), lagLdapSearchBase());
Expand All @@ -37,17 +39,22 @@ public LdapBrukeroppslag() {
this.searchBase = searcBase;
}

public BrukerProfil hentBrukerProfil(String ident) {
public BrukerProfilRespons hentBrukerProfil(String ident) {
var result = ldapSearch(ident.trim());
var displayName = find(result, DISPLAY_NAME_ATTR);
var upn = find(result, USER_PRINCIPAL_NAME_ATTR);
var givenName = find(result, GIVEN_NAME);
var surname = find(result, SURNAME);
var upn = find(result, USER_PRINCIPAL_NAME);
var addressCode = find(result, STREET_ADDRESS);
try {
var navn = displayName.get().toString();
var fornavn = givenName.get().toString();
var etternavn = surname.get().toString();
var navn = fornavn + " " + etternavn;
var epostAdresse = upn.get().toString();
var ansattKontornummer = addressCode.get().toString();
if (!epostAdresse.contains("@nav.no")) {
LOG.info("LDAP: fant ikke gyldig epostadresse for bruker {}", ident);
}
return new BrukerProfil(ident, navn, epostAdresse);
return new BrukerProfilRespons(ident, navn, epostAdresse, ansattKontornummer);
} catch (NamingException e) {
throw new TekniskException("F-314006", String.format("Kunne ikke hente ut attributtverdi for ident %s", ident), e);
}
Expand All @@ -65,7 +72,7 @@ private SearchResult ldapSearch(String ident) {
var controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setCountLimit(1);
controls.setReturningAttributes(new String[]{DISPLAY_NAME_ATTR, USER_PRINCIPAL_NAME_ATTR});
controls.setReturningAttributes(new String[]{GIVEN_NAME, SURNAME, USER_PRINCIPAL_NAME, STREET_ADDRESS});
var søkestreng = String.format("(cn=%s)", ident);
try {
var result = context.search(searchBase, søkestreng, controls); // NOSONAR
Expand Down Expand Up @@ -98,4 +105,6 @@ private static LdapName lagLdapSearchBase() {
}
}

public record BrukerProfilRespons(String ident, String navn, String epostAdresse, String ansattEnhet) { }

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.foreldrepenger.los.tjenester.felles.dto;

public record SaksbehandlerDto(SaksbehandlerBrukerIdentDto brukerIdent, String navn, String epostAdresse) {
public record SaksbehandlerDto(SaksbehandlerBrukerIdentDto brukerIdent, String navn, String epostAdresse, String ansattAvdeling) {

@Override
public String toString() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public SaksbehandlerMedAvdelingerDto lagKjentOgUkjentSaksbehandlerMedAvdelingerD
var avdelinger = ansattTjeneste.hentAvdelingerNavnForAnsatt(ident);
return new SaksbehandlerMedAvdelingerDto(saksbehandlerDto.get(), avdelinger);
}
var ukjent = new SaksbehandlerDto(new SaksbehandlerBrukerIdentDto(ident), "Ukjent saksbehandler " + ident, null);
var ukjent = new SaksbehandlerDto(new SaksbehandlerBrukerIdentDto(ident), "Ukjent saksbehandler " + ident, null, null);
return new SaksbehandlerMedAvdelingerDto(ukjent, Collections.emptyList());
}

Expand All @@ -85,7 +85,7 @@ public Optional<SaksbehandlerDto> tilSaksbehandlerDto(Saksbehandler saksbehandle

private Optional<SaksbehandlerDto> tilSaksbehandlerDto(String ident) {
var identDto = new SaksbehandlerBrukerIdentDto(ident);
return hentBrukerProfil(ident).map(bp -> new SaksbehandlerDto(identDto, bp.navn(), bp.epostAdresse()));
return hentBrukerProfil(ident).map(bp -> new SaksbehandlerDto(identDto, bp.navn(), bp.epostAdresse(), bp.ansattKontornummer()));
}

public Optional<BrukerProfil> hentBrukerProfil(String ident) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class AvdelingslederSaksbehandlerRestTjenesteTest {

private static final AvdelingEnhetDto avdelingDto = new AvdelingEnhetDto("4817");
private static final SaksbehandlerBrukerIdentDto brukerIdentDto = new SaksbehandlerBrukerIdentDto("Z999999");
private static final SaksbehandlerDto saksbehandlerDto = new SaksbehandlerDto(brukerIdentDto, "Navn Navnesen", "navn@navnesen.no");
private static final SaksbehandlerDto saksbehandlerDto = new SaksbehandlerDto(brukerIdentDto, "Navn Navnesen", "navn@navnesen.no", "NAV Drammen");
private AvdelingslederSaksbehandlerTjeneste avdelingslederSaksbehandlerTjeneste;
@Mock
private SaksbehandlerDtoTjeneste saksbehandlerDtoTjeneste;
Expand Down

0 comments on commit 19eaf37

Please sign in to comment.