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;