Browse Source

Add missing required headers + update dependencies (#6755)

Andriy Plokhotnyuk 4 years ago
parent
commit
fc5b6d9bb1

+ 4 - 6
frameworks/Scala/zio-http/build.sbt

@@ -1,15 +1,13 @@
 name := "zio-http"
-
 version := "1.0.0"
-scalaVersion := "2.13.3"
+scalaVersion := "2.13.6"
 lazy val root = (project in file("."))
   .settings(
-    name := "helloExample",
     libraryDependencies ++=
       Seq(
-        "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core"   % "2.6.4",
-        "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.6.4" % "compile-internal",
-        "io.d11"                                 % "zhttp"                 % "1.0.0-RC3.1",
+        "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core"   % "2.9.1",
+        "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.9.1" % "compile-internal",
+        "io.d11"                                 % "zhttp"                 % "1.0.0-RC5",
       ),
     testFrameworks += new TestFramework("zio.test.sbt.ZTestFramework"),
   )

+ 1 - 1
frameworks/Scala/zio-http/project/build.properties

@@ -1 +1 @@
-sbt.version = 1.4.7
+sbt.version = 1.5.5

+ 1 - 1
frameworks/Scala/zio-http/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0")
+addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.0.0")

+ 27 - 7
frameworks/Scala/zio-http/src/main/scala/Main.scala

@@ -3,20 +3,40 @@ import zhttp.service.Server
 import zio.{App, ExitCode, URIO}
 import com.github.plokhotnyuk.jsoniter_scala.macros._
 import com.github.plokhotnyuk.jsoniter_scala.core._
-import java.time.ZonedDateTime
+import zhttp.http.Response
+
 import java.time.format.DateTimeFormatter
+import java.time.{Instant, ZoneOffset}
+
+case class Message(message: String)
 
-object WebApp extends App {
+object Main extends App {
   val message: String                         = "Hello, World!"
-  def createDate: String                      = DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now)
-  case class Message(message: String)
   implicit val codec: JsonValueCodec[Message] = JsonCodecMaker.make
 
-  val app = Http.collect[Request] {
-    case Method.GET -> Root / "plaintext" => Response.text(message)
-    case Method.GET -> Root / "json"      => Response.jsonString(writeToString(Message(message)))
+  val app: Http[Any, HttpError, Request, Response] = Http.collect[Request] {
+    case Method.GET -> Root / "plaintext" =>
+      Response.http(
+        content = HttpContent.Complete(message),
+        headers = Header.contentTypeTextPlain :: headers(),
+      )
+    case Method.GET -> Root / "json"      =>
+      Response.http(
+        content = HttpContent.Complete(writeToString(Message(message))),
+        headers = Header.contentTypeJson :: headers(),
+      )
   }
 
   override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] = Server.start(8080, app).exitCode
 
+  val formatter: DateTimeFormatter                = DateTimeFormatter.RFC_1123_DATE_TIME.withZone(ZoneOffset.UTC)
+  val constantHeaders: List[Header]               = Header("server", "zio-http") :: Nil
+  @volatile var lastHeaders: (Long, List[Header]) = (0, Nil)
+
+  def headers(): List[Header] = {
+    val t = System.currentTimeMillis()
+    if (t - lastHeaders._1 >= 1000)
+      lastHeaders = (t, Header("date", formatter.format(Instant.ofEpochMilli(t))) :: constantHeaders)
+    lastHeaders._2
+  }
 }

+ 4 - 7
frameworks/Scala/zio-http/zio-http.dockerfile

@@ -1,14 +1,11 @@
 FROM openjdk:11-jdk
 
-ARG SBT_VERSION=1.2.8
-
 RUN \
-  curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
-  dpkg -i sbt-$SBT_VERSION.deb && \
-  rm sbt-$SBT_VERSION.deb && \
+  echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | tee /etc/apt/sources.list.d/sbt.list && \
+  echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | tee /etc/apt/sources.list.d/sbt_old.list && \
+  curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | apt-key add && \
   apt-get update && \
-  apt-get install sbt && \
-  sbt sbtVersion
+  apt-get install sbt
 
 WORKDIR /zhttp
 COPY src src