From e2ae6fc1bf77355087f22fe3e982b6a915254198 Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 7 Oct 2024 11:02:43 -0700 Subject: [PATCH 1/8] config for quadro (DO NOT PUSH TO MAIN) --- aws/lti-middleware/index.js | 3 +-- package.json | 2 +- src/content-sources/oatutor | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/aws/lti-middleware/index.js b/aws/lti-middleware/index.js index 6d8436a4828..3e5a49aefb2 100644 --- a/aws/lti-middleware/index.js +++ b/aws/lti-middleware/index.js @@ -29,8 +29,7 @@ const consumerKeySecretMap = { key: "secret", }; -const oatsHost = "https://cahlr.github.io/OATutor/#"; -const stagingHost = "https://cahlr.github.io/OATutor-Staging/#"; +const oatsHost = "https://quadro.ist.berkeley.edu:2030/#"; const unlinkedPage = "assignment-not-linked"; const alreadyLinkedPage = "assignment-already-linked"; const jwtAlgorithm = "HS256"; diff --git a/package.json b/package.json index 539f68762cc..fb5a519ac4a 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "use-window-focus": "^1.4.1" }, "scripts": { - "start": "cross-env PORT=3001 react-app-rewired start", + "start": "HTTPS=true SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu react-scripts start", "prestart": "node src/tools/preprocessProblemPool.js", "build": "react-app-rewired build", "build-localhost": "cross-env PUBLIC_URL=/ react-app-rewired build", diff --git a/src/content-sources/oatutor b/src/content-sources/oatutor index cee904c290b..3ef9b3f0933 160000 --- a/src/content-sources/oatutor +++ b/src/content-sources/oatutor @@ -1 +1 @@ -Subproject commit cee904c290b48791d58ff78d91b7cba5f975a34a +Subproject commit 3ef9b3f0933cd1e8388a4031a80a853d4047a887 From 03f4be8df2b85ef4c57358bae6b2278424b29c9f Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 7 Oct 2024 11:10:16 -0700 Subject: [PATCH 2/8] turn https false --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb5a519ac4a..04294d35fb0 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "use-window-focus": "^1.4.1" }, "scripts": { - "start": "HTTPS=true SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu react-scripts start", + "start": "HTTPS=false SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu react-scripts start", "prestart": "node src/tools/preprocessProblemPool.js", "build": "react-app-rewired build", "build-localhost": "cross-env PUBLIC_URL=/ react-app-rewired build", From df76512b5451e087b89770d25274057bf7e26c3d Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 7 Oct 2024 11:10:58 -0700 Subject: [PATCH 3/8] chagne host in middleware to https false --- aws/lti-middleware/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/lti-middleware/index.js b/aws/lti-middleware/index.js index 3e5a49aefb2..72a619aa93a 100644 --- a/aws/lti-middleware/index.js +++ b/aws/lti-middleware/index.js @@ -29,7 +29,7 @@ const consumerKeySecretMap = { key: "secret", }; -const oatsHost = "https://quadro.ist.berkeley.edu:2030/#"; +const oatsHost = "http://quadro.ist.berkeley.edu:2030/#"; const unlinkedPage = "assignment-not-linked"; const alreadyLinkedPage = "assignment-already-linked"; const jwtAlgorithm = "HS256"; From f87df4d2527406e39046552a6e83deebd9263e45 Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 7 Oct 2024 11:13:29 -0700 Subject: [PATCH 4/8] change config --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04294d35fb0..39510e52a5f 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "use-window-focus": "^1.4.1" }, "scripts": { - "start": "HTTPS=false SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu react-scripts start", + "start": "cross-env PORT=2030 HOST=quadro.ist.berkeley.edu react-app-rewired start", "prestart": "node src/tools/preprocessProblemPool.js", "build": "react-app-rewired build", "build-localhost": "cross-env PUBLIC_URL=/ react-app-rewired build", From 39cb206dfb90891fa3bba52f073124a856b6d00d Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 7 Oct 2024 12:28:45 -0700 Subject: [PATCH 5/8] back to ssl --- aws/lti-middleware/index.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws/lti-middleware/index.js b/aws/lti-middleware/index.js index 72a619aa93a..3e5a49aefb2 100644 --- a/aws/lti-middleware/index.js +++ b/aws/lti-middleware/index.js @@ -29,7 +29,7 @@ const consumerKeySecretMap = { key: "secret", }; -const oatsHost = "http://quadro.ist.berkeley.edu:2030/#"; +const oatsHost = "https://quadro.ist.berkeley.edu:2030/#"; const unlinkedPage = "assignment-not-linked"; const alreadyLinkedPage = "assignment-already-linked"; const jwtAlgorithm = "HS256"; diff --git a/package.json b/package.json index 39510e52a5f..b230e5f4b93 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "use-window-focus": "^1.4.1" }, "scripts": { - "start": "cross-env PORT=2030 HOST=quadro.ist.berkeley.edu react-app-rewired start", + "start": "HTTPS=true SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu cross-env react-app-rewired start", "prestart": "node src/tools/preprocessProblemPool.js", "build": "react-app-rewired build", "build-localhost": "cross-env PUBLIC_URL=/ react-app-rewired build", From 1c2f3fcc3126b9e748566c0e608d63928f5150d1 Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Fri, 11 Oct 2024 16:31:53 -0700 Subject: [PATCH 6/8] logging student problem progress for canvas using firebase impl --- package-lock.json | 14 +++++ package.json | 3 +- src/components/Firebase.js | 41 +++++++++++--- src/components/problem-layout/Problem.js | 1 - src/config/config.js | 7 +++ src/content-sources/oatutor | 2 +- src/platform-logic/Platform.js | 72 +++++++++++++++++------- 7 files changed, 108 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69c177c395a..a1ecbd8fc6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "expr-eval": "~2.0.2", "firebase": "~9.9.1", "http2": "~3.3.7", + "jwt-decode": "^4.0.0", "list-react-files": "~0.2.0", "localforage": "~1.10.0", "mathlive": "^0.98.3", @@ -11817,6 +11818,14 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, "node_modules/katex": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/katex/-/katex-0.9.0.tgz", @@ -26660,6 +26669,11 @@ } } }, + "jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==" + }, "katex": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/katex/-/katex-0.9.0.tgz", diff --git a/package.json b/package.json index b230e5f4b93..bc40d63e9fc 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "expr-eval": "~2.0.2", "firebase": "~9.9.1", "http2": "~3.3.7", + "jwt-decode": "^4.0.0", "list-react-files": "~0.2.0", "localforage": "~1.10.0", "mathlive": "^0.98.3", @@ -33,7 +34,7 @@ "use-window-focus": "^1.4.1" }, "scripts": { - "start": "HTTPS=true SSL_CRT_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/fullchain.pem SSL_KEY_FILE=/etc/letsencrypt/live/quadro.ist.berkeley.edu/privkey.pem PORT=2030 HOST=quadro.ist.berkeley.edu cross-env react-app-rewired start", + "start": "cross-env PORT=3001 react-app-rewired start", "prestart": "node src/tools/preprocessProblemPool.js", "build": "react-app-rewired build", "build-localhost": "cross-env PUBLIC_URL=/ react-app-rewired build", diff --git a/src/components/Firebase.js b/src/components/Firebase.js index ed59bff99a8..100edf5fff8 100644 --- a/src/components/Firebase.js +++ b/src/components/Firebase.js @@ -24,6 +24,7 @@ import { } from "../util/getBuildType"; const problemSubmissionsOutput = "problemSubmissions"; +const canvasLessonProgress = "canvasLessonProgress"; const problemStartLogOutput = "problemStartLogs"; const GPTExperimentOutput = "GPTExperimentOutput"; const feedbackOutput = "feedbacks"; @@ -108,24 +109,24 @@ class Firebase { Document: Key - How you will access this data later. Usually username Data: Value - JSON object of data you want to store */ - async writeData(_collection, data) { + async writeData(_collection, data, docID = null) { if (!ENABLE_FIREBASE) return; const collection = this.getCollectionName(_collection); const payload = this.addMetaData(data); - if (IS_STAGING_OR_DEVELOPMENT) { - // console.log("payload: ", payload); console.debug("Writing this payload to firebase: ", payload); } + + docID = docID || this._getReadableID(); await setDoc( - doc(this.db, collection, this._getReadableID()), + doc(this.db, collection, docID), payload - ).catch((err) => { - console.log("a non-critical error occurred."); - console.log("Error is: ", err); - console.debug(err); + ) + .catch((err) => { + console.log("Error while writing to Firebase: ", err); }); + } /** @@ -331,6 +332,30 @@ class Firebase { return this.writeData("mouseMovement", data); } + async getCompletedProblems(docID) { + const collectionName = this.getCollectionName(canvasLessonProgress); + const docRef = this.db.collection(collectionName).doc(docID); + + const docSnapshot = await docRef.get(); + + if (!docSnapshot.exists) { + throw new Error(`Document with ID ${docID} does not exist.`); + } + + const data = docSnapshot.data(); + if (!data || !data.problems) { + throw new Error(`Document with ID ${docID} does not contain "problems" field.`); + } + console.log("in get completed problems", data.problems); + return data.problems; + } + + async setCompletedProblems(docID, problems) { + console.log("in set completed problems", problems); + const problemObject = {"problems": problems}; + this.writeData(canvasLessonProgress, problemObject, docID); + } + startedProblem(problemID, courseName, lesson, lessonObjectives) { if (!DO_LOG_DATA) return; console.debug( diff --git a/src/components/problem-layout/Problem.js b/src/components/problem-layout/Problem.js index 6d1377e9754..f7b72b43c55 100644 --- a/src/components/problem-layout/Problem.js +++ b/src/components/problem-layout/Problem.js @@ -330,7 +330,6 @@ class Problem extends React.Component { clickNextProblem = async () => { scroll.scrollToTop({ duration: 900, smooth: true }); - await this.props.problemComplete(this.context); this.setState({ diff --git a/src/config/config.js b/src/config/config.js index 204510b98a6..121e781bfc3 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -1,4 +1,5 @@ import React from "react"; +import { jwtDecode } from 'jwt-decode'; import courses from "../content-sources/oatutor/coursePlans.json"; import { calculateSemester } from "../util/calculateSemester.js"; @@ -74,6 +75,12 @@ const USER_ID_STORAGE_KEY = `${_SHORT_SITE_NAME}-user_id`; const PROGRESS_STORAGE_KEY = `${_SHORT_SITE_NAME}-progress`; export const LESSON_PROGRESS_STORAGE_KEY = (lessonId) => `${PROGRESS_STORAGE_KEY}-${lessonId}`; +export const CANVAS_LESSON_PROGRESS_KEY = (jwtToken, lessonId) => { + const decodedToken = jwtDecode(jwtToken); + const userId = decodedToken.user_id; + return `${PROGRESS_STORAGE_KEY}-${userId}-${lessonId}`; +}; + const CANVAS_WARNING_STORAGE_KEY = `${_SHORT_SITE_NAME}-canvas-warning-dismissed`; diff --git a/src/content-sources/oatutor b/src/content-sources/oatutor index 3ef9b3f0933..cee904c290b 160000 --- a/src/content-sources/oatutor +++ b/src/content-sources/oatutor @@ -1 +1 @@ -Subproject commit 3ef9b3f0933cd1e8388a4031a80a853d4047a887 +Subproject commit cee904c290b48791d58ff78d91b7cba5f975a34a diff --git a/src/platform-logic/Platform.js b/src/platform-logic/Platform.js index 35777e3beea..69d2cc234f7 100644 --- a/src/platform-logic/Platform.js +++ b/src/platform-logic/Platform.js @@ -9,6 +9,7 @@ import { coursePlans, findLessonById, LESSON_PROGRESS_STORAGE_KEY, + CANVAS_LESSON_PROGRESS_KEY, MIDDLEWARE_URL, SITE_NAME, ThemeContext, @@ -232,16 +233,23 @@ class Platform extends React.Component { this.lesson = lesson; const loadLessonProgress = async () => { - const { getByKey } = this.context.browserStorage; - return await getByKey( - LESSON_PROGRESS_STORAGE_KEY(this.lesson.id) - ).catch((err) => {}); + if (this.context?.jwt) { + console.log("loading lesson progress") + const key = CANVAS_LESSON_PROGRESS_KEY(this.context.jwt, this.lesson.id); + return await this.context.firebase.getCompletedProblems(key).catch((err) => {}); + } else { + const { getByKey } = this.context.browserStorage; + return await getByKey( + LESSON_PROGRESS_STORAGE_KEY(this.lesson.id) + ).catch((err) => {}); + } }; const [, prevCompletedProbs] = await Promise.all([ this.props.loadBktProgress(), loadLessonProgress(), ]); + console.log("GOT THE COMPLETED PROBS, HERE THEY ARE: ", prevCompletedProbs) if (!this._isMounted) { console.debug("component not mounted, returning early (2)"); return; @@ -377,23 +385,45 @@ class Platform extends React.Component { problemComplete = async (context) => { this.completedProbs.add(this.state.currProblem.id); - const { setByKey } = this.context.browserStorage; - await setByKey( - LESSON_PROGRESS_STORAGE_KEY(this.lesson.id), - this.completedProbs - ).catch((error) => { - this.context.firebase.submitSiteLog( - "site-error", - `componentName: Platform.js`, - { - errorName: error.name || "n/a", - errorCode: error.code || "n/a", - errorMsg: error.message || "n/a", - errorStack: error.stack || "n/a", - }, - this.state.currProblem.id - ); - }); + console.log(this.context) + console.log(this.context.jwt) + if (this.context?.jwt) { + const key = CANVAS_LESSON_PROGRESS_KEY(this.context.jwt, this.lesson.id) + await this.context.firebase.setCompletedProblems( + key, + Array.from(this.completedProbs) + ).catch((error) => { + this.context.firebase.submitSiteLog( + "site-error", + `componentName: Platform.js`, + { + errorName: error.name || "n/a", + errorCode: error.code || "n/a", + errorMsg: error.message || "n/a", + errorStack: error.stack || "n/a", + }, + this.state.currProblem.id + ); + }); + } else { + const { setByKey } = this.context.browserStorage; + await setByKey( + LESSON_PROGRESS_STORAGE_KEY(this.lesson.id), + this.completedProbs + ).catch((error) => { + this.context.firebase.submitSiteLog( + "site-error", + `componentName: Platform.js`, + { + errorName: error.name || "n/a", + errorCode: error.code || "n/a", + errorMsg: error.message || "n/a", + errorStack: error.stack || "n/a", + }, + this.state.currProblem.id + ); + }); + } this._nextProblem(context); }; From 52e5427a831013f7a4c4d6810b68fa7754504590 Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Fri, 11 Oct 2024 18:45:53 -0700 Subject: [PATCH 7/8] done w/ mastery and problem progress saving --- src/App.js | 50 +++++++++++++++++++++++++--------- src/components/Firebase.js | 35 ++++++++++++++++++++---- src/config/config.js | 6 ++++ src/platform-logic/Platform.js | 4 --- 4 files changed, 73 insertions(+), 22 deletions(-) diff --git a/src/App.js b/src/App.js index 38cf3df500b..6dceb95fbb5 100644 --- a/src/App.js +++ b/src/App.js @@ -14,6 +14,7 @@ import NotFound from "@components/NotFound.js"; import { DO_FOCUS_TRACKING, PROGRESS_STORAGE_KEY, + CANVAS_PROBLEM_SCORE_KEY, SITE_VERSION, ThemeContext, USER_ID_STORAGE_KEY, @@ -127,6 +128,7 @@ class App extends React.Component { const user = parseJwt(additionalContext.jwt); additionalContext["user"] = user; additionalContext["studentName"] = user.full_name; + this.jwt = additionalContext.jwt; } // Firebase creation @@ -229,24 +231,46 @@ class App extends React.Component { ); }) ); - const { setByKey } = this.browserStorage; - setByKey(PROGRESS_STORAGE_KEY, progressedBktParams, (err) => { - if (err) { - console.debug("save progress error: ", err); - toast.warn("Unable to save mastery progress :(", { + console.log(progressedBktParams) + + if (this.jwt) { + const key = CANVAS_PROBLEM_SCORE_KEY(this.jwt); + this.firebase.setMastery(key, progressedBktParams) + .then((_) => {}) + .catch((err) => { + toast.warn("Unable to save mastery progress to Firebase", { toastId: "unable_to_save_progress", }); - } else { - console.debug("saved progress successfully"); - } - }).then((_) => {}); + }); + } else { + const { setByKey } = this.browserStorage; + setByKey(PROGRESS_STORAGE_KEY, progressedBktParams, (err) => { + if (err) { + console.debug("save progress error: ", err); + toast.warn("Unable to save mastery progress :(", { + toastId: "unable_to_save_progress", + }); + } else { + console.debug("saved progress successfully"); + } + }).then((_) => {}); + } }; loadBktProgress = async () => { - const { getByKey } = this.browserStorage; - const progress = await getByKey(PROGRESS_STORAGE_KEY).catch((_e) => { - console.debug("error with getting previous progress", _e); - }); + let progress; + if (this.jwt) { + const key = CANVAS_PROBLEM_SCORE_KEY(this.jwt); + progress = await this.firebase.getMastery(key).catch((_e) => { + console.debug("error with getting previous progress", _e); + }); + } else { + const { getByKey } = this.browserStorage; + progress = await getByKey(PROGRESS_STORAGE_KEY).catch((_e) => { + console.debug("error with getting previous progress", _e); + }); + } + if ( progress == null || typeof progress !== "object" || diff --git a/src/components/Firebase.js b/src/components/Firebase.js index 100edf5fff8..ccad25f0078 100644 --- a/src/components/Firebase.js +++ b/src/components/Firebase.js @@ -10,10 +10,12 @@ import { import { initializeApp } from "firebase/app"; import { arrayUnion, + connectFirestoreEmulator, doc, getFirestore, serverTimestamp, setDoc, + getDoc, } from "firebase/firestore"; import daysSinceEpoch from "../util/daysSinceEpoch"; import { @@ -25,6 +27,7 @@ import { const problemSubmissionsOutput = "problemSubmissions"; const canvasLessonProgress = "canvasLessonProgress"; +const canvasProblemMastery = "canvasProblemMastery"; const problemStartLogOutput = "problemStartLogs"; const GPTExperimentOutput = "GPTExperimentOutput"; const feedbackOutput = "feedbacks"; @@ -334,9 +337,8 @@ class Firebase { async getCompletedProblems(docID) { const collectionName = this.getCollectionName(canvasLessonProgress); - const docRef = this.db.collection(collectionName).doc(docID); - - const docSnapshot = await docRef.get(); + const docRef = doc(this.db, collectionName, docID); + const docSnapshot = await getDoc(docRef); if (!docSnapshot.exists) { throw new Error(`Document with ID ${docID} does not exist.`); @@ -346,16 +348,39 @@ class Firebase { if (!data || !data.problems) { throw new Error(`Document with ID ${docID} does not contain "problems" field.`); } - console.log("in get completed problems", data.problems); + return data.problems; } async setCompletedProblems(docID, problems) { - console.log("in set completed problems", problems); const problemObject = {"problems": problems}; this.writeData(canvasLessonProgress, problemObject, docID); } + async getMastery(docID) { + const collectionName = this.getCollectionName(canvasProblemMastery); + const docRef = doc(this.db, collectionName, docID); + + const docSnapshot = await getDoc(docRef); + + if (!docSnapshot.exists) { + throw new Error(`Document with ID ${docID} does not exist.`); + } + + const data = docSnapshot.data(); + if (!data) { + throw new Error(`Document with ID ${docID} does not contain "mastery" field.`); + } + + console.log("got mastery from firebase: ", data.mastery); + return data.mastery; + } + + async setMastery(docID, masteryObject) { + masteryObject = {"mastery": masteryObject}; + this.writeData(canvasProblemMastery, masteryObject, docID); + } + startedProblem(problemID, courseName, lesson, lessonObjectives) { if (!DO_LOG_DATA) return; console.debug( diff --git a/src/config/config.js b/src/config/config.js index 121e781bfc3..c99fd02f06a 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -75,6 +75,12 @@ const USER_ID_STORAGE_KEY = `${_SHORT_SITE_NAME}-user_id`; const PROGRESS_STORAGE_KEY = `${_SHORT_SITE_NAME}-progress`; export const LESSON_PROGRESS_STORAGE_KEY = (lessonId) => `${PROGRESS_STORAGE_KEY}-${lessonId}`; + +export const CANVAS_PROBLEM_SCORE_KEY = (jwtToken) => { + const decodedToken = jwtDecode(jwtToken); + const userId = decodedToken.user_id; + return `${PROGRESS_STORAGE_KEY}-${userId}`; +} export const CANVAS_LESSON_PROGRESS_KEY = (jwtToken, lessonId) => { const decodedToken = jwtDecode(jwtToken); const userId = decodedToken.user_id; diff --git a/src/platform-logic/Platform.js b/src/platform-logic/Platform.js index 69d2cc234f7..ba0efe60d63 100644 --- a/src/platform-logic/Platform.js +++ b/src/platform-logic/Platform.js @@ -234,7 +234,6 @@ class Platform extends React.Component { const loadLessonProgress = async () => { if (this.context?.jwt) { - console.log("loading lesson progress") const key = CANVAS_LESSON_PROGRESS_KEY(this.context.jwt, this.lesson.id); return await this.context.firebase.getCompletedProblems(key).catch((err) => {}); } else { @@ -249,7 +248,6 @@ class Platform extends React.Component { this.props.loadBktProgress(), loadLessonProgress(), ]); - console.log("GOT THE COMPLETED PROBS, HERE THEY ARE: ", prevCompletedProbs) if (!this._isMounted) { console.debug("component not mounted, returning early (2)"); return; @@ -385,8 +383,6 @@ class Platform extends React.Component { problemComplete = async (context) => { this.completedProbs.add(this.state.currProblem.id); - console.log(this.context) - console.log(this.context.jwt) if (this.context?.jwt) { const key = CANVAS_LESSON_PROGRESS_KEY(this.context.jwt, this.lesson.id) await this.context.firebase.setCompletedProblems( From 5107f87d939580b7573861807c4cf50f1d20b36c Mon Sep 17 00:00:00 2001 From: Anirudh Pai Date: Mon, 21 Oct 2024 11:30:44 -0700 Subject: [PATCH 8/8] update oats host --- aws/lti-middleware/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/lti-middleware/index.js b/aws/lti-middleware/index.js index 3e5a49aefb2..9c5e9d291ce 100644 --- a/aws/lti-middleware/index.js +++ b/aws/lti-middleware/index.js @@ -29,7 +29,7 @@ const consumerKeySecretMap = { key: "secret", }; -const oatsHost = "https://quadro.ist.berkeley.edu:2030/#"; +const oatsHost = "https://cahlr.github.io/OATutor/#"; const unlinkedPage = "assignment-not-linked"; const alreadyLinkedPage = "assignment-already-linked"; const jwtAlgorithm = "HS256";