From 6f3a6e8839e1e9418d82d643120b93184ef7a45b Mon Sep 17 00:00:00 2001 From: Fabian Bull Date: Mon, 4 Jul 2022 21:34:00 +0200 Subject: [PATCH] Prototype typesafe config --- server/build.sbt | 5 +++++ server/src/main/resources/application.conf | 1 + .../org/openschool/server/BackendServer.scala | 14 +++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 server/src/main/resources/application.conf diff --git a/server/build.sbt b/server/build.sbt index 899dfe3..98ca968 100644 --- a/server/build.sbt +++ b/server/build.sbt @@ -12,17 +12,22 @@ lazy val server = (project in file(".")) scalaVersion := "3.1.0", assembly / mainClass := Some("org.openschool.server.Main"), libraryDependencies ++= Seq( + "com.typesafe" % "config" % "1.4.2", + "org.http4s" %% "http4s-ember-server" % Http4sVersion, "org.http4s" %% "http4s-ember-client" % Http4sVersion, "org.http4s" %% "http4s-circe" % Http4sVersion, "io.circe" %% "circe-generic" % "0.14.1", + "org.http4s" %% "http4s-dsl" % Http4sVersion, "com.softwaremill.sttp.tapir" %% "tapir-core" % TapirVersion, "com.softwaremill.sttp.tapir" %% "tapir-json-circe" % TapirVersion, "com.softwaremill.sttp.tapir" %% "tapir-http4s-server" % TapirVersion, "com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % TapirVersion, + "org.scalameta" %% "munit" % MunitVersion % Test, "org.typelevel" %% "munit-cats-effect-3" % MunitCatsEffectVersion % Test, + "ch.qos.logback" % "logback-classic" % LogbackVersion ), testFrameworks += new TestFramework("munit.Framework") diff --git a/server/src/main/resources/application.conf b/server/src/main/resources/application.conf new file mode 100644 index 0000000..2bc054a --- /dev/null +++ b/server/src/main/resources/application.conf @@ -0,0 +1 @@ +port = 8080 diff --git a/server/src/main/scala/org/openschool/server/BackendServer.scala b/server/src/main/scala/org/openschool/server/BackendServer.scala index ac8eafe..c520fae 100644 --- a/server/src/main/scala/org/openschool/server/BackendServer.scala +++ b/server/src/main/scala/org/openschool/server/BackendServer.scala @@ -1,5 +1,8 @@ package org.openschool.server +import cats.Applicative +import com.typesafe.config.Config +import com.typesafe.config.ConfigFactory import cats.effect.{Async, Resource} import cats.syntax.all._ import com.comcast.ip4s._ @@ -14,8 +17,13 @@ import org.http4s.Uri object BackendServer: + def config[F[_]: Applicative]: Resource[F, Config] = + Resource.pure(ConfigFactory.load()) + def stream[F[_]: Async]: Stream[F, Nothing] = { for { + config <- Stream.resource(config[F]) + port = config.getInt("port") client <- Stream.resource(EmberClientBuilder.default[F].build) helloWorldAlg = HelloWorld.impl[F] systemInfoAlg = SystemInfo.impl[F] @@ -25,8 +33,8 @@ object BackendServer: corsOriginSettings = CORS.policy .withAllowOriginHost( Set( - Origin.Host(Uri.Scheme.https, Uri.RegName("localhost"), 8000.some), - Origin.Host(Uri.Scheme.http, Uri.RegName("localhost"), 8000.some) + Origin.Host(Uri.Scheme.https, Uri.RegName("localhost"), port.some), + Origin.Host(Uri.Scheme.http, Uri.RegName("localhost"), port.some) ) ) .withAllowCredentials(false) @@ -50,7 +58,7 @@ object BackendServer: EmberServerBuilder .default[F] .withHost(ipv4"0.0.0.0") - .withPort(port"8080") + .withPort(Port.fromInt(port).get) .withHttpApp(finalHttpApp) .build >> Resource.eval(Async[F].never)