@@ -9,67 +9,70 @@ import com.nimbusds.jose.jwk.KeyType
9
9
import com.nimbusds.jose.jwk.RSAKey
10
10
import com.nimbusds.jose.jwk.source.JWKSource
11
11
import com.nimbusds.jose.proc.SecurityContext
12
+ import no.nav.security.mock.oauth2.OAuth2Exception
12
13
import java.util.concurrent.ConcurrentHashMap
13
14
import java.util.concurrent.LinkedBlockingDeque
14
- import no.nav.security.mock.oauth2.OAuth2Exception
15
15
16
16
open class KeyProvider
17
- @JvmOverloads
18
- constructor (
19
- private val initialKeys: List <JWK > = keysFromFile(INITIAL_KEYS_FILE ),
20
- private val algorithm: String = JWSAlgorithm .RS256 .name,
21
- ) : JWKSource <SecurityContext > {
22
- private val signingKeys: ConcurrentHashMap <String , JWK > = ConcurrentHashMap ()
17
+ @JvmOverloads
18
+ constructor (
19
+ private val initialKeys: List <JWK > = keysFromFile(INITIAL_KEYS_FILE ),
20
+ private val algorithm: String = JWSAlgorithm .RS256 .name,
21
+ ) : JWKSource <SecurityContext > {
22
+ private val signingKeys: ConcurrentHashMap <String , JWK > = ConcurrentHashMap ()
23
23
24
- private var generator: KeyGenerator = KeyGenerator (JWSAlgorithm .parse(algorithm))
24
+ private var generator: KeyGenerator = KeyGenerator (JWSAlgorithm .parse(algorithm))
25
25
26
- private val keyDeque =
27
- LinkedBlockingDeque <JWK >().apply {
28
- initialKeys.forEach {
29
- put(it)
26
+ private val keyDeque =
27
+ LinkedBlockingDeque <JWK >().apply {
28
+ initialKeys.forEach {
29
+ put(it)
30
+ }
30
31
}
31
- }
32
32
33
- fun signingKey (keyId : String ): JWK = signingKeys.computeIfAbsent(keyId) { keyFromDequeOrNew(keyId) }
33
+ fun signingKey (keyId : String ): JWK = signingKeys.computeIfAbsent(keyId) { keyFromDequeOrNew(keyId) }
34
34
35
- private fun keyFromDequeOrNew (keyId : String ): JWK =
36
- keyDeque.poll()?.let { polledJwk ->
37
- when (polledJwk.keyType.value) {
38
- KeyType .RSA .value -> {
39
- RSAKey .Builder (polledJwk.toRSAKey()).keyID(keyId).build()
40
- }
35
+ private fun keyFromDequeOrNew (keyId : String ): JWK =
36
+ keyDeque.poll()?.let { polledJwk ->
37
+ when (polledJwk.keyType.value) {
38
+ KeyType .RSA .value -> {
39
+ RSAKey .Builder (polledJwk.toRSAKey()).keyID(keyId).build()
40
+ }
41
41
42
- KeyType .EC .value -> {
43
- ECKey .Builder (polledJwk.toECKey()).keyID(keyId).build()
44
- }
42
+ KeyType .EC .value -> {
43
+ ECKey .Builder (polledJwk.toECKey()).keyID(keyId).build()
44
+ }
45
45
46
- else -> {
47
- throw OAuth2Exception (" Unsupported key type: ${polledJwk.keyType.value} " )
46
+ else -> {
47
+ throw OAuth2Exception (" Unsupported key type: ${polledJwk.keyType.value} " )
48
+ }
48
49
}
49
- }
50
- } ? : generator.generateKey(keyId)
50
+ } ? : generator.generateKey(keyId)
51
51
52
- fun algorithm (): JWSAlgorithm = JWSAlgorithm .parse(algorithm)
52
+ fun algorithm (): JWSAlgorithm = JWSAlgorithm .parse(algorithm)
53
53
54
- fun keyType (): String = generator.keyGenerator.algorithm
54
+ fun keyType (): String = generator.keyGenerator.algorithm
55
55
56
- fun generate (algorithm : String ) {
57
- generator = KeyGenerator (JWSAlgorithm .parse(algorithm))
58
- }
56
+ fun generate (algorithm : String ) {
57
+ generator = KeyGenerator (JWSAlgorithm .parse(algorithm))
58
+ }
59
59
60
- companion object {
61
- const val INITIAL_KEYS_FILE = " /mock-oauth2-server-keys.json"
60
+ companion object {
61
+ const val INITIAL_KEYS_FILE = " /mock-oauth2-server-keys.json"
62
62
63
- fun keysFromFile (filename : String ): List <JWK > {
64
- val keysFromFile = KeyProvider ::class .java.getResource(filename)
65
- if (keysFromFile != null ) {
66
- return JWKSet .parse(keysFromFile.readText()).keys.map { it as JWK }
63
+ fun keysFromFile (filename : String ): List <JWK > {
64
+ val keysFromFile = KeyProvider ::class .java.getResource(filename)
65
+ if (keysFromFile != null ) {
66
+ return JWKSet .parse(keysFromFile.readText()).keys.map { it as JWK }
67
+ }
68
+ return emptyList()
67
69
}
68
- return emptyList()
69
70
}
70
- }
71
71
72
- override fun get (jwkSelector : JWKSelector ? , context : SecurityContext ? ): MutableList <JWK > {
73
- return signingKeys.values.toMutableList()
72
+ override fun get (
73
+ jwkSelector : JWKSelector ? ,
74
+ context : SecurityContext ? ,
75
+ ): MutableList <JWK > {
76
+ return signingKeys.values.toMutableList()
77
+ }
74
78
}
75
- }
0 commit comments