Skip to content

Commit bcea474

Browse files
authored
Merge pull request #2888 from TonioGela/main
Replacing deprecated http4s-okhttp-client with http4s-jdk-http-client
2 parents 9296786 + 82902af commit bcea474

File tree

4 files changed

+34
-15
lines changed

4 files changed

+34
-15
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ lazy val core = myCrossProject("core")
105105
Dependencies.http4sCirce,
106106
Dependencies.http4sClient,
107107
Dependencies.http4sCore,
108-
Dependencies.http4sOkhttpClient,
108+
Dependencies.http4sJdkhttpClient,
109109
Dependencies.jjwtApi,
110110
Dependencies.jjwtImpl % Runtime,
111111
Dependencies.jjwtJackson % Runtime,

modules/core/src/main/scala/org/scalasteward/core/application/Context.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ object Context {
119119
middleware
120120
)
121121
urlCheckerClient <- ClientConfiguration.build(
122-
ClientConfiguration.disableFollowRedirect[F],
122+
ClientConfiguration.disableFollowRedirect,
123123
middleware
124124
)
125125
fileAlg0 = FileAlg.create(logger0, F)

modules/core/src/main/scala/org/scalasteward/core/client/ClientConfiguration.scala

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,49 @@
1717
package org.scalasteward.core.client
1818

1919
import cats.effect._
20+
import cats.syntax.all._
2021
import eu.timepit.refined.auto._
2122
import eu.timepit.refined.types.numeric.PosInt
2223
import org.http4s.Response
2324
import org.http4s.client._
2425
import org.http4s.headers.`User-Agent`
25-
import org.http4s.okhttp.client.OkHttpBuilder
26+
import org.http4s.jdkhttpclient.JdkHttpClient
27+
import java.net.http.HttpClient
28+
import java.net.http.HttpClient.Builder
2629
import org.typelevel.ci._
2730

2831
import scala.concurrent.duration._
2932

3033
object ClientConfiguration {
31-
type BuilderMiddleware[F[_]] = OkHttpBuilder[F] => OkHttpBuilder[F]
34+
type BuilderMiddleware = Builder => Builder
35+
3236
object BuilderMiddleware {
33-
def default[F[_]]: BuilderMiddleware[F] = bmw => bmw
37+
def default: BuilderMiddleware = _.followRedirects(HttpClient.Redirect.ALWAYS)
3438
}
35-
def build[F[_]: Async](bmw: BuilderMiddleware[F], cmw: Middleware[F]): Resource[F, Client[F]] =
36-
OkHttpBuilder
37-
.withDefaultClient[F]
38-
.map(bmw)
39-
.flatMap(_.resource)
39+
40+
def build[F[_]: Async](bmw: BuilderMiddleware, cmw: Middleware[F]): Resource[F, Client[F]] =
41+
Resource
42+
.eval(defaultHttpClient[F](bmw).map(JdkHttpClient[F](_)))
4043
.map(cmw)
44+
// Copied from https://github.com/http4s/http4s-jdk-http-client/blob/b9655b90549319fbe999069e7c95ab1752efecb9/core/src/main/scala/org/http4s/jdkhttpclient/JdkHttpClient.scala#L257-L275 to support BuilderMiddleware
45+
private def defaultHttpClient[F[_]: Async](bmw: BuilderMiddleware): F[HttpClient] =
46+
Async[F].executor.flatMap { exec =>
47+
Async[F].delay {
48+
val builder = HttpClient.newBuilder()
49+
50+
if (Runtime.version().feature() == 11) {
51+
val params = javax.net.ssl.SSLContext.getDefault().getDefaultSSLParameters()
52+
params.setProtocols(params.getProtocols().filter(_ != "TLSv1.3"))
53+
builder.sslParameters(params)
54+
}
55+
56+
builder.executor(exec)
57+
58+
bmw(builder)
59+
60+
builder.build()
61+
}
62+
}
4163

4264
def setUserAgent[F[_]: MonadCancelThrow](userAgent: `User-Agent`): Middleware[F] = { client =>
4365
Client[F](req => client.run(req.putHeaders(userAgent)))
@@ -69,8 +91,5 @@ object ClientConfiguration {
6991
}
7092
}
7193

72-
def disableFollowRedirect[F[_]](builder: OkHttpBuilder[F]): OkHttpBuilder[F] =
73-
builder.withOkHttpClient(
74-
builder.okHttpClient.newBuilder().followRedirects(false).build()
75-
)
94+
def disableFollowRedirect: BuilderMiddleware = _.followRedirects(HttpClient.Redirect.NEVER)
7695
}

project/Dependencies.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ object Dependencies {
2525
val http4sClient = "org.http4s" %% "http4s-client" % http4sCore.revision
2626
val http4sDsl = "org.http4s" %% "http4s-dsl" % http4sCore.revision
2727
val http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % "1.0.0-M38"
28-
val http4sOkhttpClient = "org.http4s" %% "http4s-okhttp-client" % "1.0.0-M32"
28+
val http4sJdkhttpClient = "org.http4s" %% "http4s-jdk-http-client" % "1.0.0-M8"
2929
val log4catsSlf4j = "org.typelevel" %% "log4cats-slf4j" % "2.5.0"
3030
val logbackClassic = "ch.qos.logback" % "logback-classic" % "1.4.5"
3131
val jjwtApi = "io.jsonwebtoken" % "jjwt-api" % "0.11.5"

0 commit comments

Comments
 (0)