Merge pull request #1520 from thecodingmachine/HotFixUserData

HotFix user data connection
This commit is contained in:
grégoire parant 2021-10-14 17:37:54 +02:00 committed by GitHub
commit a7699edd6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 10 deletions

View file

@ -98,7 +98,7 @@ class ConnectionManager {
localUserStore.setCode(code); localUserStore.setCode(code);
this._currentRoom = await Room.createRoom(new URL(localUserStore.getLastRoomUrl())); this._currentRoom = await Room.createRoom(new URL(localUserStore.getLastRoomUrl()));
try { try {
await this.checkAuthUserConnexion(); await this.checkAuthUserConnexion(this._currentRoom.key);
analyticsClient.loggedWithSso(); analyticsClient.loggedWithSso();
} catch (err) { } catch (err) {
console.error(err); console.error(err);
@ -169,7 +169,7 @@ class ConnectionManager {
await this.anonymousLogin(); await this.anonymousLogin();
} else { } else {
try { try {
await this.checkAuthUserConnexion(); await this.checkAuthUserConnexion(this._currentRoom.key);
} catch (err) { } catch (err) {
console.error(err); console.error(err);
} }
@ -275,7 +275,7 @@ class ConnectionManager {
return this.connexionType; return this.connexionType;
} }
async checkAuthUserConnexion() { async checkAuthUserConnexion(playUri: string) {
//set connected store for menu at false //set connected store for menu at false
userIsConnected.set(false); userIsConnected.set(false);
@ -289,10 +289,12 @@ class ConnectionManager {
} }
const nonce = localUserStore.getNonce(); const nonce = localUserStore.getNonce();
const token = localUserStore.getAuthToken(); const token = localUserStore.getAuthToken();
const { authToken } = await Axios.get(`${PUSHER_URL}/login-callback`, { params: { code, nonce, token } }).then( const { authToken, userUuid, textures, email } = await Axios.get(`${PUSHER_URL}/login-callback`, {
(res) => res.data params: { code, nonce, token, playUri },
); }).then((res) => res.data);
localUserStore.setAuthToken(authToken); localUserStore.setAuthToken(authToken);
this.localUser = new LocalUser(userUuid, textures, email);
localUserStore.saveUser(this.localUser);
this.authToken = authToken; this.authToken = authToken;
//user connected, set connected store for menu at true //user connected, set connected store for menu at true

View file

@ -1,7 +1,7 @@
import { v4 } from "uuid"; import { v4 } from "uuid";
import { HttpRequest, HttpResponse, TemplatedApp } from "uWebSockets.js"; import { HttpRequest, HttpResponse, TemplatedApp } from "uWebSockets.js";
import { BaseController } from "./BaseController"; import { BaseController } from "./BaseController";
import { adminApi } from "../Services/AdminApi"; import { adminApi, FetchMemberDataByUuidResponse } from "../Services/AdminApi";
import { AuthTokenData, jwtTokenManager } from "../Services/JWTTokenManager"; import { AuthTokenData, jwtTokenManager } from "../Services/JWTTokenManager";
import { parse } from "query-string"; import { parse } from "query-string";
import { openIDClient } from "../Services/OpenIDClient"; import { openIDClient } from "../Services/OpenIDClient";
@ -55,7 +55,8 @@ export class AuthenticateController extends BaseController {
res.onAborted(() => { res.onAborted(() => {
console.warn("/message request was aborted"); console.warn("/message request was aborted");
}); });
const { code, nonce, token } = parse(req.getQuery()); const IPAddress = req.getHeader("x-forwarded-for");
const { code, nonce, token, playUri } = parse(req.getQuery());
try { try {
//verify connected by token //verify connected by token
if (token != undefined) { if (token != undefined) {
@ -65,9 +66,17 @@ export class AuthenticateController extends BaseController {
throw Error("Token cannot to be check on Hydra"); throw Error("Token cannot to be check on Hydra");
} }
await openIDClient.checkTokenAuth(authTokenData.hydraAccessToken); await openIDClient.checkTokenAuth(authTokenData.hydraAccessToken);
//Get user data from Admin Back Office
//This is very important to create User Local in LocalStorage in WorkAdventure
const data = await this.getUserByUserIdentifier(
authTokenData.identifier,
playUri as string,
IPAddress
);
res.writeStatus("200"); res.writeStatus("200");
this.addCorsHeaders(res); this.addCorsHeaders(res);
return res.end(JSON.stringify({ authToken: token })); return res.end(JSON.stringify({ ...data, authToken: token }));
} catch (err) { } catch (err) {
console.info("User was not connected", err); console.info("User was not connected", err);
} }
@ -80,9 +89,14 @@ export class AuthenticateController extends BaseController {
throw new Error("No email in the response"); throw new Error("No email in the response");
} }
const authToken = jwtTokenManager.createAuthToken(email, userInfo.access_token); const authToken = jwtTokenManager.createAuthToken(email, userInfo.access_token);
//Get user data from Admin Back Office
//This is very important to create User Local in LocalStorage in WorkAdventure
const data = await this.getUserByUserIdentifier(email, playUri as string, IPAddress);
res.writeStatus("200"); res.writeStatus("200");
this.addCorsHeaders(res); this.addCorsHeaders(res);
return res.end(JSON.stringify({ authToken })); return res.end(JSON.stringify({ ...data, authToken }));
} catch (e) { } catch (e) {
console.error("openIDCallback => ERROR", e); console.error("openIDCallback => ERROR", e);
return this.errorToResponse(e, res); return this.errorToResponse(e, res);
@ -223,4 +237,26 @@ export class AuthenticateController extends BaseController {
} }
}); });
} }
/**
*
* @param email
* @param playUri
* @param IPAddress
* @return FetchMemberDataByUuidResponse|object
* @private
*/
private async getUserByUserIdentifier(
email: string,
playUri: string,
IPAddress: string
): Promise<FetchMemberDataByUuidResponse | object> {
let data: FetchMemberDataByUuidResponse | object = {};
try {
data = await adminApi.fetchMemberDataByUuid(email, playUri, IPAddress);
} catch (err) {
console.error("openIDCallback => fetchMemberDataByUuid", err);
}
return data;
}
} }