removed static web page dispatcher
continuous-integration/drone/push Build is passing Details

dev
Override-6 2 years ago
parent 8e99789947
commit e15ed2a7f8

@ -4,7 +4,6 @@ import org.apache.logging.log4j.LogManager
import org.tbasket.auth.Authenticator import org.tbasket.auth.Authenticator
import org.tbasket.config.{FileServerConfig, ServerConfig} import org.tbasket.config.{FileServerConfig, ServerConfig}
import org.tbasket.data.Database import org.tbasket.data.Database
import org.tbasket.dispatch.StaticWebServicImpl
import org.tbasket.endpoint.Endpoint import org.tbasket.endpoint.Endpoint
import pdi.jwt.algorithms.JwtAsymmetricAlgorithm import pdi.jwt.algorithms.JwtAsymmetricAlgorithm
import zio.* import zio.*
@ -25,18 +24,13 @@ object Main extends ZIOAppDefault:
override def run = ZIO.serviceWithZIO[ZIOAppArgs] { args => override def run = ZIO.serviceWithZIO[ZIOAppArgs] { args =>
retrieveConfig(args) retrieveConfig(args)
.flatMap(config => setupAuth(config) <&> setupDatabase(config) <&> setupEndpoint(config) <&> setupStaticWebService(config)) .flatMap(config => setupAuth(config) <&> setupDatabase(config) <&> setupEndpoint(config))
.flatMap { .flatMap {
case (auth, db, ep, disp) => case (auth, db, ep) =>
ep.run.provide(db.datasourceLayer, db.contextLayer, auth, disp) ep.run.provide(db.datasourceLayer, db.contextLayer, auth)
} }
} }
private def setupStaticWebService(config: ServerConfig) = ZIO.attempt {
val dispatcher = new StaticWebServicImpl(config.pagesLocation.get)
ZLayer.succeed(dispatcher)
}
private def setupEndpoint(config: ServerConfig) = ZIO.attempt { private def setupEndpoint(config: ServerConfig) = ZIO.attempt {
new Endpoint(config.endpointPort) new Endpoint(config.endpointPort)
} }

@ -1,8 +0,0 @@
package org.tbasket.dispatch
import zio.*
import zio.http.{Request, Response}
trait StaticWebService {
def get(r: Request): IO[Object, Response]
}

@ -1,57 +0,0 @@
package org.tbasket.dispatch
import zio.*
import zio.http.*
import zio.http.model.Status
import zio.http.model.Status.*
import zio.stream.ZStream
import java.nio.file.{Files, Path}
import scala.collection.mutable
class StaticWebServicImpl(pagesLocation: Path) extends StaticWebService {
private val resources = resolveResources
override def get(r: Request) =
ZIO.attempt(pagesLocation.toString + r.url.path.toString)
.filterOrFail(!_.startsWith("/"))(Forbidden)
.map(resources.get)
.someOrFail(NotFound)
.map(content => Response(status = Ok, body = content))
.catchSome {
case status: Status =>
ZIO.attempt(Response.status(status))
}
private def resolveResources: Map[String, Body] = {
val map = mutable.HashMap.empty[String, Body]
def resolveAll(loc: Path): Unit = {
Files.list(loc)
.forEach {
case d if Files.isDirectory(d) => resolveAll(d)
case f =>
val body = Body.fromFile(f.toFile)
val fullPath = f.toString
val fileName = f.getFileName.toString
val purename = fileName.take(fileName.indexOf('.'))
map.put(fullPath, body)
//also bind the dir path with the index body
if (purename == "index" || purename == f.getParent.getFileName.toString) {
val extension = fullPath.drop(fullPath.indexOf('.'))
val dirPath = f.getParent.toString
if (extension == ".html")
map.put(dirPath, body)
else map.put(dirPath + extension, body)
}
}
}
resolveAll(pagesLocation)
map.toMap
}
}

@ -8,7 +8,6 @@ import io.netty.handler.codec.http.HttpMethod
import org.apache.logging.log4j.{LogManager, Logger} import org.apache.logging.log4j.{LogManager, Logger}
import org.tbasket.auth.Authenticator import org.tbasket.auth.Authenticator
import org.tbasket.data.DatabaseContext import org.tbasket.data.DatabaseContext
import org.tbasket.dispatch.StaticWebService
import org.tbasket.endpoint.Endpoint.{Log, app} import org.tbasket.endpoint.Endpoint.{Log, app}
import org.tbasket.error.* import org.tbasket.error.*
import EndpointUtils.errorBody import EndpointUtils.errorBody
@ -37,7 +36,7 @@ class Endpoint(port: Int):
Server.install(app).flatMap { port => Server.install(app).flatMap { port =>
Log.info(s"Listening API entries on $port") Log.info(s"Listening API entries on $port")
ZIO.never ZIO.never
}.provideSome[DatabaseContext & Authenticator & DataSource & StaticWebService]( }.provideSome[DatabaseContext & Authenticator & DataSource](
Scope.default, Scope.default,
serverConfigLayer, serverConfigLayer,
ConnectionPool.fixed(4), ConnectionPool.fixed(4),
@ -53,16 +52,9 @@ object Endpoint:
case r@POST -> _ / "auth" / "login" => case r@POST -> _ / "auth" / "login" =>
LoginHandler.login(r) LoginHandler.login(r)
case r@POST -> _ / "auth" / "token-login" =>
TokenLoginHandler.login(r)
case r@POST -> _ / "auth" / "register" => case r@POST -> _ / "auth" / "register" =>
RegisterHandler.register(r) RegisterHandler.register(r)
case r@GET -> _ =>
ZIO.serviceWithZIO[StaticWebService](_.get(r))
case r@method -> path => case r@method -> path =>
val ipInsights = r.remoteAddress val ipInsights = r.remoteAddress
.map(ip => s": request received from $ip.") .map(ip => s": request received from $ip.")

@ -21,8 +21,6 @@ object TestLayers {
ZLayer.succeed(auth) ZLayer.succeed(auth)
} }
val resp = ZLayer.succeed(TestStaticWebService)
val db = { val db = {
//ensure that the test table is always new in order to make tests on the same dataset all the time. //ensure that the test table is always new in order to make tests on the same dataset all the time.
Files.deleteIfExists(Path.of("/tmp/test-database.sqlite")) Files.deleteIfExists(Path.of("/tmp/test-database.sqlite"))

@ -1,10 +0,0 @@
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))
}

@ -5,7 +5,6 @@ import io.getquill.context.qzio.ZioJdbcContext
import io.getquill.context.sql.idiom.SqlIdiom import io.getquill.context.sql.idiom.SqlIdiom
import org.tbasket.auth.Authenticator import org.tbasket.auth.Authenticator
import org.tbasket.data.DatabaseContext import org.tbasket.data.DatabaseContext
import org.tbasket.dispatch.StaticWebService
import org.tbasket.endpoint.auth.LoginHandler.login import org.tbasket.endpoint.auth.LoginHandler.login
import org.tbasket.test.TestLayers.* import org.tbasket.test.TestLayers.*
import zio.* import zio.*
@ -23,14 +22,13 @@ abstract class TBasketPageSpec(location: String) extends ZIOSpecDefault {
protected def tspec: Spec[ protected def tspec: Spec[
DataSource & ClientConfig & Authenticator & ConnectionPool & DataSource & ClientConfig & Authenticator & ConnectionPool &
Scope & DatabaseContext & Client & StaticWebService, Any Scope & DatabaseContext & Client, Any
] ]
final override def spec = tspec.provide( final override def spec = tspec.provide(
db.datasourceLayer, db.datasourceLayer,
db.contextLayer, db.contextLayer,
auth, auth,
resp,
ConnectionPool.fixed(1), ConnectionPool.fixed(1),
Scope.default, Scope.default,
ClientConfig.default, ClientConfig.default,

@ -21,7 +21,7 @@ import zio.json.ast.{Json, JsonCursor}
import zio.test.* import zio.test.*
import zio.test.Assertion.* import zio.test.Assertion.*
object LoginHandlerTests extends TBasketPageSpec("/login") { object LoginHandlerTests extends TBasketPageSpec("/auth/login") {
private def requestsSpec = suite("bad request tests")( private def requestsSpec = suite("bad request tests")(

@ -12,7 +12,7 @@ import zio.json.ast.JsonCursor
import zio.test.* import zio.test.*
import zio.test.Assertion.* import zio.test.Assertion.*
object RegisterHandlerTests extends TBasketPageSpec("/register") { object RegisterHandlerTests extends TBasketPageSpec("/auth/register") {
private def requestsSpec = suite("bad request tests")( private def requestsSpec = suite("bad request tests")(