From ce93e5bbaaa87268fc10b1b7d949fe826299c1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 14 Oct 2020 10:37:00 +0200 Subject: [PATCH] Fixing the way rights are sent to the admin (now sending organization/world/room) --- back/src/Model/RoomIdentifier.ts | 19 +++++++++++++++---- back/src/Services/AdminApi.ts | 3 +-- front/src/Connexion/Room.ts | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/back/src/Model/RoomIdentifier.ts b/back/src/Model/RoomIdentifier.ts index 2cba16fd..d1516264 100644 --- a/back/src/Model/RoomIdentifier.ts +++ b/back/src/Model/RoomIdentifier.ts @@ -1,14 +1,25 @@ export class RoomIdentifier { - public anonymous: boolean; - public id:string + public readonly anonymous: boolean; + public readonly id:string + public readonly organizationSlug: string|undefined; + public readonly worldSlug: string|undefined; + public readonly roomSlug: string|undefined; constructor(roomID: string) { if (roomID.startsWith('_/')) { this.anonymous = true; } else if(roomID.startsWith('@/')) { this.anonymous = false; + + const match = /@\/([^/]+)\/([^/]+)\/(.+)/.exec(roomID); + if (!match) { + throw new Error('Could not extract info from "'+roomID+'"'); + } + this.organizationSlug = match[1]; + this.worldSlug = match[2]; + this.roomSlug = match[3]; } else { throw new Error('Incorrect room ID: '+roomID); } - this.id = roomID; //todo: extract more data from the id (like room slug, organization name, etc); + this.id = roomID; } -} \ No newline at end of file +} diff --git a/back/src/Services/AdminApi.ts b/back/src/Services/AdminApi.ts index 9e64296c..0039dc9c 100644 --- a/back/src/Services/AdminApi.ts +++ b/back/src/Services/AdminApi.ts @@ -51,9 +51,8 @@ class AdminApi { return Promise.reject('No admin backoffice set!'); } try { - //todo: send more specialized data instead of the whole id const res = await Axios.get(ADMIN_API_URL+'/api/member/is-granted-access', - { headers: {"Authorization" : `${ADMIN_API_TOKEN}`}, params: {memberId, roomIdentifier: roomIdentifier.id} } + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`}, params: {memberId, organizationSlug: roomIdentifier.organizationSlug, worldSlug: roomIdentifier.worldSlug, roomSlug: roomIdentifier.roomSlug} } ) return !!res.data; } catch (e) { diff --git a/front/src/Connexion/Room.ts b/front/src/Connexion/Room.ts index 01509aa3..308ea5a2 100644 --- a/front/src/Connexion/Room.ts +++ b/front/src/Connexion/Room.ts @@ -66,7 +66,7 @@ export class Room { this.instance = match[1]; return this.instance; } else { - const match = /_\/([^/]+)\/([^/]+)\/.+/.exec(this.id); + const match = /@\/([^/]+)\/([^/]+)\/.+/.exec(this.id); if (!match) throw new Error('Could not extract instance from "'+this.id+'"'); this.instance = match[1]+'/'+match[2]; return this.instance;