Skip to content

Commit 6c6086b

Browse files
committed
update session test kit, jwt claims encoder and decorator
1 parent f475470 commit 6c6086b

26 files changed

+182
-143
lines changed

build.sbt

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

99
name := "generic-persistence-api"
1010

11-
ThisBuild / version := "0.6.0"
11+
ThisBuild / version := "0.6.1"
1212

1313
ThisBuild / scalaVersion := "2.12.18"
1414

session/common/src/main/scala/app/softnetwork/session/model/JwtClaimsDecorator.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,8 @@ trait JwtClaimsDecorator extends SessionDataDecorator[JwtClaims] with JwtClaimsK
3131
SessionConfig.default(clientSecret)
3232
)
3333
}
34+
35+
lazy val issuer: Option[String] = iss.orElse(clientId)
36+
37+
lazy val subject: Option[String] = sub.orElse(get(idKey))
3438
}

session/common/src/main/scala/app/softnetwork/session/model/JwtClaimsEncoder.scala

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,28 @@ trait JwtClaimsEncoder extends SessionEncoder[JwtClaims] with Completion {
1919
def sessionEncoder = new JwtSessionEncoder[JwtClaims]
2020

2121
override def encode(t: JwtClaims, nowMillis: Long, config: SessionConfig): String = {
22+
val updatedJwtClaims = t.copy(
23+
iss = t.issuer.orElse(config.jwt.issuer),
24+
sub = t.subject.orElse(config.jwt.subject),
25+
aud = t.aud.orElse(config.jwt.audience)
26+
)
2227
val jwt = config.jwt.copy(
23-
issuer = t.iss.orElse(config.jwt.issuer),
24-
subject = t.sub.orElse(config.jwt.subject),
25-
audience = t.aud.orElse(config.jwt.audience)
28+
issuer = updatedJwtClaims.iss,
29+
subject = updatedJwtClaims.sub,
30+
audience = updatedJwtClaims.aud
2631
)
27-
(t.iss match {
32+
(updatedJwtClaims.iss match {
2833
case Some(iss) =>
2934
(loadApiKey(iss) complete ()).toOption.flatten
3035
case _ => None
3136
}) match {
3237
case Some(apiKey) if apiKey.clientSecret.isDefined =>
3338
sessionEncoder.encode(
34-
t,
39+
updatedJwtClaims,
3540
nowMillis,
3641
config.copy(jwt = jwt, serverSecret = apiKey.clientSecret.get)
3742
)
38-
case _ => sessionEncoder.encode(t, nowMillis, config.copy(jwt = jwt))
43+
case _ => sessionEncoder.encode(updatedJwtClaims, nowMillis, config.copy(jwt = jwt))
3944
}
4045
}
4146

session/core/src/main/scala/app/softnetwork/session/service/ServiceWithSessionDirectives.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ import app.softnetwork.api.server.ApiRoute
44
import app.softnetwork.persistence.message.{Command, CommandResult}
55
import app.softnetwork.persistence.service.Service
66
import app.softnetwork.persistence.typed.scaladsl.Patterns
7-
import app.softnetwork.session.model.SessionData
7+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
88

9-
trait ServiceWithSessionDirectives[C <: Command, R <: CommandResult, T <: SessionData]
10-
extends Service[C, R]
9+
trait ServiceWithSessionDirectives[
10+
C <: Command,
11+
R <: CommandResult,
12+
T <: SessionData with SessionDataDecorator[T]
13+
] extends Service[C, R]
1114
with ApiRoute
1215
with SessionService[T] { _: Patterns[C, R] with SessionMaterials[T] => }

session/core/src/main/scala/app/softnetwork/session/service/ServiceWithSessionEndpoints.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package app.softnetwork.session.service
33
import app.softnetwork.api.server.ServiceEndpoints
44
import app.softnetwork.persistence.message.{Command, CommandResult}
55
import app.softnetwork.persistence.typed.scaladsl.Patterns
6-
import app.softnetwork.session.model.SessionData
6+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
77

8-
trait ServiceWithSessionEndpoints[C <: Command, R <: CommandResult, T <: SessionData]
9-
extends ServiceEndpoints[C, R]
8+
trait ServiceWithSessionEndpoints[
9+
C <: Command,
10+
R <: CommandResult,
11+
T <: SessionData with SessionDataDecorator[T]
12+
] extends ServiceEndpoints[C, R]
1013
with SessionEndpoints[T] { _: Patterns[C, R] with SessionMaterials[T] => }

session/core/src/main/scala/app/softnetwork/session/service/SessionEndpoints.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package app.softnetwork.session.service
22

3-
import app.softnetwork.session.model.SessionData
3+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
44
import app.softnetwork.session.{
55
TapirCsrfCheckMode,
66
TapirCsrfOptions,
@@ -12,7 +12,8 @@ import org.softnetwork.session.model.Session
1212

1313
import scala.language.implicitConversions
1414

15-
trait SessionEndpoints[T <: SessionData] extends TapirEndpoints { _: SessionMaterials[T] =>
15+
trait SessionEndpoints[T <: SessionData with SessionDataDecorator[T]] extends TapirEndpoints {
16+
_: SessionMaterials[T] =>
1617

1718
import app.softnetwork.session.TapirSessionOptions._
1819

session/core/src/main/scala/app/softnetwork/session/service/SessionMaterials.scala

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
package app.softnetwork.session.service
22

33
import akka.actor.typed.ActorSystem
4-
import app.softnetwork.session.model.{SessionData, SessionDataCompanion, SessionManagers}
4+
import app.softnetwork.session.model.{
5+
SessionData,
6+
SessionDataCompanion,
7+
SessionDataDecorator,
8+
SessionManagers
9+
}
510
import com.softwaremill.session.{RefreshTokenStorage, SessionConfig, SessionManager}
611
import org.softnetwork.session.model.Session
712

813
import scala.concurrent.ExecutionContext
914
import scala.language.reflectiveCalls
1015

11-
trait SessionMaterials[T <: SessionData] {
16+
trait SessionMaterials[T <: SessionData with SessionDataDecorator[T]] {
1217

1318
implicit def manager(implicit
1419
sessionConfig: SessionConfig,
@@ -27,7 +32,8 @@ trait SessionMaterials[T <: SessionData] {
2732

2833
}
2934

30-
trait BasicSessionMaterials[T <: SessionData] extends SessionMaterials[T] {
35+
trait BasicSessionMaterials[T <: SessionData with SessionDataDecorator[T]]
36+
extends SessionMaterials[T] {
3137

3238
override implicit def manager(implicit
3339
sessionConfig: SessionConfig,
@@ -36,7 +42,8 @@ trait BasicSessionMaterials[T <: SessionData] extends SessionMaterials[T] {
3642
SessionManagers.basic
3743
}
3844

39-
trait JwtSessionMaterials[T <: SessionData] extends SessionMaterials[T] {
45+
trait JwtSessionMaterials[T <: SessionData with SessionDataDecorator[T]]
46+
extends SessionMaterials[T] {
4047

4148
override implicit def manager(implicit
4249
sessionConfig: SessionConfig,

session/core/src/main/scala/app/softnetwork/session/service/SessionService.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package app.softnetwork.session.service
22

3-
import app.softnetwork.session.model.SessionData
3+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
44
import com.softwaremill.session.{
55
CsrfCheckMode,
66
CsrfOptions,
@@ -14,7 +14,8 @@ import org.softnetwork.session.model.Session
1414

1515
/** Created by smanciot on 05/07/2018.
1616
*/
17-
trait SessionService[T <: SessionData] extends SessionDirectives { _: SessionMaterials[T] =>
17+
trait SessionService[T <: SessionData with SessionDataDecorator[T]] extends SessionDirectives {
18+
_: SessionMaterials[T] =>
1819

1920
import com.softwaremill.session.SessionOptions._
2021

session/testkit/src/main/scala/app/softnetwork/session/scalatest/CookieSessionTestKit.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package app.softnetwork.session.scalatest
22

33
import app.softnetwork.api.server.ApiRoutes
4-
import app.softnetwork.session.model.SessionData
4+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
55
import app.softnetwork.session.service.SessionMaterials
66
import com.softwaremill.session.CookieConfig
77
import org.scalatest.Suite
88

9-
trait CookieSessionTestKit[T <: SessionData] extends SessionTestKit[T] {
9+
trait CookieSessionTestKit[T <: SessionData with SessionDataDecorator[T]]
10+
extends SessionTestKit[T] {
1011
_: Suite with ApiRoutes with SessionMaterials[T] =>
1112

1213
def cookieConfig: CookieConfig
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package app.softnetwork.session.scalatest
22

3-
case class CreateSession(id: String, profile: Option[String] = None, admin: Option[Boolean] = None)
3+
case class CreateSession(data: Map[String, String] = Map.empty)

0 commit comments

Comments
 (0)