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) {
this.map = map
this.receiver = new MessagesDispatcher(this.map)
this._initialize()
}
_initialize() {
@ -15,6 +14,13 @@ export class SyncEngine {
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) {
this.transport = new WebSocketTransport(webSocketURI, authToken, this.receiver)
this.sender = new MessagesSender(this.transport)

View file

@ -260,22 +260,13 @@ U.Map = L.Map.extend({
initSyncEngine: async function () {
if (this.options.websocketEnabled == false) return
console.log('this.options.syncEnabled', this.options.syncEnabled)
if (this.options.syncEnabled != true) {
this.sync.stop()
} else {
// FIXME: Do this directly in the sync engine, which should check if the engine
// is already started or not.
// Get the authentication token from the 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)
}
const ws_token_uri = this.urls.get('map_websocket_auth_token', {
map_id: this.options.umap_id,
})
await this.sync.authenticate(ws_token_uri, this.options.websocketURI, this.server)
}
},