Skip to content

Commit cb8c20e

Browse files
authored
#1712 Add a vuu server ID to login success message (#1714)
* #1712 Add a vuu server ID to login success message * #1712 Add a vuu server ID in vuu server * #1712 revert * #1712 fix test
1 parent db3c5c3 commit cb8c20e

File tree

8 files changed

+36
-26
lines changed

8 files changed

+36
-26
lines changed

example/main-java/src/main/java/org/finos/vuu/VuuExampleMain.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,12 @@
2929
* Example Java App using Vuu.
3030
*
3131
*/
32-
public class VuuExampleMain
33-
{
32+
public class VuuExampleMain {
3433
/*
3534
//to allow self signed certs
3635
chrome://flags/#allow-insecure-localhost
3736
*/
38-
public static void main( String[] args )
39-
{
37+
public static void main(String[] args) {
4038
final MetricsProvider metrics = new MetricsProviderImpl();
4139
final Clock clock = new DefaultClock();
4240
final LifecycleContainer lifecycle = new LifecycleContainer(clock);

vuu/src/main/scala/org/finos/vuu/core/VuuServer.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@ import org.finos.vuu.plugin.PluginRegistry
2020
import org.finos.vuu.provider.{JoinTableProvider, JoinTableProviderImpl, Provider, ProviderContainer}
2121
import org.finos.vuu.viewport.{InMemViewPortTreeCallable, InMemViewPortTreeWorkItem, ViewPort, ViewPortAction, ViewPortActionMixin, ViewPortContainer}
2222

23+
import java.util.UUID
2324
import java.util.concurrent.{Callable, FutureTask}
2425

2526
/**
2627
* Vuu Server
2728
*/
2829
class VuuServer(config: VuuServerConfig)(implicit lifecycle: LifecycleContainer, timeProvider: Clock, metricsProvider: MetricsProvider) extends LifecycleEnabled with StrictLogging with IVuuServer {
2930

31+
final val vuuServerId: String = UUID.randomUUID().toString
32+
3033
final val serializer: Serializer[String, MessageBody] = JsonVsSerializer
3134

3235
final val pluginRegistry: PluginRegistry = PluginRegistry()
@@ -58,7 +61,7 @@ class VuuServer(config: VuuServerConfig)(implicit lifecycle: LifecycleContainer,
5861

5962
final val serverApi = new CoreServerApiHandler(viewPortContainer, tableContainer, providerContainer)
6063

61-
final val factory = new ViewServerHandlerFactoryImpl(authenticator, tokenValidator, sessionContainer, serverApi, JsonVsSerializer, moduleContainer, flowControllerFactory)
64+
final val factory = new ViewServerHandlerFactoryImpl(authenticator, tokenValidator, sessionContainer, serverApi, JsonVsSerializer, moduleContainer, flowControllerFactory, vuuServerId)
6265

6366
//order of creation here is important
6467
final val server = new WebSocketServer(config.wsOptions, factory)

vuu/src/main/scala/org/finos/vuu/net/LoginTokenValidator.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ package org.finos.vuu.net
33
import java.util.concurrent.{ConcurrentHashMap, ConcurrentMap}
44

55
trait LoginTokenValidator {
6-
def login(msg: LoginRequest): Either[ViewServerMessage, String]
6+
def login(msg: LoginRequest, vuuServerId: String): ViewServerMessage
77
}
88

99
class AlwaysHappyLoginValidator extends LoginTokenValidator {
1010

11-
override def login(msg: LoginRequest): Either[ViewServerMessage, String] = {
12-
Left(JsonViewServerMessage("", "", msg.token, msg.user, LoginSuccess(msg.token)))
11+
override def login(msg: LoginRequest, vuuServerId: String): ViewServerMessage = {
12+
JsonViewServerMessage("", "", msg.token, msg.user, LoginSuccess(msg.token, vuuServerId))
1313
}
1414
}
1515

16-
class ServerUserPrincipal(val token: String, val userName: String){
16+
class ServerUserPrincipal(val token: String, val userName: String) {
1717
}
1818

1919
class LoggedInTokenValidator extends LoginTokenValidator {
@@ -24,11 +24,11 @@ class LoggedInTokenValidator extends LoginTokenValidator {
2424
tokenUserMap.put(token, userPrincipal)
2525
}
2626

27-
override def login(msg: LoginRequest): Either[ViewServerMessage, String] = {
28-
if(tokenUserMap.containsKey(msg.token)){
29-
Left(JsonViewServerMessage("", "", msg.token, msg.user, LoginSuccess(msg.token)))
30-
}else{
31-
Right("User token not found")
27+
override def login(msg: LoginRequest, vuuServerId: String): ViewServerMessage = {
28+
if (tokenUserMap.containsKey(msg.token)) {
29+
JsonViewServerMessage("", "", msg.token, msg.user, LoginSuccess(msg.token, vuuServerId))
30+
} else {
31+
JsonViewServerMessage("", "", msg.token, msg.user, LoginFailure(msg.token, "User token not found"))
3232
}
3333
}
3434
}

vuu/src/main/scala/org/finos/vuu/net/Messages.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ case class AuthenticateFailure(msg: String) extends MessageBody
4848

4949
case class LoginRequest(token: String, user: String) extends MessageBody
5050

51-
case class LoginSuccess(token: String) extends MessageBody
51+
case class LoginSuccess(token: String, vuuServerId: String) extends MessageBody
5252

5353
case class LoginFailure(token: String, errorMsg: String) extends MessageBody
5454

vuu/src/main/scala/org/finos/vuu/net/RequestProcessor.scala

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,34 @@ class RequestProcessor(authenticator: Authenticator,
2323
serializer: Serializer[String, MessageBody],
2424
moduleContainer: ModuleContainer,
2525
flowControllerFactory: FlowControllerFactory,
26+
vuuServerId: String
2627
)(implicit timeProvider: Clock) extends StrictLogging {
2728

2829
@volatile private var session: ClientSessionId = null
2930

3031
def handle(msg: ViewServerMessage, channel: Channel): Option[ViewServerMessage] = {
3132

32-
3333
msg.body match {
3434
case body: AuthenticateRequest =>
3535
authenticator.authenticate(body.username, body.password)
3636
case body: LoginRequest =>
37-
tokenValidator.login(body) match {
38-
case Left(accept) =>
39-
createSession(msg.requestId, body, clientSessionContainer, channel)
40-
case Right(errorMsg) =>
41-
handleMessageWithNoSession(errorMsg, channel)
37+
tokenValidator.login(body, vuuServerId).body match {
38+
case success: LoginSuccess =>
39+
createSession(msg.requestId, body, clientSessionContainer, channel, vuuServerId)
40+
case failure: LoginFailure =>
41+
handleMessageWithNoSession(failure.errorMsg, channel)
4242
None
4343
}
4444
case body => handleViewServerMessage(msg, channel)
4545
}
4646
}
4747

48-
protected def createSession(requestId: String, request: LoginRequest, clientSessionContainer: ClientSessionContainer, channel: Channel): Option[ViewServerMessage] = {
48+
protected def createSession(
49+
requestId: String,
50+
request: LoginRequest,
51+
clientSessionContainer: ClientSessionContainer,
52+
channel: Channel,
53+
vuuServerId: String): Option[ViewServerMessage] = {
4954

5055
val session = SessionId.oneNew()
5156
val user = request.user
@@ -58,7 +63,7 @@ class RequestProcessor(authenticator: Authenticator,
5863

5964
clientSessionContainer.register(id, handler)
6065

61-
Some(JsonViewServerMessage(requestId, session, request.token, request.user, LoginSuccess(request.token)))
66+
Some(JsonViewServerMessage(requestId, session, request.token, request.user, LoginSuccess(request.token, vuuServerId)))
6267
}
6368

6469

vuu/src/main/scala/org/finos/vuu/net/ViewServerHandler.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ class ViewServerHandlerFactoryImpl(authenticator: Authenticator,
1818
serverApi: ServerApi, jsonVsSerializer: Serializer[String, MessageBody],
1919
moduleContainer: ModuleContainer,
2020
flowControllerFactory: FlowControllerFactory,
21+
vuuServerId: String,
2122
)(implicit val timeProvider: Clock) extends ViewServerHandlerFactory {
2223
override def create(): ViewServerHandler = {
23-
val requestProcessor = new RequestProcessor(authenticator, tokenValidator, sessionContainer, serverApi, jsonVsSerializer, moduleContainer, flowControllerFactory)
24+
val requestProcessor = new RequestProcessor(authenticator, tokenValidator, sessionContainer, serverApi, jsonVsSerializer, moduleContainer, flowControllerFactory, vuuServerId)
2425
new ViewServerHandler(jsonVsSerializer, requestProcessor)
2526
}
2627
}

vuu/src/test/scala/org/finos/vuu/json/JsonVsSerializerTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class JsonVsSerializerTest extends AnyFeatureSpec with Matchers{
6464
roundTrip(AuthenticateRequest("chris", "foobar"))
6565
roundTrip(AuthenticateSuccess("christoken"))
6666
roundTrip(LoginRequest("AAA11122233", "chris"))
67-
roundTrip(LoginSuccess("AAA11122233"))
67+
roundTrip(LoginSuccess("AAA11122233", "vuuServerId"))
6868
roundTrip(HeartBeat(123l))
6969
roundTrip(HeartBeatResponse(123l))
7070
roundTrip(RpcUpdate(ViewPortTable("orderEntry", "CORE"), "Foo", Map("Foo" -> 123, "Bar" -> true, "Whizzle" -> "TANG", "HooHa" -> 344567l)))

vuu/src/test/scala/org/finos/vuu/test/impl/TestVuuServerImpl.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ import org.finos.vuu.test.{TestViewPort, TestVuuServer}
2323
import org.finos.vuu.util.OutboundRowPublishQueue
2424
import org.finos.vuu.viewport.{DefaultRange, ViewPort, ViewPortAction, ViewPortActionMixin, ViewPortContainer, ViewPortRange}
2525

26+
import java.util.UUID
2627
import scala.reflect.classTag
2728

2829
class TestVuuServerImpl(val modules: List[ViewServerModule])(implicit clock: Clock, lifecycle: LifecycleContainer, metrics: MetricsProvider) extends TestVuuServer with LifecycleEnabled with StrictLogging {
2930

31+
private final val vuuServerId: String = UUID.randomUUID().toString
32+
3033
private val serializer: Serializer[String, MessageBody] = JsonVsSerializer
3134

3235
JsonSubTypeRegistry.register(classOf[MessageBody], classOf[CoreJsonSerializationMixin])
@@ -58,7 +61,7 @@ class TestVuuServerImpl(val modules: List[ViewServerModule])(implicit clock: Clo
5861

5962
val serverApi = new CoreServerApiHandler(viewPortContainer, tableContainer, providerContainer)
6063

61-
val factory = new ViewServerHandlerFactoryImpl(authenticator, tokenValidator, sessionContainer, serverApi, JsonVsSerializer, moduleContainer, flowControllerFactory)
64+
val factory = new ViewServerHandlerFactoryImpl(authenticator, tokenValidator, sessionContainer, serverApi, JsonVsSerializer, moduleContainer, flowControllerFactory, vuuServerId)
6265

6366
val queue = new OutboundRowPublishQueue()
6467

0 commit comments

Comments
 (0)