Skip to content

Commit 6eb70b2

Browse files
committed
migrate to session v0.5.0
1 parent 624aa45 commit 6eb70b2

26 files changed

+279
-151
lines changed

api/src/main/scala/app/softnetwork/scheduler/api/SchedulerApi.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import app.softnetwork.persistence.schema.SchemaProvider
77
import app.softnetwork.scheduler.handlers.SchedulerHandler
88
import app.softnetwork.scheduler.launch.SchedulerApplication
99
import app.softnetwork.scheduler.persistence.query.Entity2SchedulerProcessorStream
10+
import app.softnetwork.session.config.Settings
11+
import app.softnetwork.session.model.SessionManagers
12+
import com.softwaremill.session.{SessionConfig, SessionManager}
1013
import com.typesafe.config.Config
14+
import org.softnetwork.session.model.Session
1115

1216
import scala.concurrent.Future
1317

@@ -29,4 +33,10 @@ trait SchedulerApi extends SchedulerApplication { _: SchemaProvider =>
2933
: ActorSystem[_] => Seq[PartialFunction[HttpRequest, Future[HttpResponse]]] = system =>
3034
Seq(SchedulerServiceApiHandler.partial(schedulerServer(system))(system))
3135

36+
override protected def sessionType: Session.SessionType =
37+
Settings.Session.SessionContinuityAndTransport
38+
39+
override protected def manager(implicit sessionConfig: SessionConfig): SessionManager[Session] =
40+
SessionManagers.basic
41+
3242
}

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ ThisBuild / organization := "app.softnetwork"
22

33
name := "scheduler"
44

5-
ThisBuild / version := "0.4.1"
5+
ThisBuild / version := "0.5.0"
66

77
ThisBuild / scalaVersion := "2.12.15"
88

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerEndpoints.scala

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,25 @@ import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.{ApiEndpoints, Endpoint}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
7+
import app.softnetwork.session.service.SessionMaterials
8+
import com.softwaremill.session.{SessionConfig, SessionManager}
9+
import org.slf4j.{Logger, LoggerFactory}
10+
import org.softnetwork.session.model.Session
711

8-
trait SchedulerEndpoints extends ApiEndpoints { _: SchedulerGuardian with SchemaProvider =>
12+
import scala.concurrent.ExecutionContext
913

10-
def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints = system =>
11-
SchedulerServiceEndpoints.apply(system, sessionEndpoints(system))
14+
trait SchedulerEndpoints extends ApiEndpoints { self: SchedulerGuardian with SchemaProvider =>
15+
16+
def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints = sys =>
17+
new SchedulerServiceEndpoints with SessionMaterials {
18+
override implicit def system: ActorSystem[_] = sys
19+
override lazy val ec: ExecutionContext = sys.executionContext
20+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
21+
override protected def sessionType: Session.SessionType = self.sessionType
22+
override implicit def manager(implicit
23+
sessionConfig: SessionConfig
24+
): SessionManager[Session] = self.manager
25+
}
1226

1327
override def endpoints: ActorSystem[_] => List[Endpoint] = system =>
1428
List(schedulerEndpoints(system))

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerGuardian.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ import app.softnetwork.scheduler.persistence.typed.SchedulerBehavior
1717
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
1818
import app.softnetwork.session.CsrfCheckHeader
1919
import app.softnetwork.session.launch.SessionGuardian
20-
import app.softnetwork.session.service.SessionEndpoints
20+
import app.softnetwork.session.service.SessionMaterials
21+
import com.softwaremill.session.{SessionConfig, SessionManager}
2122
import org.slf4j.{Logger, LoggerFactory}
23+
import org.softnetwork.session.model.Session
2224

25+
import scala.concurrent.ExecutionContext
2326
import scala.util.{Failure, Success, Try}
2427

2528
trait SchedulerGuardian extends SessionGuardian with CsrfCheckHeader { self: SchemaProvider =>
@@ -68,10 +71,14 @@ trait SchedulerGuardian extends SessionGuardian with CsrfCheckHeader { self: Sch
6871
sys.env.getOrElse("VERSION", SchedulerCoreBuildInfo.version)
6972

7073
def schedulerSwagger: ActorSystem[_] => SwaggerEndpoint = sys =>
71-
new SchedulerServiceEndpoints with SwaggerEndpoint {
74+
new SchedulerServiceEndpoints with SwaggerEndpoint with SessionMaterials {
7275
override implicit def system: ActorSystem[_] = sys
76+
override lazy val ec: ExecutionContext = sys.executionContext
7377
lazy val log: Logger = LoggerFactory getLogger getClass.getName
74-
override def sessionEndpoints: SessionEndpoints = self.sessionEndpoints(system)
78+
override protected def sessionType: Session.SessionType = self.sessionType
79+
override implicit def manager(implicit
80+
sessionConfig: SessionConfig
81+
): SessionManager[Session] = self.manager
7582
override val applicationVersion: String = systemVersion()
7683
}
7784
}

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerRoutes.scala

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,25 @@ import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.{ApiRoute, ApiRoutes}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.service.SchedulerService
7+
import app.softnetwork.session.service.SessionMaterials
8+
import com.softwaremill.session.{SessionConfig, SessionManager}
9+
import org.slf4j.{Logger, LoggerFactory}
10+
import org.softnetwork.session.model.Session
711

8-
trait SchedulerRoutes extends ApiRoutes { _: SchedulerGuardian with SchemaProvider =>
12+
import scala.concurrent.ExecutionContext
913

10-
def schedulerService: ActorSystem[_] => SchedulerService = system =>
11-
SchedulerService(system, sessionService(system))
14+
trait SchedulerRoutes extends ApiRoutes { self: SchedulerGuardian with SchemaProvider =>
15+
16+
def schedulerService: ActorSystem[_] => SchedulerService = sys =>
17+
new SchedulerService with SessionMaterials {
18+
override implicit def system: ActorSystem[_] = sys
19+
override lazy val ec: ExecutionContext = sys.executionContext
20+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
21+
override protected def sessionType: Session.SessionType = self.sessionType
22+
override implicit def manager(implicit
23+
sessionConfig: SessionConfig
24+
): SessionManager[Session] = self.manager
25+
}
1226

1327
override def apiRoutes: ActorSystem[_] => List[ApiRoute] =
1428
system =>

core/src/main/scala/app/softnetwork/scheduler/service/SchedulerService.scala

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,44 @@ import akka.actor.typed.ActorSystem
44
import akka.http.scaladsl.model.{HttpResponse, StatusCodes}
55
import akka.http.scaladsl.server.{Directives, Route}
66
import app.softnetwork.api.server._
7-
import app.softnetwork.persistence.service.Service
87
import app.softnetwork.scheduler.config.SchedulerSettings
98
import app.softnetwork.scheduler.handlers.{SchedulerDao, SchedulerHandler}
109
import app.softnetwork.scheduler.message._
1110
import app.softnetwork.scheduler.model._
1211
import app.softnetwork.serialization._
13-
import app.softnetwork.session.service.SessionService
12+
import app.softnetwork.session.config.Settings
13+
import app.softnetwork.session.service.{ServiceWithSessionDirectives, SessionMaterials}
1414
import com.softwaremill.session.CsrfDirectives.hmacTokenCsrfProtection
1515
import com.softwaremill.session.CsrfOptions.checkHeader
16+
import com.softwaremill.session.SessionConfig
1617
import com.typesafe.scalalogging.StrictLogging
1718
import de.heikoseeberger.akkahttpjson4s.Json4sSupport
1819
import org.json4s.jackson.Serialization
1920
import org.json4s.{jackson, Formats}
20-
import org.slf4j.{Logger, LoggerFactory}
21-
import org.softnetwork.session.model.Session
2221

2322
trait SchedulerService
2423
extends Directives
2524
with DefaultComplete
2625
with Json4sSupport
2726
with StrictLogging
28-
with Service[SchedulerCommand, SchedulerCommandResult]
27+
with ServiceWithSessionDirectives[SchedulerCommand, SchedulerCommandResult]
2928
with SchedulerDao
30-
with SchedulerHandler
31-
with ApiRoute {
29+
with SchedulerHandler { _: SessionMaterials =>
3230

33-
implicit def serialization: Serialization.type = jackson.Serialization
31+
implicit def sessionConfig: SessionConfig = Settings.Session.DefaultSessionConfig
3432

35-
override implicit def formats: Formats = commonFormats
33+
override implicit def ts: ActorSystem[_] = system
3634

37-
import Session._
35+
implicit def serialization: Serialization.type = jackson.Serialization
3836

39-
def sessionService: SessionService
37+
override implicit def formats: Formats = commonFormats
4038

4139
val route: Route = {
4240
pathPrefix(SchedulerSettings.SchedulerPath) {
4341
// check anti CSRF token
4442
hmacTokenCsrfProtection(checkHeader) {
4543
// check if a session exists
46-
sessionService.requiredSession { session =>
44+
requiredSession(sc, gt) { session =>
4745
// only administrators should be allowed to access this resource
4846
if (session.admin) {
4947
schedules ~ crons ~ scheduler
@@ -79,7 +77,7 @@ trait SchedulerService
7977
}
8078
}
8179
} ~ get {
82-
loadScheduler() completeWith {
80+
loadScheduler()(system) completeWith {
8381
case Some(s) =>
8482
complete(
8583
HttpResponse(
@@ -113,7 +111,7 @@ trait SchedulerService
113111
}
114112
}
115113
} ~ get {
116-
loadScheduler() completeWith {
114+
loadScheduler()(system) completeWith {
117115
case Some(s) =>
118116
complete(
119117
HttpResponse(
@@ -136,7 +134,7 @@ trait SchedulerService
136134
}
137135

138136
private[this] def getScheduler(scheduler: Option[String]): Route = {
139-
loadScheduler(scheduler) completeWith {
137+
loadScheduler(scheduler)(system) completeWith {
140138
case Some(s) =>
141139
complete(
142140
HttpResponse(
@@ -148,13 +146,3 @@ trait SchedulerService
148146
}
149147
}
150148
}
151-
152-
object SchedulerService {
153-
def apply(_system: ActorSystem[_], _sessionService: SessionService): SchedulerService = {
154-
new SchedulerService {
155-
override def sessionService: SessionService = _sessionService
156-
override implicit def system: ActorSystem[_] = _system
157-
lazy val log: Logger = LoggerFactory getLogger getClass.getName
158-
}
159-
}
160-
}

core/src/main/scala/app/softnetwork/scheduler/service/SchedulerServiceEndpoints.scala

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import app.softnetwork.scheduler.config.SchedulerSettings
66
import app.softnetwork.scheduler.handlers.{SchedulerDao, SchedulerHandler}
77
import app.softnetwork.scheduler.message.{SchedulerNotFound, _}
88
import app.softnetwork.scheduler.model._
9-
import app.softnetwork.session.service.{ServiceWithSessionEndpoints, SessionEndpoints}
10-
import org.slf4j.{Logger, LoggerFactory}
9+
import app.softnetwork.session.config.Settings
10+
import app.softnetwork.session.service.{ServiceWithSessionEndpoints, SessionMaterials}
11+
import com.softwaremill.session.SessionConfig
1112
import org.softnetwork.session.model.Session
1213
import sttp.capabilities
1314
import sttp.capabilities.akka.AkkaStreams
@@ -22,10 +23,14 @@ import scala.language.implicitConversions
2223
trait SchedulerServiceEndpoints
2324
extends ServiceWithSessionEndpoints[SchedulerCommand, SchedulerCommandResult]
2425
with SchedulerDao
25-
with SchedulerHandler {
26+
with SchedulerHandler { _: SessionMaterials =>
2627

2728
import app.softnetwork.serialization._
2829

30+
implicit def sessionConfig: SessionConfig = Settings.Session.DefaultSessionConfig
31+
32+
override implicit def ts: ActorSystem[_] = system
33+
2934
def secureEndpoint: PartialServerEndpointWithSecurityOutput[
3035
(Seq[Option[String]], Option[String], Method, Option[String]),
3136
Session,
@@ -90,7 +95,7 @@ trait SchedulerServiceEndpoints
9095
rootSchedulesEndpoint.get
9196
.out(jsonBody[Seq[ScheduleView]].description("Schedules loaded"))
9297
.serverLogic { _ => _ =>
93-
loadScheduler().map {
98+
loadScheduler()(system).map {
9499
case Some(scheduler) =>
95100
Right(scheduler.schedules.map(_.view))
96101
case _ => Left(resultToApiError(SchedulerNotFound))
@@ -136,7 +141,7 @@ trait SchedulerServiceEndpoints
136141
rootCronTabsEndpoint.get
137142
.out(jsonBody[Seq[CronTab]].description("Cron tabs loaded"))
138143
.serverLogic { _ => _ =>
139-
loadScheduler().map {
144+
loadScheduler()(system).map {
140145
case Some(scheduler) => Right(scheduler.cronTabs)
141146
case _ => Left(resultToApiError(SchedulerNotFound))
142147
}
@@ -152,7 +157,7 @@ trait SchedulerServiceEndpoints
152157
case Nil => None
153158
case _ => Some(paths.head)
154159
}
155-
loadScheduler(id).map {
160+
loadScheduler(id)(system).map {
156161
case Some(scheduler) => Right(scheduler)
157162
case _ => Left(resultToApiError(SchedulerNotFound))
158163
}
@@ -170,14 +175,3 @@ trait SchedulerServiceEndpoints
170175
)
171176

172177
}
173-
174-
object SchedulerServiceEndpoints {
175-
def apply(
176-
_system: ActorSystem[_],
177-
_sessionEndpoints: SessionEndpoints
178-
): SchedulerServiceEndpoints = new SchedulerServiceEndpoints {
179-
override implicit def system: ActorSystem[_] = _system
180-
lazy val log: Logger = LoggerFactory getLogger getClass.getName
181-
override def sessionEndpoints: SessionEndpoints = _sessionEndpoints
182-
}
183-
}

project/Versions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object Versions {
22

3-
val genericPersistence = "0.4.1"
3+
val genericPersistence = "0.5.0"
44

55
val scalatest = "3.2.16"
66
}

testkit/src/main/scala/app/softnetwork/scheduler/scalatest/SchedulerEndpointsTestKit.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ package app.softnetwork.scheduler.scalatest
33
import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.Endpoint
55
import app.softnetwork.persistence.schema.SchemaProvider
6-
import app.softnetwork.scheduler.launch.{SchedulerEndpoints, SchedulerGuardian}
6+
import app.softnetwork.scheduler.launch.SchedulerEndpoints
77
import app.softnetwork.session.CsrfCheck
8-
import app.softnetwork.session.scalatest.SessionEndpointsRoutes
8+
import app.softnetwork.session.scalatest.{SessionEndpointsRoutes, SessionTestKit}
9+
import app.softnetwork.session.service.SessionMaterials
910

1011
trait SchedulerEndpointsTestKit extends SchedulerEndpoints with SessionEndpointsRoutes {
11-
_: SchedulerGuardian with SchemaProvider with CsrfCheck =>
12+
_: SessionTestKit
13+
with SchedulerTestKit
14+
with SchemaProvider
15+
with SessionMaterials
16+
with CsrfCheck =>
1217

1318
override def endpoints: ActorSystem[_] => List[Endpoint] =
1419
system =>

testkit/src/main/scala/app/softnetwork/scheduler/scalatest/SchedulerRouteTestKit.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import app.softnetwork.scheduler.message._
99
import app.softnetwork.scheduler.model.{CronTab, Schedule, Scheduler}
1010
import app.softnetwork.serialization._
1111
import app.softnetwork.session.scalatest.SessionTestKit
12+
import app.softnetwork.session.service.SessionMaterials
1213
import org.scalatest.Suite
1314

1415
trait SchedulerRouteTestKit
1516
extends SessionTestKit
1617
with SchedulerTestKit
1718
with SchedulerGrpcServices {
18-
_: Suite with ApiRoutes =>
19+
_: Suite with ApiRoutes with SessionMaterials =>
1920

2021
override def beforeAll(): Unit = {
2122
super.beforeAll()

0 commit comments

Comments
 (0)