Skip to content

Commit b349d42

Browse files
author
Kristian Storvoll
authored
leser fil fra vault istedenfor hardkodet liste (#17)
Leser identer som skal ha tilgang fra json-fil
1 parent 3d59405 commit b349d42

File tree

5 files changed

+65
-47
lines changed

5 files changed

+65
-47
lines changed

src/main/kotlin/no/nav/syfo/SyfooversiktApplication.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ import kotlinx.coroutines.slf4j.MDCContext
3232
import net.logstash.logback.argument.StructuredArguments
3333
import no.nav.syfo.api.getWellKnown
3434
import no.nav.syfo.api.registerNaisApi
35-
import no.nav.syfo.auth.getTokenFromCookie
36-
import no.nav.syfo.auth.isInvalidToken
35+
import no.nav.syfo.auth.*
3736
import no.nav.syfo.db.*
3837
import no.nav.syfo.kafka.setupKafka
3938
import no.nav.syfo.personstatus.*
@@ -233,11 +232,10 @@ fun Application.serverModule() {
233232
return@intercept
234233
}
235234
val cookies = call.request.cookies
236-
237235
if (isInvalidToken(cookies)) {
238236
call.respond(HttpStatusCode.Unauthorized, "Ugyldig token")
239237
finish()
240-
} else if (!tilgangsSjekk.harTilgang(getTokenFromCookie(cookies))) {
238+
} else if (!tilgangsSjekk.harTilgang(getVeilederTokenPayload(getTokenFromCookie(cookies)).navIdent)) {
241239
call.respond(HttpStatusCode.Forbidden, "Denne identen har ikke tilgang til applikasjonen")
242240
finish()
243241
} else {
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,38 @@
11
package no.nav.syfo.tilgangskontroll
22

3-
import no.nav.syfo.auth.getVeilederTokenPayload
4-
import no.nav.syfo.isPreProd
3+
import com.fasterxml.jackson.databind.*
4+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
5+
import com.fasterxml.jackson.module.kotlin.readValue
6+
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
7+
import no.nav.syfo.LOG
58
import no.nav.syfo.util.allToUpperCase
9+
import java.nio.file.Paths
610

7-
val veilederIdenterMedTilgang = arrayListOf(
8-
"Z991598",
9-
"T152136",
10-
"S139136",
11-
"H103404",
12-
"L126710",
13-
"W126199",
14-
"F125384",
15-
"H146483",
16-
"K105407",
17-
"M152421",
18-
"H152380",
19-
"H148938",
20-
"H131999",
21-
"V134908",
22-
"H139248",
23-
"H149140",
24-
"B144544",
25-
"S113562",
26-
"V111088",
27-
"F140344",
28-
"M106428",
29-
"N149853", // - Lisa
30-
"R144807" // - Tor Halle
31-
).allToUpperCase()
32-
33-
val utviklereMedTilgangIPreProd = arrayListOf(
34-
"Z990197", // - John Martin
35-
"Z992300", // - Erik
36-
"Z992668", // - Kristian
37-
"Z990243", // - June
38-
"G153334", // - Solveig-1
39-
"Z990573", // - Solveig-2
40-
"Z992668" // - Kristian
41-
).allToUpperCase()
42-
43-
class MidlertidigTilgangsSjekk(private var tilgangListe: List<String> = veilederIdenterMedTilgang) {
11+
private val objectMapper: ObjectMapper = ObjectMapper().apply {
12+
registerKotlinModule()
13+
registerModule(JavaTimeModule())
14+
}
15+
16+
data class Tilganger (
17+
val identer: List<String>
18+
)
19+
20+
private fun lesTilgangsfil(path: String): Tilganger {
21+
LOG.info("Leser tilgangsfil fra $path")
22+
val s = Paths.get(path).toFile().readText()
23+
return objectMapper.readValue<Tilganger>(s).also { LOG.info("Leste tilgang fra fil med ${it.identer.size} identer") }
24+
}
25+
26+
private const val vaultFile = "/var/run/secrets/nais.io/vault/tilganger.json"
27+
28+
class MidlertidigTilgangsSjekk(pathTilTilgangsfil: String = vaultFile) {
29+
30+
var tilgangListe = arrayListOf<String>()
4431

4532
init {
46-
if (isPreProd()) {
47-
tilgangListe = tilgangListe.plus(utviklereMedTilgangIPreProd)
48-
}
33+
val tilgangsFil = lesTilgangsfil(pathTilTilgangsfil)
34+
tilgangListe.addAll(tilgangsFil.identer.allToUpperCase())
4935
}
5036

51-
fun harTilgang(token: String): Boolean = getVeilederTokenPayload(token).let { tilgangListe.contains(it.navIdent.toUpperCase()) }
37+
fun harTilgang(navIdent: String): Boolean = tilgangListe.contains(navIdent.toUpperCase())
5238
}

src/main/kotlin/no/nav/syfo/vault/Vault.kt

+1
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,5 @@ object Vault {
6060
duration < MIN_REFRESH_MARGIN * 2 -> duration / 2
6161
else -> duration - MIN_REFRESH_MARGIN
6262
}
63+
6364
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package no.nav.syfo.tilgangskontroll
2+
3+
import io.ktor.util.InternalAPI
4+
import org.amshove.kluent.*
5+
import org.spekframework.spek2.Spek
6+
import org.spekframework.spek2.style.specification.describe
7+
8+
@InternalAPI
9+
class MidlertidigTilgangsKontrollSpek : Spek({
10+
11+
describe("MidlertidigTilgangsSjekk") {
12+
val tilgangsSjekk = MidlertidigTilgangsSjekk(javaClass.classLoader.getResource("tilganger.json").path)
13+
it("Skal lese tilganger") {
14+
tilgangsSjekk.tilgangListe.size shouldEqualTo 1
15+
tilgangsSjekk.tilgangListe shouldContain "Z123456"
16+
}
17+
18+
it("Skal gi tilgang til en ident i listen") {
19+
val harTilgang = tilgangsSjekk.harTilgang("Z123456")
20+
harTilgang shouldEqual true
21+
}
22+
23+
it("Skal ikke gi tilgang til ident som ikke finnes i listen") {
24+
val harTilgang = tilgangsSjekk.harTilgang("Z123455")
25+
harTilgang shouldEqual false
26+
}
27+
}
28+
})

src/test/resources/tilganger.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"identer": [
3+
"Z123456"
4+
]
5+
}

0 commit comments

Comments
 (0)