Skip to content

Commit c00c71e

Browse files
committed
Refactor
1 parent fcd1375 commit c00c71e

File tree

19 files changed

+103
-177
lines changed

19 files changed

+103
-177
lines changed

src/main/kotlin/no/nav/dekoratoren/api/config/bootstrap.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ fun Application.mainModule() {
5050
route("/person/nav-dekoratoren-api") {
5151
healthApi(applicationContext.selfTests, applicationContext.appMicrometerRegistry)
5252
authApi(applicationContext.authTokenService)
53-
varselApi(applicationContext.authTokenService, applicationContext.varselbjelleConsumer)
53+
varselApi(applicationContext.oidcValidationService, applicationContext.varselbjelleConsumer)
5454
}
5555

5656
// Nødvendig for å støtte gamle innloggingsstatus-ingresser

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/auth/AuthInfo.kt

-13
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,18 @@
11
package no.nav.dekoratoren.api.innloggingsstatus.auth
22

3-
import com.fasterxml.jackson.annotation.JsonAutoDetect
4-
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY
53
import com.fasterxml.jackson.annotation.JsonInclude
64
import java.time.LocalDateTime
5+
import no.nav.dekoratoren.api.innloggingsstatus.oidc.OidcTokenInfo
76

87
@JsonInclude(JsonInclude.Include.NON_NULL)
9-
@JsonAutoDetect(fieldVisibility = ANY)
10-
class AuthSummary private constructor(authInfo: AuthInfo) {
11-
private val authenticated: Boolean = authInfo.authenticated
12-
private val authLevel: Int? = authInfo.authLevel
13-
private val oidc: OidcSummary? =
14-
OidcSummary.fromAuthInfo(authInfo)
15-
8+
data class AuthSummary(val authenticated: Boolean, val authLevel: Int?, val oidc: OidcSummary?) {
169
companion object {
17-
fun fromAuthInfo(authInfo: AuthInfo): AuthSummary =
18-
AuthSummary(authInfo)
10+
fun fromOidcToken(oidcTokenInfo: OidcTokenInfo?): AuthSummary =
11+
AuthSummary(
12+
authenticated = oidcTokenInfo != null,
13+
authLevel = oidcTokenInfo?.authLevel,
14+
oidc = oidcTokenInfo?.let { OidcSummary(it.authLevel, it.issueTime, it.expiryTime) })
1915
}
20-
}
2116

22-
private data class OidcSummary(
23-
val authLevel: Int,
24-
val issueTime: LocalDateTime,
25-
val expiryTime: LocalDateTime
26-
) {
27-
companion object {
28-
fun fromAuthInfo(authInfo: AuthInfo): OidcSummary? {
29-
return authInfo.oidcToken?.let { oidc ->
30-
OidcSummary(
31-
oidc.authLevel,
32-
oidc.issueTime,
33-
oidc.expiryTime
34-
)
35-
}
36-
}
37-
}
17+
data class OidcSummary(val authLevel: Int, val issueTime: LocalDateTime, val expiryTime: LocalDateTime)
3818
}
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,30 @@
11
package no.nav.dekoratoren.api.innloggingsstatus.auth
22

33
import io.ktor.server.application.ApplicationCall
4+
import no.nav.dekoratoren.api.innloggingsstatus.oidc.OidcTokenInfo
45
import no.nav.dekoratoren.api.innloggingsstatus.oidc.OidcTokenService
56
import no.nav.dekoratoren.api.innloggingsstatus.user.SubjectNameService
6-
import org.slf4j.Logger
7-
import org.slf4j.LoggerFactory
87

98
class AuthTokenService(
109
private val oidcTokenService: OidcTokenService,
1110
private val subjectNameService: SubjectNameService,
1211
) {
13-
private val log: Logger = LoggerFactory.getLogger(AuthTokenService::class.java)
14-
1512
suspend fun getAuthenticatedUserInfo(call: ApplicationCall): UserInfo {
16-
return try {
17-
fetchAndParseAuthenticatedUserInfo(call)
18-
} catch (e: Exception) {
19-
log.warn("Feil ved henting av brukers innloggingsinfo", e)
20-
UserInfo.unAuthenticated()
21-
}
13+
val oidcToken = oidcTokenService.getOidcToken(call)
14+
return getUserInfo(oidcToken)
2215
}
2316

2417
fun getAuthSummary(call: ApplicationCall): AuthSummary {
25-
return fetchAndParseAuthInfo(call).let { authInfo ->
26-
AuthSummary.fromAuthInfo(authInfo)
27-
}
28-
}
29-
30-
private suspend fun fetchAndParseAuthenticatedUserInfo(call: ApplicationCall): UserInfo {
31-
val authInfo = fetchAndParseAuthInfo(call)
32-
return getUserInfo(authInfo)
33-
}
34-
35-
fun fetchAndParseAuthInfo(call: ApplicationCall): AuthInfo {
3618
val oidcToken = oidcTokenService.getOidcToken(call)
37-
return AuthInfo(oidcToken)
19+
return AuthSummary.fromOidcToken(oidcToken)
3820
}
3921

40-
private suspend fun getUserInfo(authInfo: AuthInfo): UserInfo {
41-
return if (authInfo.subject != null) {
42-
val subjectName = subjectNameService.getSubjectName(authInfo.subject!!)
43-
UserInfo.Companion.authenticated(subjectName, authInfo.authLevel!!)
22+
private suspend fun getUserInfo(oidcTokenInfo: OidcTokenInfo?): UserInfo {
23+
return if (oidcTokenInfo != null) {
24+
val subjectName = subjectNameService.getSubjectName(oidcTokenInfo.subject)
25+
UserInfo.authenticated(subjectName, oidcTokenInfo.authLevel)
4426
} else {
45-
UserInfo.unAuthenticated()
27+
UserInfo.unauthenticated()
4628
}
4729
}
4830
}

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/auth/TokenInfo.kt

-10
This file was deleted.

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/auth/UserInfo.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package no.nav.dekoratoren.api.innloggingsstatus.auth
33
import com.fasterxml.jackson.annotation.JsonInclude
44

55
@JsonInclude(JsonInclude.Include.NON_NULL)
6-
data class UserInfo constructor(
6+
data class UserInfo(
77
val authenticated: Boolean,
88
val name: String?,
99
val securityLevel: String?
1010
) {
1111
companion object {
1212
fun authenticated(name: String, authLevel: Int): UserInfo = UserInfo(true, name, authLevel.toString())
13-
fun unAuthenticated(): UserInfo = UserInfo(false, null, null)
13+
fun unauthenticated(): UserInfo = UserInfo(false, null, null)
1414
}
1515
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package no.nav.dekoratoren.api.innloggingsstatus.oidc
22

3-
import no.nav.dekoratoren.api.innloggingsstatus.auth.TokenInfo
43
import java.time.LocalDateTime
54

65
data class OidcTokenInfo(
7-
override val subject: String,
8-
override val authLevel: Int,
9-
override val issueTime: LocalDateTime,
10-
override val expiryTime: LocalDateTime
11-
): TokenInfo
6+
val subject: String,
7+
val authLevel: Int,
8+
val issueTime: LocalDateTime,
9+
val expiryTime: LocalDateTime
10+
)

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/oidc/OidcTokenInfoFactory.kt

+7-16
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@ import no.nav.dekoratoren.api.common.toUtcDateTime
66
import no.nav.security.token.support.core.jwt.JwtToken
77

88
object OidcTokenInfoFactory {
9-
109
fun mapOidcTokenInfo(token: JwtToken, identityClaim: String): OidcTokenInfo {
11-
12-
val ident = getIdent(token, identityClaim)
13-
val authLevel = extractAuthLevel(token)
14-
val issueTime = getTokenIssueLocalDateTime(token)
15-
val expiryTime = getTokenExpiryLocalDateTime(token)
16-
17-
return OidcTokenInfo(ident, authLevel, issueTime, expiryTime)
10+
return OidcTokenInfo(
11+
subject = getIdent(token, identityClaim),
12+
authLevel = extractAuthLevel(token),
13+
issueTime = getTokenIssueLocalDateTime(token),
14+
expiryTime = getTokenExpiryLocalDateTime(token),
15+
)
1816
}
1917

2018
private fun extractAuthLevel(token: JwtToken): Int {
21-
2219
return when (token.jwtTokenClaims.getStringClaim("acr")) {
2320
"Level3", "idporten-loa-substantial" -> 3
2421
"Level4", "idporten-loa-high" -> 4
@@ -39,12 +36,6 @@ object OidcTokenInfoFactory {
3936
}
4037

4138
private fun getIdent(token: JwtToken, identityClaim: String): String {
42-
val claims = token.jwtTokenClaims
43-
44-
return when {
45-
claims.allClaims.containsKey(identityClaim) -> claims.getStringClaim(identityClaim)
46-
else -> throw RuntimeException("Fant ikke et token-claim med ident i $identityClaim")
47-
}
39+
return token.jwtTokenClaims.getStringClaim(identityClaim)
4840
}
49-
5041
}

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/oidc/OidcTokenService.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ package no.nav.dekoratoren.api.innloggingsstatus.oidc
33
import io.ktor.server.application.ApplicationCall
44
import no.nav.dekoratoren.api.config.Environment
55

6-
class OidcTokenService(private val oidcTokenValidator: OidcTokenValidator,
7-
private val environment: Environment) {
8-
6+
class OidcTokenService(
7+
private val oidcTokenValidator: OidcTokenValidator,
8+
private val environment: Environment
9+
) {
910
fun getOidcToken(call: ApplicationCall): OidcTokenInfo? {
10-
return oidcTokenValidator.getValidToken(call, environment.oidcIssuer)?.let { jwtToken ->
11-
OidcTokenInfoFactory.mapOidcTokenInfo(jwtToken, environment.identityClaim)
12-
}
11+
return oidcTokenValidator.getValidToken(call, environment.oidcIssuer)
12+
?.let { OidcTokenInfoFactory.mapOidcTokenInfo(it, environment.identityClaim) }
1313
}
1414
}

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/oidc/OidcTokenValidator.kt

+1-6
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,14 @@ import no.nav.security.token.support.core.jwt.JwtToken
99
import no.nav.security.token.support.core.validation.JwtTokenValidationHandler
1010
import no.nav.security.token.support.v2.asIssuerProps
1111

12-
class OidcTokenValidator constructor(applicationConfig: ApplicationConfig) {
13-
12+
class OidcTokenValidator(applicationConfig: ApplicationConfig) {
1413
private val resourceRetriever: ProxyAwareResourceRetriever = ProxyAwareResourceRetriever()
15-
1614
private val jwtTokenValidationHandler: JwtTokenValidationHandler
17-
1815
private val multiIssuerConfiguration: MultiIssuerConfiguration
1916

2017
init {
2118
val issuerPropertiesMap: Map<String, IssuerProperties> = applicationConfig.asIssuerProps()
22-
2319
multiIssuerConfiguration = MultiIssuerConfiguration(issuerPropertiesMap, resourceRetriever)
24-
2520
jwtTokenValidationHandler = JwtTokenValidationHandler(multiIssuerConfiguration)
2621
}
2722

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/pdl/PdlService.kt

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class PdlService(
1111
private val azureService: AzureService,
1212
private val environment: Environment
1313
) {
14-
1514
private val log: Logger = LoggerFactory.getLogger(PdlService::class.java)
1615

1716
suspend fun getSubjectName(ident: String): PdlNavn? {

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/pdl/query/PdlPersonInfo.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package no.nav.dekoratoren.api.innloggingsstatus.pdl.query
22

3-
data class PdlPersonInfo (val navn: List<PdlNavn>)
3+
data class PdlPersonInfo(val navn: List<PdlNavn>)
44

55
data class PdlNavn(
66
val fornavn: String?,
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package no.nav.dekoratoren.api.innloggingsstatus.pdl.query
22

3-
data class QueryVariables (
4-
val ident: String
3+
data class QueryVariables(
4+
val ident: String
55
)

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/innloggingsstatusApi.kt src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/route.kt

+14-3
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,32 @@ import io.ktor.server.response.respond
66
import io.ktor.server.routing.Route
77
import io.ktor.server.routing.get
88
import no.nav.dekoratoren.api.innloggingsstatus.auth.AuthTokenService
9+
import no.nav.dekoratoren.api.innloggingsstatus.auth.UserInfo
10+
import org.slf4j.LoggerFactory
11+
12+
private val logger = LoggerFactory.getLogger("innloggingsstatusRoute")
913

1014
fun Route.authApi(authService: AuthTokenService) {
1115

1216
get("/auth") {
13-
authService.getAuthenticatedUserInfo(call).let { userInfo ->
14-
call.respond(HttpStatusCode.OK, userInfo)
17+
try {
18+
authService.getAuthenticatedUserInfo(call).let { userInfo ->
19+
call.respond(HttpStatusCode.OK, userInfo)
20+
}
21+
} catch (e: Exception) {
22+
logger.warn("Feil ved henting av brukers innloggingsinfo", e)
23+
UserInfo.unauthenticated()
1524
}
25+
1626
}
1727

1828
get("/summary") {
1929
try {
2030
authService.getAuthSummary(call).let { authInfo ->
2131
call.respond(HttpStatusCode.OK, authInfo)
2232
}
23-
} catch (exception: Exception) {
33+
} catch (e: Exception) {
34+
logger.warn("Feil ved henting av summary", e)
2435
call.respond(HttpStatusCode.InternalServerError)
2536
}
2637
}

src/main/kotlin/no/nav/dekoratoren/api/innloggingsstatus/user/SubjectNameService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ class SubjectNameService(private val pdlService: PdlService, private val cache:
1818

1919
private suspend fun fetchNameFromPdlAndConcatenate(subject: String): String? {
2020
return pdlService.getSubjectName(subject)
21-
?.let { pdlNavn -> listOf(pdlNavn.fornavn, pdlNavn.mellomnavn, pdlNavn.etternavn) }
22-
?.filter { navn -> !navn.isNullOrBlank() }
21+
?.let { listOf(it.fornavn, it.mellomnavn, it.etternavn) }
22+
?.filter { !it.isNullOrBlank() }
2323
?.joinToString(" ")
2424
}
2525

0 commit comments

Comments
 (0)