diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c7235122..d4ba8afa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ jobs: - name: Install ktlint uses: nbadal/action-ktlint-setup@v1 with: - ktlint_version: '1.0.0' + ktlint_version: '1.3.1' - name: Ktlint run: ktlint src/**/*.kt shell: bash diff --git a/build.gradle.kts b/build.gradle.kts index 7ad7441b..53dcb5b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,16 +5,16 @@ import com.expediagroup.graphql.plugin.gradle.tasks.GraphQLGenerateClientTask import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer -val ktor_version = "2.3.12" +val ktor_version = "3.0.1" val kotlin_version = "2.0.21" val kotlinx_datetime_version = "0.6.1" -val kompendium_version = "3.14.4" +val kompendium_version = "4.0.1" val logback_version = "1.5.12" val logstash_version = "8.0" val prometeus_version = "1.6.3" val nav_common_version = "3.2024.10.25_13.44-9db48a0dbe67" val tjenestespec_version = "1.2021.02.22-10.45-4201aaea72fb" -val modia_common_utils_version = "1.2023.07.20-13.43-64707e48b53b" +val modia_common_utils_version = "1.2024.10.30-08.17-f565fe211cd4" val junit_version = "5.11.3" val graphql_kotlin_version = "8.2.1" @@ -22,7 +22,7 @@ plugins { application kotlin("jvm") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" - id("com.github.johnrengelman.shadow") version "8.1.1" + id("com.gradleup.shadow") version "8.3.4" id("com.expediagroup.graphql") version "8.2.1" } diff --git a/src/main/kotlin/no/nav/Consumers.kt b/src/main/kotlin/no/nav/Consumers.kt index 35e9a5d6..92b3e950 100644 --- a/src/main/kotlin/no/nav/Consumers.kt +++ b/src/main/kotlin/no/nav/Consumers.kt @@ -29,7 +29,9 @@ interface Consumers { val sfClient: SFClient } -class ConsumersImpl(env: Env) : Consumers { +class ConsumersImpl( + env: Env, +) : Consumers { override val oboTokenClient: OnBehalfOfTokenClient = AzureAdTokenClientBuilder .builder() diff --git a/src/main/kotlin/no/nav/Services.kt b/src/main/kotlin/no/nav/Services.kt index 60f008d4..65804f3e 100644 --- a/src/main/kotlin/no/nav/Services.kt +++ b/src/main/kotlin/no/nav/Services.kt @@ -20,7 +20,9 @@ interface Services { val utbetalingerService: UtbetalingerService } -class ServicesImpl(consumers: Consumers) : Services { +class ServicesImpl( + consumers: Consumers, +) : Services { override val oppfolgingService = OppfolgingService( consumers.oppfolgingClient, diff --git a/src/main/kotlin/no/nav/api/debug/DebugRoutes.kt b/src/main/kotlin/no/nav/api/debug/DebugRoutes.kt index ef98439d..92fb6857 100644 --- a/src/main/kotlin/no/nav/api/debug/DebugRoutes.kt +++ b/src/main/kotlin/no/nav/api/debug/DebugRoutes.kt @@ -2,6 +2,7 @@ package no.nav.api.debug import io.bkbn.kompendium.core.metadata.PostInfo import io.bkbn.kompendium.core.plugin.NotarizedRoute +import io.bkbn.kompendium.oas.payload.MediaType import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* @@ -62,10 +63,12 @@ private object Api { examples( Pair( "example", - TokenExchangeRequest( - cluster = "dev-fss", - namespace = "teamname", - application = "app-api", + MediaType.Example( + TokenExchangeRequest( + cluster = "dev-fss", + namespace = "teamname", + application = "app-api", + ), ), ), ) diff --git a/src/main/kotlin/no/nav/api/dialog/saf/SafClient.kt b/src/main/kotlin/no/nav/api/dialog/saf/SafClient.kt index 47a0b6b7..a98023c7 100644 --- a/src/main/kotlin/no/nav/api/dialog/saf/SafClient.kt +++ b/src/main/kotlin/no/nav/api/dialog/saf/SafClient.kt @@ -27,8 +27,8 @@ class SafClient( suspend fun hentBrukersSaker( fnr: String, token: String, - ): GraphQLClientResponse { - return externalServiceCall { + ): GraphQLClientResponse = + externalServiceCall { graphqlClient.execute( request = HentBrukerssaker( @@ -46,5 +46,4 @@ class SafClient( }, ) } - } } diff --git a/src/main/kotlin/no/nav/api/dialog/saf/SafService.kt b/src/main/kotlin/no/nav/api/dialog/saf/SafService.kt index d944515d..3172b624 100644 --- a/src/main/kotlin/no/nav/api/dialog/saf/SafService.kt +++ b/src/main/kotlin/no/nav/api/dialog/saf/SafService.kt @@ -8,12 +8,11 @@ class SafService( suspend fun hentBrukersSaker( fnr: String, token: String, - ): List { - return safClient + ): List = + safClient .hentBrukersSaker(fnr, token) .data ?.saker ?.filterNotNull() ?: emptyList() - } } diff --git a/src/main/kotlin/no/nav/api/dialog/sf/SFClient.kt b/src/main/kotlin/no/nav/api/dialog/sf/SFClient.kt index d97ad46d..71b01efe 100644 --- a/src/main/kotlin/no/nav/api/dialog/sf/SFClient.kt +++ b/src/main/kotlin/no/nav/api/dialog/sf/SFClient.kt @@ -28,7 +28,9 @@ class SFClient( } @Serializable - data class HenvendelseDTO(val kjedeId: String) + data class HenvendelseDTO( + val kjedeId: String, + ) suspend fun sendSporsmal( request: SfMeldingRequest, @@ -36,14 +38,15 @@ class SFClient( token: String, ): HenvendelseDTO = externalServiceCall { - client.post("$sfUrl/henvendelse/ny/melding") { - headers { - append("Nav-Ident", ident) - } - header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") - contentType(ContentType.Application.Json) - setBody(request) - }.body() + client + .post("$sfUrl/henvendelse/ny/melding") { + headers { + append("Nav-Ident", ident) + } + header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") + contentType(ContentType.Application.Json) + setBody(request) + }.body() } suspend fun sendInfomelding( @@ -52,14 +55,15 @@ class SFClient( token: String, ): HenvendelseDTO = externalServiceCall { - client.post("$sfUrl/henvendelse/ny/melding") { - headers { - append("Nav-Ident", ident) - } - header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") - contentType(ContentType.Application.Json) - setBody(request) - }.body() + client + .post("$sfUrl/henvendelse/ny/melding") { + headers { + append("Nav-Ident", ident) + } + header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") + contentType(ContentType.Application.Json) + setBody(request) + }.body() } suspend fun journalforMelding( diff --git a/src/main/kotlin/no/nav/api/dialog/sf/TemagruppeTemaMapping.kt b/src/main/kotlin/no/nav/api/dialog/sf/TemagruppeTemaMapping.kt index 7d2298e5..f0e913b7 100755 --- a/src/main/kotlin/no/nav/api/dialog/sf/TemagruppeTemaMapping.kt +++ b/src/main/kotlin/no/nav/api/dialog/sf/TemagruppeTemaMapping.kt @@ -54,7 +54,6 @@ object TemagruppeTemaMapping { "HJE" to Temagruppe.HJLPM.name, ) - fun hentTemagruppeForTema(tema: String): String { - return if (TEMA_TEMAGRUPPE_MAPPING[tema] == null) TEMA_UTEN_TEMAGRUPPE.name else TEMA_TEMAGRUPPE_MAPPING[tema]!! - } + fun hentTemagruppeForTema(tema: String): String = + if (TEMA_TEMAGRUPPE_MAPPING[tema] == null) TEMA_UTEN_TEMAGRUPPE.name else TEMA_TEMAGRUPPE_MAPPING[tema]!! } diff --git a/src/main/kotlin/no/nav/api/digdir/DigdirClient.kt b/src/main/kotlin/no/nav/api/digdir/DigdirClient.kt index 5cbb03ea..5c9ba55b 100644 --- a/src/main/kotlin/no/nav/api/digdir/DigdirClient.kt +++ b/src/main/kotlin/no/nav/api/digdir/DigdirClient.kt @@ -48,19 +48,21 @@ class DigdirClient( token: String, ): KrrData = externalServiceCall { - client.get("$digdirKrrProxyUrl/rest/v1/person") { - headers { - append("Nav-Personident", fnr) - append("Nav-Call-Id", getCallId()) - } - header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") - }.body() + client + .get("$digdirKrrProxyUrl/rest/v1/person") { + headers { + append("Nav-Personident", fnr) + append("Nav-Call-Id", getCallId()) + } + header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") + }.body() } suspend fun ping() = externalServiceCall { - client.get("$digdirKrrProxyUrl/rest/ping") { - header("Authorization", "Bearer ${tokenclient.createMachineToMachineToken()}") - }.status + client + .get("$digdirKrrProxyUrl/rest/ping") { + header("Authorization", "Bearer ${tokenclient.createMachineToMachineToken()}") + }.status } } diff --git a/src/main/kotlin/no/nav/api/digdir/DigdirService.kt b/src/main/kotlin/no/nav/api/digdir/DigdirService.kt index 16c61106..766814e6 100644 --- a/src/main/kotlin/no/nav/api/digdir/DigdirService.kt +++ b/src/main/kotlin/no/nav/api/digdir/DigdirService.kt @@ -7,7 +7,9 @@ import no.nav.personoversikt.common.utils.SelftestGenerator import kotlin.concurrent.fixedRateTimer import kotlin.time.Duration.Companion.minutes -class DigdirService(private val digdirClient: DigdirClient) { +class DigdirService( + private val digdirClient: DigdirClient, +) { private val reporter = SelftestGenerator.Reporter(name = "DigdirService", critical = false) init { diff --git a/src/main/kotlin/no/nav/api/kontonummer/KontonummerRegister.kt b/src/main/kotlin/no/nav/api/kontonummer/KontonummerRegister.kt index 72ffaa75..29871786 100644 --- a/src/main/kotlin/no/nav/api/kontonummer/KontonummerRegister.kt +++ b/src/main/kotlin/no/nav/api/kontonummer/KontonummerRegister.kt @@ -43,14 +43,15 @@ class KontonummerRegister( token: String, ): Kontonummer = externalServiceCall { - client.post("$kontonummerRegisterUrl/rest/v1/hent-aktiv-konto") { - headers { - append("Nav-Ident", ident) - append("Nav-Call-Id", getCallId()) - } - header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") - contentType(ContentType.Application.Json) - setBody(HentAktivKontoDTO(fnr)) - }.body() + client + .post("$kontonummerRegisterUrl/rest/v1/hent-aktiv-konto") { + headers { + append("Nav-Ident", ident) + append("Nav-Call-Id", getCallId()) + } + header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") + contentType(ContentType.Application.Json) + setBody(HentAktivKontoDTO(fnr)) + }.body() } } diff --git a/src/main/kotlin/no/nav/api/oppfolging/Nom.kt b/src/main/kotlin/no/nav/api/oppfolging/Nom.kt index f20c99c6..c5d46ca6 100644 --- a/src/main/kotlin/no/nav/api/oppfolging/Nom.kt +++ b/src/main/kotlin/no/nav/api/oppfolging/Nom.kt @@ -22,8 +22,7 @@ class Nom( name = "nom", callIdExtractor = { getCallId() }, ), - ) - .build() + ).build() val client: NomClient = if (isNotProd()) { diff --git a/src/main/kotlin/no/nav/api/oppfolging/OppfolgingClient.kt b/src/main/kotlin/no/nav/api/oppfolging/OppfolgingClient.kt index dd016f18..09944b5c 100644 --- a/src/main/kotlin/no/nav/api/oppfolging/OppfolgingClient.kt +++ b/src/main/kotlin/no/nav/api/oppfolging/OppfolgingClient.kt @@ -13,10 +13,14 @@ class OppfolgingClient( private val oboTokenProvider: BoundedOnBehalfOfTokenClient, ) { @Serializable - class Status(val erUnderOppfolging: Boolean?) + class Status( + val erUnderOppfolging: Boolean?, + ) @Serializable - class VeilederIdent(val veilederIdent: String?) + class VeilederIdent( + val veilederIdent: String?, + ) private val client = HttpClient(OkHttp) { @@ -44,9 +48,10 @@ class OppfolgingClient( token: String, ): Status = externalServiceCall { - client.get("$oppfolgingUrl/v2/oppfolging?fnr=$fnr") { - header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") - }.body() + client + .get("$oppfolgingUrl/v2/oppfolging?fnr=$fnr") { + header("Authorization", "Bearer ${oboTokenProvider.exchangeOnBehalfOfToken(token)}") + }.body() } suspend fun hentOppfolgingVeileder( diff --git a/src/main/kotlin/no/nav/api/oppfolging/OppfolgingService.kt b/src/main/kotlin/no/nav/api/oppfolging/OppfolgingService.kt index f3536918..0e378582 100644 --- a/src/main/kotlin/no/nav/api/oppfolging/OppfolgingService.kt +++ b/src/main/kotlin/no/nav/api/oppfolging/OppfolgingService.kt @@ -40,7 +40,8 @@ class OppfolgingService( ): Veileder? = externalServiceCall { val veileder = oppfolgingClient.hentOppfolgingVeileder(fnr, token) - veileder?.veilederIdent + veileder + ?.veilederIdent ?.let { nom.finnNavn(NavIdent(it)) } ?.let { Veileder( diff --git a/src/main/kotlin/no/nav/api/pdl/PdlClient.kt b/src/main/kotlin/no/nav/api/pdl/PdlClient.kt index 88753ba0..86277d02 100644 --- a/src/main/kotlin/no/nav/api/pdl/PdlClient.kt +++ b/src/main/kotlin/no/nav/api/pdl/PdlClient.kt @@ -36,20 +36,19 @@ class PdlClient( suspend fun hentPersonalia( fnr: String, token: String, - ): GraphQLClientResponse { - return externalServiceCall { + ): GraphQLClientResponse = + externalServiceCall { graphqlClient.execute( request = HentPersonalia(HentPersonalia.Variables(fnr)), requestCustomizer = requestConfig(token), ) } - } suspend fun hentAktorid( fnr: String, token: String, - ): GraphQLClientResponse { - return externalServiceCall { + ): GraphQLClientResponse = + externalServiceCall { graphqlClient.execute( request = HentAktorid( @@ -60,17 +59,15 @@ class PdlClient( requestCustomizer = requestConfig(token), ) } - } suspend fun hentNavn( fnr: String, token: String, - ): GraphQLClientResponse { - return externalServiceCall { + ): GraphQLClientResponse = + externalServiceCall { graphqlClient.execute( request = HentNavn(HentNavn.Variables(fnr)), requestCustomizer = requestConfig(token), ) } - } } diff --git a/src/main/kotlin/no/nav/api/pdl/PdlService.kt b/src/main/kotlin/no/nav/api/pdl/PdlService.kt index c47c79ee..48c4bb4b 100644 --- a/src/main/kotlin/no/nav/api/pdl/PdlService.kt +++ b/src/main/kotlin/no/nav/api/pdl/PdlService.kt @@ -36,20 +36,40 @@ class PdlService( suspend fun hentAktorid( fnr: String, token: String, - ): String { - return requireNotNull(client.hentAktorid(fnr, token).data?.hentIdenter?.identer?.firstOrNull()?.ident) - } + ): String = + requireNotNull( + client + .hentAktorid(fnr, token) + .data + ?.hentIdenter + ?.identer + ?.firstOrNull() + ?.ident, + ) suspend fun hentAktoridNullable( fnr: String, token: String, - ): String? = client.hentAktorid(fnr, token).data?.hentIdenter?.identer?.firstOrNull()?.ident + ): String? = + client + .hentAktorid(fnr, token) + .data + ?.hentIdenter + ?.identer + ?.firstOrNull() + ?.ident suspend fun hentNavn( fnr: String, token: String, ): Navn { - val navn = client.hentNavn(fnr, token).data?.hentPerson?.navn?.firstOrNull() ?: return Navn.UKJENT + val navn = + client + .hentNavn(fnr, token) + .data + ?.hentPerson + ?.navn + ?.firstOrNull() ?: return Navn.UKJENT return Navn( fornavn = navn.fornavn, mellomnavn = navn.mellomnavn, @@ -57,12 +77,17 @@ class PdlService( ) } - private fun hentAlder(person: Person?): Int? { - return person?.foedselsdato?.firstOrNull()?.foedselsdato?.periodUntil(LocalDate.now())?.years - } - - private fun hentBostedsAdresse(person: Person?): PdlAdresse? { - return person?.bostedsadresse + private fun hentAlder(person: Person?): Int? = + person + ?.foedselsdato + ?.firstOrNull() + ?.foedselsdato + ?.periodUntil(LocalDate.now()) + ?.years + + private fun hentBostedsAdresse(person: Person?): PdlAdresse? = + person + ?.bostedsadresse ?.sortedByDescending { it.gyldigFraOgMed } ?.firstNotNullOfOrNull { adresse -> when { @@ -82,10 +107,10 @@ class PdlService( } } } - } - private fun hentKontaktAdresse(person: Person?): PdlAdresse? { - return person?.kontaktadresse + private fun hentKontaktAdresse(person: Person?): PdlAdresse? = + person + ?.kontaktadresse ?.sortedByDescending { it.gyldigFraOgMed } ?.firstNotNullOfOrNull { adresse -> when { @@ -117,10 +142,10 @@ class PdlService( } } } - } - private fun hentOppholdsAdresse(person: Person?): PdlAdresse? { - return person?.oppholdsadresse + private fun hentOppholdsAdresse(person: Person?): PdlAdresse? = + person + ?.oppholdsadresse ?.sortedByDescending { it.gyldigFraOgMed } ?.firstNotNullOfOrNull { adresse -> when { @@ -146,7 +171,6 @@ class PdlService( } } } - } private fun lagAdresseFraVegadresse(adresse: Vegadresse) = // TODO hente postnummer kodeverk diff --git a/src/main/kotlin/no/nav/api/pdl/converters/LongScalarConverter.kt b/src/main/kotlin/no/nav/api/pdl/converters/LongScalarConverter.kt index 59e35a04..c5733ae9 100644 --- a/src/main/kotlin/no/nav/api/pdl/converters/LongScalarConverter.kt +++ b/src/main/kotlin/no/nav/api/pdl/converters/LongScalarConverter.kt @@ -3,7 +3,9 @@ package no.nav.api.pdl.converters import com.expediagroup.graphql.client.converter.ScalarConverter @JvmInline -value class PdlLong(val value: Long) +value class PdlLong( + val value: Long, +) class LongScalarConverter : ScalarConverter { override fun toJson(value: PdlLong): String = value.value.toString() diff --git a/src/main/kotlin/no/nav/api/skrivestotte/SkrivestotteService.kt b/src/main/kotlin/no/nav/api/skrivestotte/SkrivestotteService.kt index 0c39ed9f..a6fe79ab 100644 --- a/src/main/kotlin/no/nav/api/skrivestotte/SkrivestotteService.kt +++ b/src/main/kotlin/no/nav/api/skrivestotte/SkrivestotteService.kt @@ -9,7 +9,9 @@ import kotlin.concurrent.fixedRateTimer import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.seconds -class SkrivestotteService(private val skrivestotteClient: SkrivestotteClient) { +class SkrivestotteService( + private val skrivestotteClient: SkrivestotteClient, +) { private var teksterCache: Map = emptyMap() private var sokbareTeksterCache: Map = emptyMap() private val reporter = SelftestGenerator.Reporter(name = "SkrivestotteService", critical = false) @@ -47,13 +49,9 @@ class SkrivestotteService(private val skrivestotteClient: SkrivestotteClient) { } } - fun hentTekstFraId(tekstId: UUID): Tekst? { - return teksterCache[tekstId] - } + fun hentTekstFraId(tekstId: UUID): Tekst? = teksterCache[tekstId] - private suspend fun hentTekster(): Tekster { - return skrivestotteClient.hentTekster() - } + private suspend fun hentTekster(): Tekster = skrivestotteClient.hentTekster() private suspend fun prepopulerCache() { retry.run { @@ -62,15 +60,13 @@ class SkrivestotteService(private val skrivestotteClient: SkrivestotteClient) { } } - private fun byggSokbareTekster(tekster: Collection): Map { - return tekster.associateWith { + private fun byggSokbareTekster(tekster: Collection): Map = + tekster.associateWith { listOf( it.overskrift, it.tags.joinToString("\u0000"), it.innhold.kombinert(), - ) - .joinToString("\u0000") + ).joinToString("\u0000") .lowercase() } - } } diff --git a/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerClient.kt b/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerClient.kt index 48ea88dd..5085159d 100644 --- a/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerClient.kt +++ b/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerClient.kt @@ -92,8 +92,7 @@ class UtbetalingerClient( "Feil ved deseralisering av json", mapOf("exception" to it), ) - } - .getOrThrow() + }.getOrThrow() else -> throw WebStatusException( message = @@ -123,8 +122,8 @@ class UtbetalingerClient( ) companion object { - fun lagHttpEngine(): HttpClientEngine { - return OkHttp.create { + fun lagHttpEngine(): HttpClientEngine = + OkHttp.create { addInterceptor(XCorrelationIdInterceptor()) addInterceptor( LoggingInterceptor( @@ -140,6 +139,5 @@ class UtbetalingerClient( }, ) } - } } } diff --git a/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerService.kt b/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerService.kt index f4fc9845..179bf7c5 100644 --- a/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerService.kt +++ b/src/main/kotlin/no/nav/api/utbetalinger/UtbetalingerService.kt @@ -8,7 +8,8 @@ class UtbetalingerService( private val utbetalingerClient: UtbetalingerClient, ) { private val reporter = - SelftestGenerator.Reporter(name = "UtbetalingService", critical = false) + SelftestGenerator + .Reporter(name = "UtbetalingService", critical = false) .also { it.reportOk() } @Serializable @@ -25,10 +26,10 @@ class UtbetalingerService( token: String, ): List { val utbetalinger = - utbetalingerClient.runCatching { - hentUtbetalinger(fnr, fra, til, token) - } - .onSuccess { reporter.reportOk() } + utbetalingerClient + .runCatching { + hentUtbetalinger(fnr, fra, til, token) + }.onSuccess { reporter.reportOk() } .onFailure { reporter.reportError(it) } .getOrThrow() @@ -48,8 +49,7 @@ class UtbetalingerService( til = LocalDate.parse(ytelse.ytelsesperiode.tom), ) } - } - .distinct() + }.distinct() .sortedWith(compareByDescending { it.til }.thenBy { it.ytelse }) } } diff --git a/src/main/kotlin/no/nav/models/FnrRequest.kt b/src/main/kotlin/no/nav/models/FnrRequest.kt index 8b45e3dc..ae14127c 100644 --- a/src/main/kotlin/no/nav/models/FnrRequest.kt +++ b/src/main/kotlin/no/nav/models/FnrRequest.kt @@ -9,10 +9,9 @@ data class FnrRequest( val fnr: String, ) -suspend fun ApplicationCall.deserializeFnr(): String? { - return try { +suspend fun ApplicationCall.deserializeFnr(): String? = + try { this.receive().fnr } catch (e: ContentTransformationException) { null } -} diff --git a/src/main/kotlin/no/nav/plugins/ExceptionHandling.kt b/src/main/kotlin/no/nav/plugins/ExceptionHandling.kt index 3f572110..476ba466 100644 --- a/src/main/kotlin/no/nav/plugins/ExceptionHandling.kt +++ b/src/main/kotlin/no/nav/plugins/ExceptionHandling.kt @@ -7,7 +7,10 @@ import io.ktor.server.plugins.statuspages.* import io.ktor.server.response.* import kotlinx.serialization.Serializable -class WebStatusException(message: String, val status: HttpStatusCode) : Exception(message) +class WebStatusException( + message: String, + val status: HttpStatusCode, +) : Exception(message) fun Application.configureExceptionHandling() { install(StatusPages) { @@ -39,13 +42,12 @@ fun Application.configureExceptionHandling() { } } -private fun AuthenticationFailedCause.prettyPrint(): String { - return when (this) { +private fun AuthenticationFailedCause.prettyPrint(): String = + when (this) { AuthenticationFailedCause.NoCredentials -> "No credentials" AuthenticationFailedCause.InvalidCredentials -> "Invalid credentials" is AuthenticationFailedCause.Error -> "Error with credentials: ${this.message}" } -} @Serializable internal data class HttpErrorResponse( diff --git a/src/main/kotlin/no/nav/plugins/Monitoring.kt b/src/main/kotlin/no/nav/plugins/Monitoring.kt index 3b9d84db..b54b6f87 100644 --- a/src/main/kotlin/no/nav/plugins/Monitoring.kt +++ b/src/main/kotlin/no/nav/plugins/Monitoring.kt @@ -4,7 +4,7 @@ import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.plugins.* import io.ktor.server.plugins.callid.* -import io.ktor.server.plugins.callloging.* +import io.ktor.server.plugins.calllogging.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -18,7 +18,10 @@ fun Application.configureMonitoring() { install(CallLogging) { level = Level.INFO filter { call -> - call.request.path().contains("/internal/").not() + call.request + .path() + .contains("/internal/") + .not() } callIdMdc("call-id") format { call -> diff --git a/src/main/kotlin/no/nav/plugins/OpenApi.kt b/src/main/kotlin/no/nav/plugins/OpenApi.kt index 95c768fc..283a7480 100644 --- a/src/main/kotlin/no/nav/plugins/OpenApi.kt +++ b/src/main/kotlin/no/nav/plugins/OpenApi.kt @@ -32,7 +32,7 @@ private val specSerializer = fun Application.configureOpenApi() { install(NotarizedApplication()) { - spec = + spec = { OpenApiSpec( info = Info( @@ -47,9 +47,10 @@ fun Application.configureOpenApi() { ), ), ) + } - openApiJson = { - route("/openapi.json") { + specRoute = { spec, routing -> + routing.route("/openapi.json") { get { call.respondText( contentType = ContentType.Application.Json, diff --git a/src/main/kotlin/no/nav/plugins/Security.kt b/src/main/kotlin/no/nav/plugins/Security.kt index debed384..c9f74ac5 100644 --- a/src/main/kotlin/no/nav/plugins/Security.kt +++ b/src/main/kotlin/no/nav/plugins/Security.kt @@ -20,7 +20,11 @@ const val SECURITY_SCHEME_NAME = "auth-jwt" const val NAV_IDENT_CLAIM = "NAVident" private val mockJwt = JWT.decode( - JWT.create().withSubject(UUID.randomUUID().toString()).withClaim(NAV_IDENT_CLAIM, "Z999999").sign(Algorithm.none()), + JWT + .create() + .withSubject(UUID.randomUUID().toString()) + .withClaim(NAV_IDENT_CLAIM, "Z999999") + .sign(Algorithm.none()), ) fun Application.configureSecurity( diff --git a/src/main/kotlin/no/nav/utils/DateUtils.kt b/src/main/kotlin/no/nav/utils/DateUtils.kt index 08a1e5f6..36a12a1a 100644 --- a/src/main/kotlin/no/nav/utils/DateUtils.kt +++ b/src/main/kotlin/no/nav/utils/DateUtils.kt @@ -30,10 +30,6 @@ fun LocalDateTime.plus(duration: Duration): LocalDateTime { return instant.plus(duration).toLocalDateTime(timeZone) } -fun LocalDate.toJodaLocalDate(): JodaLocalDate { - return JodaLocalDate(this.year, this.monthNumber, this.dayOfMonth) -} +fun LocalDate.toJodaLocalDate(): JodaLocalDate = JodaLocalDate(this.year, this.monthNumber, this.dayOfMonth) -fun DateTime.toKotlinLocalDate(): LocalDate { - return LocalDate(this.year, this.monthOfYear, this.dayOfMonth) -} +fun DateTime.toKotlinLocalDate(): LocalDate = LocalDate(this.year, this.monthOfYear, this.dayOfMonth) diff --git a/src/main/kotlin/no/nav/utils/LoggingGraphQLKtorClient.kt b/src/main/kotlin/no/nav/utils/LoggingGraphQLKtorClient.kt index 9f5b61dc..1c43b73f 100644 --- a/src/main/kotlin/no/nav/utils/LoggingGraphQLKtorClient.kt +++ b/src/main/kotlin/no/nav/utils/LoggingGraphQLKtorClient.kt @@ -18,7 +18,8 @@ class LoggingGraphQLKtorClient( httpClient: HttpClient, ) : GraphQLKtorClient(url, httpClient) { val selftestReporter = - SelftestGenerator.Reporter(name, critical) + SelftestGenerator + .Reporter(name, critical) // Report OK to get application ready (/isReady) .also { it.reportOk() } diff --git a/src/main/kotlin/no/nav/utils/OkHttpUtils.kt b/src/main/kotlin/no/nav/utils/OkHttpUtils.kt index 723284ac..7f6bd936 100644 --- a/src/main/kotlin/no/nav/utils/OkHttpUtils.kt +++ b/src/main/kotlin/no/nav/utils/OkHttpUtils.kt @@ -73,8 +73,7 @@ class LoggingInterceptor( "time" to timer.measure(), ), ) - } - .getOrThrow() + }.getOrThrow() val responseBody = response.peekContent(config) @@ -103,10 +102,13 @@ class LoggingInterceptor( private fun Long.measure(): Long = System.currentTimeMillis() - this -open class HeadersInterceptor(val headersProvider: () -> Map) : Interceptor { +open class HeadersInterceptor( + val headersProvider: () -> Map, +) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val builder = - chain.request() + chain + .request() .newBuilder() headersProvider() .forEach { (name, value) -> builder.addHeader(name, value) } @@ -115,17 +117,23 @@ open class HeadersInterceptor(val headersProvider: () -> Map) : } } -class XCorrelationIdInterceptor : HeadersInterceptor({ - mapOf("X-Correlation-ID" to getCallId()) -}) - -class AuthorizationInterceptor(val tokenProvider: () -> String) : HeadersInterceptor({ - mapOf("Authorization" to "Bearer ${tokenProvider()}") -}) - -class BasicAuthorizationInterceptor(private val username: String, private val password: String) : HeadersInterceptor({ - mapOf("Authorization" to Credentials.basic(username, password)) -}) +class XCorrelationIdInterceptor : + HeadersInterceptor({ + mapOf("X-Correlation-ID" to getCallId()) + }) + +class AuthorizationInterceptor( + val tokenProvider: () -> String, +) : HeadersInterceptor({ + mapOf("Authorization" to "Bearer ${tokenProvider()}") + }) + +class BasicAuthorizationInterceptor( + private val username: String, + private val password: String, +) : HeadersInterceptor({ + mapOf("Authorization" to Credentials.basic(username, password)) + }) fun getCallId(): String = MDC.get("CallId") ?: UUID.randomUUID().toString() diff --git a/src/main/kotlin/no/nav/utils/SerializationUtils.kt b/src/main/kotlin/no/nav/utils/SerializationUtils.kt index 4b6f9b25..d4d35c93 100644 --- a/src/main/kotlin/no/nav/utils/SerializationUtils.kt +++ b/src/main/kotlin/no/nav/utils/SerializationUtils.kt @@ -13,9 +13,7 @@ import kotlin.reflect.KClass object UUIDSerializer : KSerializer { override val descriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): UUID { - return UUID.fromString(decoder.decodeString()) - } + override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString()) override fun serialize( encoder: Encoder, @@ -25,7 +23,10 @@ object UUIDSerializer : KSerializer { } } -abstract class EnumSerializer>(clazz: KClass, private val defaultValue: T) : KSerializer { +abstract class EnumSerializer>( + clazz: KClass, + private val defaultValue: T, +) : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( serialName = requireNotNull(clazz.qualifiedName), @@ -34,9 +35,7 @@ abstract class EnumSerializer>(clazz: KClass, private val default private val deserializeLUT = clazz.java.enumConstants.associateBy { it.serialName } private val serializeLUT = deserializeLUT.swapKeyValue() - override fun deserialize(decoder: Decoder): T { - return deserializeLUT[decoder.decodeString()] ?: defaultValue - } + override fun deserialize(decoder: Decoder): T = deserializeLUT[decoder.decodeString()] ?: defaultValue override fun serialize( encoder: Encoder, @@ -46,5 +45,9 @@ abstract class EnumSerializer>(clazz: KClass, private val default } private val Enum.serialName: String - get() = this::class.java.getField(name).getAnnotation(SerialName::class.java)?.value ?: name + get() = + this::class.java + .getField(name) + .getAnnotation(SerialName::class.java) + ?.value ?: name } diff --git a/src/main/kotlin/no/nav/utils/StringUtils.kt b/src/main/kotlin/no/nav/utils/StringUtils.kt index f19513b6..1c0843d3 100644 --- a/src/main/kotlin/no/nav/utils/StringUtils.kt +++ b/src/main/kotlin/no/nav/utils/StringUtils.kt @@ -2,8 +2,7 @@ package no.nav.utils private val mask = Regex("\\d{6,}") -fun String.masked(): String { - return this.replace(mask) { +fun String.masked(): String = + this.replace(mask) { it.value.substring(0, 6) + "*".repeat(it.value.length - 6) } -} diff --git a/src/main/kotlin/no/nav/utils/TokenUtils.kt b/src/main/kotlin/no/nav/utils/TokenUtils.kt index 1e60d5b8..97485b58 100644 --- a/src/main/kotlin/no/nav/utils/TokenUtils.kt +++ b/src/main/kotlin/no/nav/utils/TokenUtils.kt @@ -28,9 +28,7 @@ fun DownstreamApi.Companion.parse(value: String): DownstreamApi { return DownstreamApi(cluster = cluster, namespace = namespace, application = application) } -fun MachineToMachineTokenClient.createMachineToMachineToken(api: DownstreamApi): String { - return this.createMachineToMachineToken(api.tokenscope()) -} +fun MachineToMachineTokenClient.createMachineToMachineToken(api: DownstreamApi): String = this.createMachineToMachineToken(api.tokenscope()) interface BoundedMachineToMachineTokenClient { fun createMachineToMachineToken(): String diff --git a/src/test/kotlin/no/nav/api/pdl/PdlTest.kt b/src/test/kotlin/no/nav/api/pdl/PdlTest.kt index 30bb6ab1..6033175f 100644 --- a/src/test/kotlin/no/nav/api/pdl/PdlTest.kt +++ b/src/test/kotlin/no/nav/api/pdl/PdlTest.kt @@ -51,8 +51,21 @@ internal class PdlTest { val pdlClient = PdlClient("http://no.no", tokenClient, mockEngine) val person = pdlClient.hentPersonalia("10108000398", "token") - assertEquals(1, person.data?.hentPerson?.foedselsdato?.size) - assertEquals(LocalDate(2020, 6, 6), person.data?.hentPerson?.foedselsdato?.get(0)?.foedselsdato) + assertEquals( + 1, + person.data + ?.hentPerson + ?.foedselsdato + ?.size, + ) + assertEquals( + LocalDate(2020, 6, 6), + person.data + ?.hentPerson + ?.foedselsdato + ?.get(0) + ?.foedselsdato, + ) } @Test @@ -90,7 +103,20 @@ internal class PdlTest { val pdlClient = PdlClient("http://no.no", tokenClient, mockEngine) val identer = pdlClient.hentAktorid("10108000398", "token") - assertEquals(1, identer.data?.hentIdenter?.identer?.size) - assertEquals("123456789", identer.data?.hentIdenter?.identer?.get(0)?.ident) + assertEquals( + 1, + identer.data + ?.hentIdenter + ?.identer + ?.size, + ) + assertEquals( + "123456789", + identer.data + ?.hentIdenter + ?.identer + ?.get(0) + ?.ident, + ) } } diff --git a/src/test/kotlin/no/nav/mock/MockConsumers.kt b/src/test/kotlin/no/nav/mock/MockConsumers.kt index 628e7587..bbdbc62b 100644 --- a/src/test/kotlin/no/nav/mock/MockConsumers.kt +++ b/src/test/kotlin/no/nav/mock/MockConsumers.kt @@ -243,6 +243,4 @@ private val sfClientMock = coEvery { client.lukkTraad(any(), any()) } returns Unit } -inline fun mockOf(impl: (T) -> Unit): T { - return mockk().apply(impl) -} +inline fun mockOf(impl: (T) -> Unit): T = mockk().apply(impl)