From 5466bd1d6846877b05e8e99d000793bedfd3e9e2 Mon Sep 17 00:00:00 2001 From: CEC Date: Wed, 20 Apr 2022 16:30:16 +0200 Subject: [PATCH] Fix feedback on PR Change locale as parameter on adminInterface --- .../src/Controller/AuthenticateController.ts | 9 ++++--- pusher/src/Controller/IoSocketController.ts | 3 +-- pusher/src/Controller/MapController.ts | 4 +--- pusher/src/Services/AdminApi.ts | 24 +++++++++---------- pusher/src/Services/AdminInterface.ts | 15 ++++++++---- pusher/src/Services/LocalAdmin.ts | 13 +++++++++- pusher/src/Services/SocketManager.ts | 5 ++-- 7 files changed, 43 insertions(+), 30 deletions(-) diff --git a/pusher/src/Controller/AuthenticateController.ts b/pusher/src/Controller/AuthenticateController.ts index d959d2ea..659d4f1f 100644 --- a/pusher/src/Controller/AuthenticateController.ts +++ b/pusher/src/Controller/AuthenticateController.ts @@ -169,6 +169,7 @@ export class AuthenticateController extends BaseHttpController { //Get user data from Admin Back Office //This is very important to create User Local in LocalStorage in WorkAdventure const resUserData = await adminService.fetchMemberDataByUuid( + req.header("accept-language"), authTokenData.identifier, playUri as string, IPAddress, @@ -224,7 +225,7 @@ export class AuthenticateController extends BaseHttpController { //Get user data from Admin Back Office //This is very important to create User Local in LocalStorage in WorkAdventure - const data = await adminService.fetchMemberDataByUuid(email, playUri as string, IPAddress, []); + const data = await adminService.fetchMemberDataByUuid(req.header("accept-language"), email, playUri as string, IPAddress, []); return res.json({ ...data, authToken, username: userInfo?.username, locale: userInfo?.locale }); } catch (e) { @@ -321,15 +322,13 @@ export class AuthenticateController extends BaseHttpController { (async () => { const param = await req.json(); - adminService.locale = req.header("accept-language"); - //todo: what to do if the organizationMemberToken is already used? const organizationMemberToken: string | null = param.organizationMemberToken; const playUri: string | null = param.playUri; try { if (typeof organizationMemberToken != "string") throw new Error("No organization token"); - const data = await adminService.fetchMemberDataByToken(organizationMemberToken, playUri); + const data = await adminService.fetchMemberDataByToken(req.header("accept-language"), organizationMemberToken, playUri); const userUuid = data.userUuid; const email = data.email; const roomUrl = data.roomUrl; @@ -508,7 +507,7 @@ export class AuthenticateController extends BaseHttpController { userRoomToken: undefined, }; try { - data = await adminService.fetchMemberDataByUuid(email, playUri, IPAddress, []); + data = await adminService.fetchMemberDataByUuid("en", email, playUri, IPAddress, []); } catch (err) { console.error("openIDCallback => fetchMemberDataByUuid", err); } diff --git a/pusher/src/Controller/IoSocketController.ts b/pusher/src/Controller/IoSocketController.ts index 8a1c3ad2..2dd078c4 100644 --- a/pusher/src/Controller/IoSocketController.ts +++ b/pusher/src/Controller/IoSocketController.ts @@ -246,8 +246,6 @@ export class IoSocketController { const websocketExtensions = req.getHeader("sec-websocket-extensions"); const IPAddress = req.getHeader("x-forwarded-for"); - adminService.locale = req.getHeader("accept-language"); - const roomId = query.roomId; try { if (typeof roomId !== "string") { @@ -316,6 +314,7 @@ export class IoSocketController { try { try { userData = await adminService.fetchMemberDataByUuid( + req.getHeader("accept-language"), userIdentifier, roomId, IPAddress, diff --git a/pusher/src/Controller/MapController.ts b/pusher/src/Controller/MapController.ts index cefae661..31ed0203 100644 --- a/pusher/src/Controller/MapController.ts +++ b/pusher/src/Controller/MapController.ts @@ -104,12 +104,10 @@ export class MapController extends BaseHttpController { return; } - adminService.locale = req.header("accept-language"); - (async () => { try { const mapDetails = isMapDetailsData.parse( - await adminService.fetchMapDetails(query.playUri as string, query.authToken as string) + await adminService.fetchMapDetails(req.header("accept-language"), query.playUri as string, query.authToken as string) ); if (DISABLE_ANONYMOUS) mapDetails.authenticationMandatory = true; diff --git a/pusher/src/Services/AdminApi.ts b/pusher/src/Services/AdminApi.ts index 22e02d0a..01b9ff98 100644 --- a/pusher/src/Services/AdminApi.ts +++ b/pusher/src/Services/AdminApi.ts @@ -29,9 +29,7 @@ export const isFetchMemberDataByUuidResponse = z.object({ export type FetchMemberDataByUuidResponse = z.infer; class AdminApi implements AdminInterface { - locale: string = "en"; - - async fetchMapDetails(playUri: string, authToken?: string): Promise { + async fetchMapDetails(locale: string, playUri: string, authToken?: string): Promise { let userId: string | undefined = undefined; if (authToken != undefined) { let authTokenData: AuthTokenData; @@ -66,7 +64,7 @@ class AdminApi implements AdminInterface { }; const res = await Axios.get>(ADMIN_API_URL + "/api/map", { - headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale }, + headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale }, params, }); @@ -89,6 +87,7 @@ class AdminApi implements AdminInterface { } async fetchMemberDataByUuid( + locale: string, userIdentifier: string, playUri: string, ipAddress: string, @@ -101,7 +100,7 @@ class AdminApi implements AdminInterface { ipAddress, characterLayers, }, - headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale }, + headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale }, paramsSerializer: (p) => { return qs.stringify(p, { arrayFormat: "brackets" }); }, @@ -120,11 +119,11 @@ class AdminApi implements AdminInterface { ); } - async fetchMemberDataByToken(organizationMemberToken: string, playUri: string | null): Promise { + async fetchMemberDataByToken(locale: string, organizationMemberToken: string, playUri: string | null): Promise { //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. const res = await Axios.get(ADMIN_API_URL + "/api/login-url/" + organizationMemberToken, { params: { playUri }, - headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale }, + headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale }, }); const adminApiData = isAdminApiData.safeParse(res.data); @@ -139,6 +138,7 @@ class AdminApi implements AdminInterface { } reportPlayer( + locale: string, reportedUserUuid: string, reportedUserComment: string, reporterUserUuid: string, @@ -153,12 +153,12 @@ class AdminApi implements AdminInterface { reportWorldSlug, }, { - headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale }, + headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale }, } ); } - async verifyBanUser(userUuid: string, ipAddress: string, roomUrl: string): Promise { + async verifyBanUser(locale: string, userUuid: string, ipAddress: string, roomUrl: string): Promise { //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. return Axios.get( ADMIN_API_URL + @@ -169,15 +169,15 @@ class AdminApi implements AdminInterface { encodeURIComponent(userUuid) + "&roomUrl=" + encodeURIComponent(roomUrl), - { headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale } } + { headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale } } ).then((data) => { return data.data; }); } - async getUrlRoomsFromSameWorld(roomUrl: string): Promise { + async getUrlRoomsFromSameWorld(locale: string, roomUrl: string): Promise { return Axios.get(ADMIN_API_URL + "/api/room/sameWorld" + "?roomUrl=" + encodeURIComponent(roomUrl), { - headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": this.locale }, + headers: { Authorization: `${ADMIN_API_TOKEN}`, "Accept-Language": locale }, }).then((data) => { return data.data; }); diff --git a/pusher/src/Services/AdminInterface.ts b/pusher/src/Services/AdminInterface.ts index 538c49bb..ccb664e1 100644 --- a/pusher/src/Services/AdminInterface.ts +++ b/pusher/src/Services/AdminInterface.ts @@ -4,7 +4,6 @@ import { RoomRedirect } from "../Messages/JsonMessages/RoomRedirect"; import { AdminApiData } from "../Messages/JsonMessages/AdminApiData"; export interface AdminInterface { - locale: string; /** * @var playUri: is url of the room @@ -14,6 +13,7 @@ export interface AdminInterface { * @return MapDetailsData|RoomRedirect */ fetchMemberDataByUuid( + locale: string, userIdentifier: string, playUri: string, ipAddress: string, @@ -25,22 +25,25 @@ export interface AdminInterface { * @var userId: can to be undefined or email or uuid * @return MapDetailsData|RoomRedirect */ - fetchMapDetails(playUri: string, authToken?: string): Promise; + fetchMapDetails(locale: string, playUri: string, authToken?: string): Promise; /** + * @param locale * @param organizationMemberToken * @param playUri * @return AdminApiData */ - fetchMemberDataByToken(organizationMemberToken: string, playUri: string | null): Promise; + fetchMemberDataByToken(locale: string, organizationMemberToken: string, playUri: string | null): Promise; /** + * @param locale * @param reportedUserUuid * @param reportedUserComment * @param reporterUserUuid * @param reportWorldSlug */ reportPlayer( + locale: string, reportedUserUuid: string, reportedUserComment: string, reporterUserUuid: string, @@ -48,18 +51,20 @@ export interface AdminInterface { ): Promise; /** + * @param locale * @param userUuid * @param ipAddress * @param roomUrl * @return AdminBannedData */ - verifyBanUser(userUuid: string, ipAddress: string, roomUrl: string): Promise; + verifyBanUser(locale: string, userUuid: string, ipAddress: string, roomUrl: string): Promise; /** + * @param locale * @param roomUrl * @return string[] */ - getUrlRoomsFromSameWorld(roomUrl: string): Promise; + getUrlRoomsFromSameWorld(locale: string, roomUrl: string): Promise; /** * @param accessToken diff --git a/pusher/src/Services/LocalAdmin.ts b/pusher/src/Services/LocalAdmin.ts index 7f43f568..a92d292a 100644 --- a/pusher/src/Services/LocalAdmin.ts +++ b/pusher/src/Services/LocalAdmin.ts @@ -10,9 +10,10 @@ import { AdminApiData } from "../Messages/JsonMessages/AdminApiData"; * A local class mocking a real admin if no admin is configured. */ class LocalAdmin implements AdminInterface { - locale: string = "en"; fetchMemberDataByUuid( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, userIdentifier: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars playUri: string, @@ -33,6 +34,8 @@ class LocalAdmin implements AdminInterface { } fetchMapDetails( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, playUri: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars authToken?: string @@ -61,6 +64,8 @@ class LocalAdmin implements AdminInterface { } async fetchMemberDataByToken( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars organizationMemberToken: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -70,6 +75,8 @@ class LocalAdmin implements AdminInterface { } reportPlayer( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars reportedUserUuid: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -83,6 +90,8 @@ class LocalAdmin implements AdminInterface { } async verifyBanUser( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars userUuid: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -94,6 +103,8 @@ class LocalAdmin implements AdminInterface { } async getUrlRoomsFromSameWorld( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + locale: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars roomUrl: string ): Promise { diff --git a/pusher/src/Services/SocketManager.ts b/pusher/src/Services/SocketManager.ts index 57e1a094..33b00e26 100644 --- a/pusher/src/Services/SocketManager.ts +++ b/pusher/src/Services/SocketManager.ts @@ -360,6 +360,7 @@ export class SocketManager implements ZoneEventListener { async handleReportMessage(client: ExSocketInterface, reportPlayerMessage: ReportPlayerMessage) { try { await adminService.reportPlayer( + "en", reportPlayerMessage.getReporteduseruuid(), reportPlayerMessage.getReportcomment(), client.userUuid, @@ -445,7 +446,7 @@ export class SocketManager implements ZoneEventListener { } public async updateRoomWithAdminData(room: PusherRoom): Promise { - const data = await adminService.fetchMapDetails(room.roomUrl); + const data = await adminService.fetchMapDetails("en", room.roomUrl); const mapDetailsData = isMapDetailsData.safeParse(data); if (mapDetailsData.success) { @@ -696,7 +697,7 @@ export class SocketManager implements ZoneEventListener { let tabUrlRooms: string[]; if (playGlobalMessageEvent.getBroadcasttoworld()) { - tabUrlRooms = await adminService.getUrlRoomsFromSameWorld(clientRoomUrl); + tabUrlRooms = await adminService.getUrlRoomsFromSameWorld("en", clientRoomUrl); } else { tabUrlRooms = [clientRoomUrl]; }