From 66b8ef945fde81c0382391bfa313bc04463be9b6 Mon Sep 17 00:00:00 2001 From: Maciek Nowacki Date: Wed, 3 Mar 2021 13:59:14 -0700 Subject: [PATCH] pass along reservation_no from Archimedes --- src/xhrListener.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/xhrListener.ts b/src/xhrListener.ts index 9730009..1490810 100644 --- a/src/xhrListener.ts +++ b/src/xhrListener.ts @@ -12,7 +12,8 @@ const HTTP_PORT = app.httpPort; import { Server, IncomingMessage, ServerResponse } from 'http' interface ArchimedesMessage { - examId: string; + examId: string, + reservation_no: string } class XhrListener { @@ -28,15 +29,18 @@ class XhrListener { logger.debugLog.info("XhrListener running"); } - public relayEvent(event: string, channel: string): boolean { - logger.debugLog.info(`XhrListener:relayEvent(event: ${event}, channel: ${channel})`); + public relayEvent(event: string, archMsg: ArchimedesMessage): boolean { + logger.debugLog.info(`XhrListener:relayEvent(event: ${event}, channel: ${archMsg.examId})`); for (let c of this.#cm.channels) { - if (channel === c.id) { + if (archMsg.examId === c.id) { let dmCount: number = 0; for (let client of c.clients) { let nonce: string = crypto.randomBytes(4).toString("hex"); // TODO: verify the nonce against the received reply, which we currently ignore - client.directMessage(JSON.stringify({ message_type: "broadcast", message: { event_type: event, seq_id: nonce } })); + client.directMessage(JSON.stringify({ + message_type: "broadcast", + message: { event_type: event, seq_id: nonce, reservation_no: archMsg.reservation_no } + })); dmCount++; } // dmCount of 1 would be normal. more than 1 is odd, but not necessarily bad. 0 means Exam UI has gone away somehow. @@ -63,13 +67,13 @@ class XhrListener { let returnVal: [number, string] = [-1, ""]; let authorized: boolean = request.headers['x-proctoru-signature'] === AUTH_TOKEN; - // body of POST is JSON: '{"examId":"proctor_u_id"}' + // body of POST is JSON: '{"examId":"proctor_u_id", "reservation_no":"primary_key_from_archimedes"}' switch (true) { // match /event/pause* case /^\/event\/pause([/]+.*)*$/.test(endpoint): if (authorized) { let amsg: ArchimedesMessage = JSON.parse(Buffer.concat(body).toString()); - if (this.relayEvent("pauseExam", amsg.examId)) { + if (this.relayEvent("pauseExam", amsg)) { returnVal = [200, "pause event was successfully relayed"]; } else { logger.errorLog.info(`XhrListener: could not relay pause event "${amsg}" to Exam UI; body: "${body}"`); @@ -83,7 +87,7 @@ class XhrListener { case /^\/event\/resume([/]+.*)*$/.test(endpoint): if (authorized) { let amsg: ArchimedesMessage = JSON.parse(Buffer.concat(body).toString()); - if (this.relayEvent("resumeExam", amsg.examId)) { + if (this.relayEvent("resumeExam", amsg)) { returnVal = [200, "resume event was successfully relayed"]; } else { logger.errorLog.info(`XhrListener: could not relay resume event "${amsg}" to Exam UI; body: "${body}"`);