Merge branch 'develop' of github.com:thecodingmachine/workadventure
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
WorldFullWarningToRoomMessage,
|
||||
RefreshRoomPromptMessage,
|
||||
} from "../Messages/generated/messages_pb";
|
||||
import log from "../Services/Logger";
|
||||
|
||||
export class AdminController extends BaseController {
|
||||
constructor(private App: TemplatedApp) {
|
||||
@@ -25,14 +26,14 @@ export class AdminController extends BaseController {
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.post("/room/refresh", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
|
||||
const token = req.getHeader("admin-token");
|
||||
const body = await res.json();
|
||||
|
||||
if (token !== ADMIN_API_TOKEN) {
|
||||
console.error("Admin access refused for token: " + token);
|
||||
log.error("Admin access refused for token: " + token);
|
||||
res.writeStatus("401 Unauthorized").end("Incorrect token");
|
||||
return;
|
||||
}
|
||||
@@ -72,14 +73,14 @@ export class AdminController extends BaseController {
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.post("/message", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
|
||||
const token = req.getHeader("admin-token");
|
||||
const body = await res.json();
|
||||
|
||||
if (token !== ADMIN_API_TOKEN) {
|
||||
console.error("Admin access refused for token: " + token);
|
||||
log.error("Admin access refused for token: " + token);
|
||||
res.writeStatus("401 Unauthorized").end("Incorrect token");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import { AuthTokenData, jwtTokenManager } from "../Services/JWTTokenManager";
|
||||
import { parse } from "query-string";
|
||||
import { openIDClient } from "../Services/OpenIDClient";
|
||||
import { DISABLE_ANONYMOUS } from "../Enum/EnvironmentVariable";
|
||||
import log from "../Services/Logger";
|
||||
|
||||
export interface TokenInterface {
|
||||
userUuid: string;
|
||||
@@ -25,7 +26,7 @@ export class AuthenticateController extends BaseController {
|
||||
//eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.get("/login-screen", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
|
||||
try {
|
||||
@@ -44,7 +45,7 @@ export class AuthenticateController extends BaseController {
|
||||
res.writeHeader("Location", loginUri);
|
||||
return res.end();
|
||||
} catch (e) {
|
||||
console.error("openIDLogin => e", e);
|
||||
log.error("openIDLogin => e", e);
|
||||
return this.errorToResponse(e, res);
|
||||
}
|
||||
});
|
||||
@@ -54,7 +55,7 @@ export class AuthenticateController extends BaseController {
|
||||
//eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.get("/login-callback", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
const IPAddress = req.getHeader("x-forwarded-for");
|
||||
const { code, nonce, token, playUri } = parse(req.getQuery());
|
||||
@@ -88,7 +89,7 @@ export class AuthenticateController extends BaseController {
|
||||
this.addCorsHeaders(res);
|
||||
return res.end(JSON.stringify({ ...resCheckTokenAuth, ...resUserData, username: authTokenData.username, authToken: token }));
|
||||
} catch (err) {
|
||||
console.info("User was not connected", err);
|
||||
log.info("User was not connected", err);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +109,7 @@ export class AuthenticateController extends BaseController {
|
||||
this.addCorsHeaders(res);
|
||||
return res.end(JSON.stringify({ ...data, authToken, username: userInfo.username, userUuid : sub }));
|
||||
} catch (e) {
|
||||
console.error("openIDCallback => ERROR", e);
|
||||
log.error("openIDCallback => ERROR", e);
|
||||
return this.errorToResponse(e, res);
|
||||
}
|
||||
});
|
||||
@@ -116,7 +117,7 @@ export class AuthenticateController extends BaseController {
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.get("/logout-callback", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
|
||||
const { token } = parse(req.getQuery());
|
||||
@@ -128,7 +129,7 @@ export class AuthenticateController extends BaseController {
|
||||
}
|
||||
await openIDClient.logoutUser(authTokenData.accessToken);
|
||||
} catch (error) {
|
||||
console.error("openIDCallback => logout-callback", error);
|
||||
log.error("openIDCallback => logout-callback", error);
|
||||
} finally {
|
||||
res.writeStatus("200");
|
||||
this.addCorsHeaders(res);
|
||||
@@ -149,7 +150,7 @@ export class AuthenticateController extends BaseController {
|
||||
this.App.post("/register", (res: HttpResponse, req: HttpRequest) => {
|
||||
(async () => {
|
||||
res.onAborted(() => {
|
||||
console.warn("Login request was aborted");
|
||||
log.warn("Login request was aborted");
|
||||
});
|
||||
const param = await res.json();
|
||||
|
||||
@@ -180,7 +181,7 @@ export class AuthenticateController extends BaseController {
|
||||
})
|
||||
);
|
||||
} catch (e) {
|
||||
console.error("register => ERROR", e);
|
||||
log.error("register => ERROR", e);
|
||||
this.errorToResponse(e, res);
|
||||
}
|
||||
})();
|
||||
@@ -196,7 +197,7 @@ export class AuthenticateController extends BaseController {
|
||||
|
||||
this.App.post("/anonymLogin", (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("Login request was aborted");
|
||||
log.warn("Login request was aborted");
|
||||
});
|
||||
|
||||
if (DISABLE_ANONYMOUS) {
|
||||
@@ -223,7 +224,7 @@ export class AuthenticateController extends BaseController {
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
this.App.get("/profile-callback", async (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/message request was aborted");
|
||||
log.warn("/message request was aborted");
|
||||
});
|
||||
const { token } = parse(req.getQuery());
|
||||
try {
|
||||
@@ -247,7 +248,7 @@ export class AuthenticateController extends BaseController {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("profileCallback => ERROR", error);
|
||||
log.error("profileCallback => ERROR", error);
|
||||
this.errorToResponse(error, res);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { HttpResponse } from "uWebSockets.js";
|
||||
import { FRONT_URL } from "../Enum/EnvironmentVariable";
|
||||
import log from "../Services/Logger";
|
||||
|
||||
export class BaseController {
|
||||
protected addCorsHeaders(res: HttpResponse): void {
|
||||
@@ -20,12 +21,12 @@ export class BaseController {
|
||||
} else {
|
||||
url = "";
|
||||
}
|
||||
console.error("ERROR: " + e.message + url);
|
||||
log.error("ERROR: " + e.message + url);
|
||||
} else if (typeof e === "string") {
|
||||
console.error(e);
|
||||
log.error(e);
|
||||
}
|
||||
if (e.stack) {
|
||||
console.error(e.stack);
|
||||
log.error(e.stack);
|
||||
}
|
||||
if (e.response) {
|
||||
res.writeStatus(e.response.status + " " + e.response.statusText);
|
||||
|
||||
@@ -30,6 +30,7 @@ import { ADMIN_SOCKETS_TOKEN, ADMIN_API_URL, DISABLE_ANONYMOUS, SOCKET_IDLE_TIME
|
||||
import { Zone } from "_Model/Zone";
|
||||
import { ExAdminSocketInterface } from "_Model/Websocket/ExAdminSocketInterface";
|
||||
import { CharacterTexture } from "../Services/AdminApi/CharacterTexture";
|
||||
import log from "../Services/Logger";
|
||||
|
||||
export class IoSocketController {
|
||||
private nextUserId: number = 1;
|
||||
@@ -52,13 +53,13 @@ export class IoSocketController {
|
||||
const data = jwtTokenManager.verifyAdminSocketToken(token as string);
|
||||
authorizedRoomIds = data.authorizedRoomIds;
|
||||
} catch (e) {
|
||||
console.error("Admin access refused for token: " + token);
|
||||
log.info("Admin access refused for token: " + token);
|
||||
res.writeStatus("401 Unauthorized").end("Incorrect token");
|
||||
return;
|
||||
}
|
||||
const roomId = query.roomId;
|
||||
if (typeof roomId !== "string" || !authorizedRoomIds.includes(roomId)) {
|
||||
console.error("Invalid room id");
|
||||
log.error("Invalid room id");
|
||||
res.writeStatus("403 Bad Request").end("Invalid room id");
|
||||
return;
|
||||
}
|
||||
@@ -66,7 +67,7 @@ export class IoSocketController {
|
||||
res.upgrade({ roomId }, websocketKey, websocketProtocol, websocketExtensions, context);
|
||||
},
|
||||
open: (ws) => {
|
||||
console.log("Admin socket connect for room: " + ws.roomId);
|
||||
log.info("Admin socket connect for room: " + ws.roomId);
|
||||
ws.disconnecting = false;
|
||||
|
||||
socketManager.handleAdminRoom(ws as ExAdminSocketInterface, ws.roomId as string);
|
||||
@@ -97,7 +98,7 @@ export class IoSocketController {
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
log.error(err);
|
||||
}
|
||||
},
|
||||
close: (ws, code, message) => {
|
||||
@@ -106,8 +107,8 @@ export class IoSocketController {
|
||||
Client.disconnecting = true;
|
||||
socketManager.leaveAdminRoom(Client);
|
||||
} catch (e) {
|
||||
console.error('An error occurred on admin "disconnect"');
|
||||
console.error(e);
|
||||
log.error('An error occurred on admin "disconnect"');
|
||||
log.error(e);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -205,7 +206,7 @@ export class IoSocketController {
|
||||
if (err?.response?.status == 404) {
|
||||
// If we get an HTTP 404, the token is invalid. Let's perform an anonymous login!
|
||||
|
||||
console.warn(
|
||||
log.warn(
|
||||
'Cannot find user with email "' +
|
||||
(userIdentifier || "anonymous") +
|
||||
'". Performing an anonymous login instead.'
|
||||
@@ -245,13 +246,13 @@ export class IoSocketController {
|
||||
throw new Error("Use the login URL to connect");
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(
|
||||
log.info(
|
||||
"access not granted for user " +
|
||||
(userIdentifier || "anonymous") +
|
||||
" and room " +
|
||||
roomId
|
||||
);
|
||||
console.error(e);
|
||||
log.error(e);
|
||||
throw new Error("User cannot access this world");
|
||||
}
|
||||
}
|
||||
@@ -261,7 +262,7 @@ export class IoSocketController {
|
||||
SocketManager.mergeCharacterLayersAndCustomTextures(characterLayers, memberTextures);
|
||||
|
||||
if (upgradeAborted.aborted) {
|
||||
console.log("Ouch! Client disconnected before we could upgrade it!");
|
||||
log.info("Ouch! Client disconnected before we could upgrade it!");
|
||||
/* You must not upgrade now */
|
||||
return;
|
||||
}
|
||||
@@ -402,7 +403,7 @@ export class IoSocketController {
|
||||
//let ok = ws.send(message, isBinary);
|
||||
},
|
||||
drain: (ws) => {
|
||||
console.log("WebSocket backpressure: " + ws.getBufferedAmount());
|
||||
log.info("WebSocket backpressure: " + ws.getBufferedAmount());
|
||||
},
|
||||
close: (ws, code, message) => {
|
||||
const Client = ws as ExSocketInterface;
|
||||
@@ -411,8 +412,8 @@ export class IoSocketController {
|
||||
//leave room
|
||||
socketManager.leaveRoom(Client);
|
||||
} catch (e) {
|
||||
console.error('An error occurred on "disconnect"');
|
||||
console.error(e);
|
||||
log.error('An error occurred on "disconnect"');
|
||||
log.error(e);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -8,6 +8,7 @@ import { isMapDetailsData, MapDetailsData } from "../Services/AdminApi/MapDetail
|
||||
import { socketManager } from "../Services/SocketManager";
|
||||
import { AuthTokenData, jwtTokenManager } from "../Services/JWTTokenManager";
|
||||
import { v4 } from "uuid";
|
||||
import log from "../Services/Logger";
|
||||
|
||||
export class MapController extends BaseController {
|
||||
constructor(private App: TemplatedApp) {
|
||||
@@ -26,13 +27,13 @@ export class MapController extends BaseController {
|
||||
|
||||
this.App.get("/map", (res: HttpResponse, req: HttpRequest) => {
|
||||
res.onAborted(() => {
|
||||
console.warn("/map request was aborted");
|
||||
log.warn("/map request was aborted");
|
||||
});
|
||||
|
||||
const query = parse(req.getQuery());
|
||||
|
||||
if (typeof query.playUri !== "string") {
|
||||
console.error("Expected playUri parameter in /map endpoint");
|
||||
log.error("Expected playUri parameter in /map endpoint");
|
||||
res.writeStatus("400 Bad request");
|
||||
this.addCorsHeaders(res);
|
||||
res.end("Expected playUri parameter");
|
||||
@@ -84,7 +85,7 @@ export class MapController extends BaseController {
|
||||
// Decode token, in this case we don't need to create new token.
|
||||
authTokenData = jwtTokenManager.verifyJWTToken(query.authToken as string, true);
|
||||
userId = authTokenData.identifier;
|
||||
console.info("JWT expire, but decoded", userId);
|
||||
log.info("JWT expire, but decoded", userId);
|
||||
} catch (e) {
|
||||
// The token was not good, redirect user on login page
|
||||
res.writeStatus("500");
|
||||
|
||||
Reference in New Issue
Block a user