diff --git a/Core/src/org/tbasket/Main.scala b/Core/src/org/tbasket/Main.scala index ea63f65..ed91a63 100644 --- a/Core/src/org/tbasket/Main.scala +++ b/Core/src/org/tbasket/Main.scala @@ -4,7 +4,7 @@ import org.apache.logging.log4j.LogManager import org.tbasket.auth.Authenticator import org.tbasket.config.{FileServerConfig, ServerConfig} import org.tbasket.data.Database -import org.tbasket.dispatch.WebService +import org.tbasket.dispatch.StaticWebServicImpl import org.tbasket.endpoint.Endpoint import pdi.jwt.algorithms.JwtAsymmetricAlgorithm import zio.* @@ -25,15 +25,15 @@ object Main extends ZIOAppDefault: override def run = ZIO.serviceWithZIO[ZIOAppArgs] { args => retrieveConfig(args) - .flatMap(config => setupAuth(config) <&> setupDatabase(config) <&> setupEndpoint(config) <&> setupPageDispatcher(config)) + .flatMap(config => setupAuth(config) <&> setupDatabase(config) <&> setupEndpoint(config) <&> setupStaticWebService(config)) .flatMap { case (auth, db, ep, disp) => ep.run.provide(db.datasourceLayer, db.contextLayer, auth, disp) } } - private def setupPageDispatcher(config: ServerConfig) = ZIO.attempt { - val dispatcher = new WebService(config.pagesLocation) + private def setupStaticWebService(config: ServerConfig) = ZIO.attempt { + val dispatcher = new StaticWebServicImpl(config.pagesLocation.get) ZLayer.succeed(dispatcher) } diff --git a/Core/src/org/tbasket/dispatch/StaticWebService.scala b/Core/src/org/tbasket/dispatch/StaticWebService.scala new file mode 100644 index 0000000..7ac2055 --- /dev/null +++ b/Core/src/org/tbasket/dispatch/StaticWebService.scala @@ -0,0 +1,8 @@ +package org.tbasket.dispatch + +import zio.* +import zio.http.{Request, Response} + +trait StaticWebService { + def get(r: Request): IO[Object, Response] +} diff --git a/Core/src/org/tbasket/dispatch/WebService.scala b/Core/src/org/tbasket/dispatch/StaticWebServiceImpl.scala similarity index 92% rename from Core/src/org/tbasket/dispatch/WebService.scala rename to Core/src/org/tbasket/dispatch/StaticWebServiceImpl.scala index 63c610a..55e9717 100644 --- a/Core/src/org/tbasket/dispatch/WebService.scala +++ b/Core/src/org/tbasket/dispatch/StaticWebServiceImpl.scala @@ -9,12 +9,11 @@ import zio.stream.ZStream import java.nio.file.{Files, Path} import scala.collection.mutable -class WebService(pagesLocation: Option[Path]) { +class StaticWebServicImpl(pagesLocation: Path) extends StaticWebService { private val resources = resolveResources - - def send(r: Request) = + override def get(r: Request) = ZIO.attempt(pagesLocation.toString + r.url.path.toString) .filterOrFail(!_.startsWith("/"))(Forbidden) .map(resources.get) @@ -52,7 +51,7 @@ class WebService(pagesLocation: Option[Path]) { } } } - pagesLocation.foreach(resolveAll) + resolveAll(pagesLocation) map.toMap } } diff --git a/Core/src/org/tbasket/endpoint/Endpoint.scala b/Core/src/org/tbasket/endpoint/Endpoint.scala index 8a80e27..a0efbc6 100644 --- a/Core/src/org/tbasket/endpoint/Endpoint.scala +++ b/Core/src/org/tbasket/endpoint/Endpoint.scala @@ -8,7 +8,7 @@ import io.netty.handler.codec.http.HttpMethod import org.apache.logging.log4j.{LogManager, Logger} import org.tbasket.auth.Authenticator import org.tbasket.data.DatabaseContext -import org.tbasket.dispatch.WebService +import org.tbasket.dispatch.StaticWebService import org.tbasket.endpoint.Endpoint.{Log, app} import org.tbasket.error.* import org.tbasket.handler.HandlerUtils.errorBody @@ -37,7 +37,7 @@ class Endpoint(port: Int): Server.install(app).flatMap { port => Log.info(s"Listening API entries on $port") ZIO.never - }.provideSome[DatabaseContext & Authenticator & DataSource & WebService]( + }.provideSome[DatabaseContext & Authenticator & DataSource & StaticWebService]( Scope.default, serverConfigLayer, ConnectionPool.fixed(4), @@ -57,7 +57,8 @@ object Endpoint: RegisterPageHandler.post(r) case r@GET -> _ => - ZIO.serviceWithZIO[WebService](_.send(r)) + + ZIO.serviceWithZIO[StaticWebService](_.get(r)) case r@method -> path => val ipInsights = r.remoteAddress diff --git a/tests/src/org/tbasket/test/TestLayers.scala b/tests/src/org/tbasket/test/TestLayers.scala index cbf77e2..1d35bdd 100644 --- a/tests/src/org/tbasket/test/TestLayers.scala +++ b/tests/src/org/tbasket/test/TestLayers.scala @@ -3,7 +3,6 @@ package org.tbasket.test import org.tbasket.auth.Authenticator import org.tbasket.config.ServerConfig import org.tbasket.data.Database -import org.tbasket.dispatch.WebService import zio.{Task, ZLayer} import java.nio.file.{Files, Path} @@ -22,7 +21,7 @@ object TestLayers { ZLayer.succeed(auth) } - val resp = ZLayer.succeed(new WebService(TestServerConfig.pagesLocation)) + val resp = ZLayer.succeed(TestStaticWebService) val db = { //ensure that the test table is always new in order to make tests on the same dataset all the time. diff --git a/tests/src/org/tbasket/test/TestStaticWebService.scala b/tests/src/org/tbasket/test/TestStaticWebService.scala new file mode 100644 index 0000000..8d07b33 --- /dev/null +++ b/tests/src/org/tbasket/test/TestStaticWebService.scala @@ -0,0 +1,10 @@ +package org.tbasket.test + +import org.tbasket.dispatch.StaticWebService +import zio.ZIO +import zio.http.model.Status.NotFound +import zio.http.{Http, Request, Response} + +object TestStaticWebService extends StaticWebService { + override def get(r: Request) = ZIO.attempt(Response.status(NotFound)) +} diff --git a/tests/src/org/tbasket/test/pages/TBasketPageSpec.scala b/tests/src/org/tbasket/test/pages/TBasketPageSpec.scala index 8a3695e..45ba226 100644 --- a/tests/src/org/tbasket/test/pages/TBasketPageSpec.scala +++ b/tests/src/org/tbasket/test/pages/TBasketPageSpec.scala @@ -5,13 +5,13 @@ import io.getquill.context.qzio.ZioJdbcContext import io.getquill.context.sql.idiom.SqlIdiom import org.tbasket.auth.Authenticator import org.tbasket.data.DatabaseContext -import org.tbasket.dispatch.WebService -import zio.test.{Spec, TestEnvironment, ZIOSpecDefault} +import org.tbasket.dispatch.StaticWebService import org.tbasket.handler.LoginPageHandler.post -import zio.* import org.tbasket.test.TestLayers.* -import zio.http.{Client, ClientConfig, URL} +import zio.* import zio.http.netty.client.ConnectionPool +import zio.http.{Client, ClientConfig, URL} +import zio.test.{Spec, TestEnvironment, ZIOSpecDefault} import javax.sql.DataSource @@ -21,7 +21,7 @@ abstract class TBasketPageSpec(location: String) extends ZIOSpecDefault { case Left(value) => throw value case Right(url) => url - protected def tspec: Spec[DataSource & ClientConfig & Authenticator & ConnectionPool & Scope & DatabaseContext & Client & WebService, Any] + protected def tspec: Spec[DataSource & ClientConfig & Authenticator & ConnectionPool & Scope & DatabaseContext & Client & StaticWebService, Any] final override def spec = tspec.provide( db.datasourceLayer,