@@ -7,6 +7,7 @@ import com.auth0.jwk.{JwkProvider, JwkProviderBuilder}
77import com .auth0 .jwt .JWT
88import com .auth0 .jwt .algorithms .Algorithm
99import com .auth0 .jwt .interfaces .DecodedJWT
10+ import com .digitalasset .canton .config .NonNegativeDuration
1011
1112import java .net .URL
1213import java .util .concurrent .TimeUnit
@@ -49,12 +50,19 @@ trait SignatureVerifier {
4950 }
5051}
5152
52- class RSAVerifier (audience : String , jwksUrl : URL ) extends SignatureVerifier {
53+ class RSAVerifier (audience : String , jwksUrl : URL , timeoutsConfig : RSAVerifier .TimeoutsConfig )
54+ extends SignatureVerifier {
5355 override val expectedAudience : String = audience;
5456
5557 private val provider : JwkProvider = new JwkProviderBuilder (jwksUrl)
5658 .cached(10 , 24 , TimeUnit .HOURS )
5759 .rateLimited(10 , 1 , TimeUnit .MINUTES )
60+ .timeouts(
61+ // You'd need 2^31 milliseconds for this to overflow, which is about 25 days.
62+ // Surely nobody needs timeouts that long.
63+ timeoutsConfig.connectTimeout.duration.toMillis.toInt,
64+ timeoutsConfig.readTimeout.duration.toMillis.toInt,
65+ )
5866 .build()
5967
6068 private def algorithm = Algorithm .RSA256 (new JwksRSAKeyProvider (provider))
@@ -63,9 +71,12 @@ class RSAVerifier(audience: String, jwksUrl: URL) extends SignatureVerifier {
6371 case _ => Left (" Invalid token algorithm for rs-256 auth mode" )
6472 }
6573}
74+ object RSAVerifier {
75+ case class TimeoutsConfig (connectTimeout : NonNegativeDuration , readTimeout : NonNegativeDuration )
76+ }
6677
6778class HMACVerifier (audience : String , secret : String ) extends SignatureVerifier {
68- override val expectedAudience : String = audience;
79+ override val expectedAudience : String = audience
6980
7081 private def algorithm = Algorithm .HMAC256 (secret)
7182 override def validateAlgorithm (algorithm : String ) = algorithm match {
0 commit comments