From b6edefbe4eca20ba21afbe72fe6ed5cdf1fd3221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 28 Mar 2021 18:35:01 +0200 Subject: [PATCH] Allow loading https maps from http protocol In a development environment, we often run in HTTP. The problem is that WorkAdventure will attempt to load maps using the HTTP protocol (even if the map is on a remote server that is available only in HTTPS). This commit adds a "fallback". If we are in HTTP (so in a development environment) and if the map fails to load correctly, we will try again, but in HTTPS. This allows development environment to load maps hosted on a HTTPS enabled server easily. --- front/src/Phaser/Game/GameScene.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 6b50109b..c2980946 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -190,6 +190,15 @@ export class GameScene extends ResizableScene implements CenterListener { this.load.image(openChatIconName, 'resources/objects/talk.png'); this.load.on(FILE_LOAD_ERROR, (file: {src: string}) => { + // If we happen to be in HTTP and we are trying to load a URL in HTTPS only... (this happens only in dev environments) + if (window.location.protocol === 'http:' && file.src === this.MapUrlFile && file.src.startsWith('http:')) { + this.MapUrlFile = this.MapUrlFile.replace('http://', 'https://'); + this.load.tilemapTiledJSON(this.MapUrlFile, this.MapUrlFile); + this.load.on('filecomplete-tilemapJSON-'+this.MapUrlFile, (key: string, type: string, data: unknown) => { + this.onMapLoad(data); + }); + return; + } this.scene.start(ErrorSceneName, { title: 'Network error', subTitle: 'An error occurred while loading resource:', @@ -306,7 +315,7 @@ export class GameScene extends ResizableScene implements CenterListener { gameManager.gameSceneIsCreated(this); urlManager.pushRoomIdToUrl(this.room); this.startLayerName = urlManager.getStartLayerNameFromUrl(); - + this.messageSubscription = worldFullMessageStream.stream.subscribe((message) => this.showWorldFullError()) const playerName = gameManager.getPlayerName(); @@ -582,7 +591,7 @@ export class GameScene extends ResizableScene implements CenterListener { contextRed.stroke(); this.circleRedTexture.refresh(); } - + private safeParseJSONstring(jsonString: string|undefined, propertyName: string) { try {