From 753d5bf2acd36c40535bc02e839808984ee45776 Mon Sep 17 00:00:00 2001
From: Kevin Chung <kchung@ctfd.io>
Date: Sat, 7 Sep 2024 05:35:31 +0000
Subject: [PATCH 1/2] Add getBrackets function to CTFd.pages.scoreboard and add
 bracketId argument to scoreboard functions

---
 main.js             |  3 ++-
 pages/scoreboard.js | 24 ++++++++++++++++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/main.js b/main.js
index 259dc99..9b15a39 100644
--- a/main.js
+++ b/main.js
@@ -12,7 +12,7 @@ import {
   displayUnlock,
   displayHint,
 } from "./pages/challenge";
-import { getScoreboard, getScoreboardDetail } from "./pages/scoreboard";
+import { getScoreboard, getScoreboardDetail, getBrackets } from "./pages/scoreboard";
 import { updateSettings, generateToken, deleteToken } from "./pages/settings";
 import { userSolves, userFails, userAwards } from "./pages/users";
 import {
@@ -136,6 +136,7 @@ const pages = {
   scoreboard: {
     getScoreboard,
     getScoreboardDetail,
+    getBrackets,
   },
   settings: {
     updateSettings,
diff --git a/pages/scoreboard.js b/pages/scoreboard.js
index e015196..4156a34 100644
--- a/pages/scoreboard.js
+++ b/pages/scoreboard.js
@@ -1,17 +1,33 @@
 import CTFd from "../main";
 
-export async function getScoreboard() {
-  const response = await CTFd.fetch("/api/v1/scoreboard", {
+export async function getScoreboard(bracketId = null) {
+  let url = "/api/v1/scoreboard";
+  if (bracketId) {
+    url = `${url}&bracket_id=${bracketId}`;
+  }
+  const response = await CTFd.fetch(url, {
     method: "GET",
   });
   const body = await response.json();
   return body["data"]; // scoreboard data
 }
 
-export async function getScoreboardDetail(count) {
-  const response = await CTFd.fetch(`/api/v1/scoreboard/top/${count}`, {
+export async function getScoreboardDetail(count, bracketId = null) {
+  let url = `/api/v1/scoreboard/top/${count}`;
+  if (bracketId) {
+    url = `${url}&bracket_id=${bracketId}`;
+  }
+  const response = await CTFd.fetch(url, {
     method: "GET",
   });
   const body = await response.json();
   return body["data"]; // scoreboard data
 }
+
+export async function getBrackets(userMode) {
+  const response = await CTFd.fetch(`/api/v1/brackets?type=${userMode}`, {
+    method: "GET",
+  });
+  const body = await response.json();
+  return body["data"];
+}

From 423fe0b2e556b1aeda16f3b0e8c8df271bfaaa0b Mon Sep 17 00:00:00 2001
From: Kevin Chung <kchung@ctfd.io>
Date: Sat, 7 Sep 2024 02:07:10 -0400
Subject: [PATCH 2/2] Fix typo

---
 pages/scoreboard.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pages/scoreboard.js b/pages/scoreboard.js
index 4156a34..e694788 100644
--- a/pages/scoreboard.js
+++ b/pages/scoreboard.js
@@ -3,7 +3,7 @@ import CTFd from "../main";
 export async function getScoreboard(bracketId = null) {
   let url = "/api/v1/scoreboard";
   if (bracketId) {
-    url = `${url}&bracket_id=${bracketId}`;
+    url = `${url}?bracket_id=${bracketId}`;
   }
   const response = await CTFd.fetch(url, {
     method: "GET",
@@ -15,7 +15,7 @@ export async function getScoreboard(bracketId = null) {
 export async function getScoreboardDetail(count, bracketId = null) {
   let url = `/api/v1/scoreboard/top/${count}`;
   if (bracketId) {
-    url = `${url}&bracket_id=${bracketId}`;
+    url = `${url}?bracket_id=${bracketId}`;
   }
   const response = await CTFd.fetch(url, {
     method: "GET",