chore(sync): Sync engine now retrieves auth token

It's now it's responsability to get the authentication token from
the http server and pass it to the websocket server, it will make it
possible to redo the roundtrip when getting disconnected.
This commit is contained in:
Alexis Métaireau 2024-05-15 18:56:54 +02:00
parent 82ede035d6
commit bc1dec245b
2 changed files with 11 additions and 14 deletions

View file

@ -5,7 +5,6 @@ export class SyncEngine {
constructor(map) { constructor(map) {
this.map = map this.map = map
this.receiver = new MessagesDispatcher(this.map) this.receiver = new MessagesDispatcher(this.map)
this._initialize() this._initialize()
} }
_initialize() { _initialize() {
@ -15,6 +14,13 @@ export class SyncEngine {
this.upsert = this.update = this.delete = noop this.upsert = this.update = this.delete = noop
} }
async authenticate(tokenURI, webSocketURI, server) {
const [response, _, error] = await server.get(tokenURI)
if (!error) {
this.start(webSocketURI, response.token)
}
}
start(webSocketURI, authToken) { start(webSocketURI, authToken) {
this.transport = new WebSocketTransport(webSocketURI, authToken, this.receiver) this.transport = new WebSocketTransport(webSocketURI, authToken, this.receiver)
this.sender = new MessagesSender(this.transport) this.sender = new MessagesSender(this.transport)

View file

@ -260,22 +260,13 @@ U.Map = L.Map.extend({
initSyncEngine: async function () { initSyncEngine: async function () {
if (this.options.websocketEnabled == false) return if (this.options.websocketEnabled == false) return
console.log('this.options.syncEnabled', this.options.syncEnabled)
if (this.options.syncEnabled != true) { if (this.options.syncEnabled != true) {
this.sync.stop() this.sync.stop()
} else { } else {
// FIXME: Do this directly in the sync engine, which should check if the engine const ws_token_uri = this.urls.get('map_websocket_auth_token', {
// is already started or not. map_id: this.options.umap_id,
})
// Get the authentication token from the server await this.sync.authenticate(ws_token_uri, this.options.websocketURI, this.server)
// And pass it to the sync engine.
// FIXME: use `this.urls`
const [response, _, error] = await this.server.get(
`/map/${this.options.umap_id}/ws-token/`
)
if (!error) {
this.sync.start(this.options.websocketURI, response.token)
}
} }
}, },