diff --git a/keyserver/src/socket/tunnelbroker.js b/keyserver/src/socket/tunnelbroker.js --- a/keyserver/src/socket/tunnelbroker.js +++ b/keyserver/src/socket/tunnelbroker.js @@ -2,16 +2,19 @@ import WebSocket from 'ws'; +import { type TBKeyserverConnectionInitializationMessage } from 'lib/types/tunnelbroker-messages.js'; + function createTunnelbrokerWebsocket() { try { const tunnelbrokerSocket = new WebSocket('ws://localhost:51001'); tunnelbrokerSocket.on('open', () => { // TODO: Replace keyserver details with actual details - const message = { + const message: TBKeyserverConnectionInitializationMessage = { type: 'sessionRequest', accessToken: 'foobar', - deviceId: 'foo', + deviceID: 'foo', deviceType: 'keyserver', + userID: 'alice', }; console.log( 'Sending message to tunnelbroker: ' + JSON.stringify(message), diff --git a/lib/types/tunnelbroker-messages.js b/lib/types/tunnelbroker-messages.js new file mode 100644 --- /dev/null +++ b/lib/types/tunnelbroker-messages.js @@ -0,0 +1,30 @@ +// @flow + +type TBSharedConnectionInitializationMessage = { + +type: 'sessionRequest', + +deviceID: string, + +accessToken: string, + +deviceAppVersion?: string, + +userID: string, +}; + +export type TBKeyserverConnectionInitializationMessage = { + ...TBSharedConnectionInitializationMessage, + +deviceType: 'keyserver', +}; + +export type TBClientConnectionInitializationMessage = { + ...TBSharedConnectionInitializationMessage, + +deviceType: 'web' | 'mobile', +}; + +export type TBNotifyClientConnectionInitializationMessage = { + ...TBClientConnectionInitializationMessage, + +notifyToken: string, + +notifyPlatform: 'apns' | 'fcm' | 'web' | 'wns', +}; + +export type TBConnectionInitializationMessage = + | TBKeyserverConnectionInitializationMessage + | TBClientConnectionInitializationMessage + | TBNotifyClientConnectionInitializationMessage; diff --git a/services/commtest/tests/tunnelbroker_integration_test.rs b/services/commtest/tests/tunnelbroker_integration_test.rs --- a/services/commtest/tests/tunnelbroker_integration_test.rs +++ b/services/commtest/tests/tunnelbroker_integration_test.rs @@ -20,6 +20,7 @@ "type": "sessionRequest", "accessToken": "xkdeifjsld", "deviceId": "foo", + "userId": "alice", "deviceType": "keyserver" }"#; diff --git a/services/tunnelbroker/src/websockets/session.rs b/services/tunnelbroker/src/websockets/session.rs --- a/services/tunnelbroker/src/websockets/session.rs +++ b/services/tunnelbroker/src/websockets/session.rs @@ -19,7 +19,7 @@ message: &str, ) -> Result<(), serde_json::Error> { match serde_json::from_str::(message)? { - Messages::SessionRequest(session_info) => { + Messages::ConnectionInitializationMessage(session_info) => { ACTIVE_CONNECTIONS.insert(session_info.device_id, self.tx.clone()); } _ => { diff --git a/shared/tunnelbroker_messages/src/messages/mod.rs b/shared/tunnelbroker_messages/src/messages/mod.rs --- a/shared/tunnelbroker_messages/src/messages/mod.rs +++ b/shared/tunnelbroker_messages/src/messages/mod.rs @@ -11,5 +11,5 @@ #[serde(untagged)] pub enum Messages { RefreshKeysRequest(RefreshKeyRequest), - SessionRequest(SessionRequest), + ConnectionInitializationMessage(ConnectionInitializationMessage), } diff --git a/shared/tunnelbroker_messages/src/messages/session.rs b/shared/tunnelbroker_messages/src/messages/session.rs --- a/shared/tunnelbroker_messages/src/messages/session.rs +++ b/shared/tunnelbroker_messages/src/messages/session.rs @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize}; /// The workflow when estabilishing a tunnelbroker connection: -/// - Client sends SessionRequest +/// - Client sends ConnectionInitializationMessage /// - Tunnelbroker validates access_token with identity service /// - Tunnelbroker emits an AMQP message declaring that it has opened a new /// connection with a given device, so that the respective tunnelbroker @@ -31,8 +31,9 @@ /// service before continuing with the request. #[derive(Serialize, Deserialize)] #[serde(tag = "type", rename_all = "camelCase")] -pub struct SessionRequest { +pub struct ConnectionInitializationMessage { pub device_id: String, + pub user_id: String, pub access_token: String, pub notify_token: Option, pub device_type: DeviceTypes, @@ -41,7 +42,7 @@ } #[derive(Serialize, Deserialize)] -pub struct SessionResponse { +pub struct ConnectionInitializationResponse { pub session_id: String, } @@ -59,7 +60,8 @@ }"#; let request = - serde_json::from_str::(example_payload).unwrap(); + serde_json::from_str::(example_payload) + .unwrap(); assert_eq!(request.device_id, "foo"); assert_eq!(request.access_token, "xkdeifjsld"); assert_eq!(request.device_os, None);