You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.2 KiB
117 lines
4.2 KiB
5 months ago
|
import { AdminorUser } from "../server.js";
|
||
|
import { Router } from "express";
|
||
|
import { addFlag, setNewActiveFlag, clearActiveFlag, getFlagFromContestID, deleteFlagsFromContest, DeleteFlagFromSub, deleteFlag, getAllFlags, getFlagByImage, getActiveFlag} from "../queries/flagQueries.js"
|
||
|
const router = Router();
|
||
|
// add a new flag to a specific contest
|
||
|
router.post('/AddFlag', (req,res) => {
|
||
|
const { name, desc, contest, image, path, hint1, hint2, hint3} = req.body;
|
||
|
// getting all the hints, whether how many
|
||
|
let Hint1 = hint1 || '';
|
||
|
let Hint2 = hint2 || '';
|
||
|
let Hint3 = hint3 || '';
|
||
|
console.log("got here");
|
||
|
addFlag(name, desc, contest, image, path, Hint1, Hint2, Hint3)
|
||
|
.then(result => {
|
||
|
return res.status(200).json({success: true, result});
|
||
|
}).catch(err => {
|
||
|
console.error(err.message);
|
||
|
return res.status(500).json({error: "COULD NOT ADD FLAG"});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Set new flag for specific user ActiveFlag
|
||
|
router.post('/setNewActiveFlag', async (req,res) => {
|
||
|
const { FlagImage, email } = req.body;
|
||
|
return AdminorUser(email).then((table) => {
|
||
|
return setNewActiveFlag(FlagImage, email, table)
|
||
|
}).then(result => {
|
||
|
console.log('Flag update:', result);
|
||
|
return res.status(200).json({success: true, result});
|
||
|
}).catch(err => {
|
||
|
console.error(err.message);
|
||
|
return res.status(500).json({error: "COULD NOT SET FLAG ACTIVE"});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
router.post('/clearActiveFlag', async(req, res) => {
|
||
|
const {email} = req.body;
|
||
|
try{
|
||
|
const result = await clearActiveFlag(email);
|
||
|
return res.status(200).json({success: true});
|
||
|
}catch(err){
|
||
|
console.error("Error clearing flag:", err.message);
|
||
|
return res.status(500).json({error: "Could not clear active flag"});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// delete all flags from a specific contest
|
||
|
router.post('/DeleteFlagsFromContest', async (req,res) => {
|
||
|
const { contest } = req.body;
|
||
|
try{
|
||
|
console.log("Contest:", contest);
|
||
|
// get all flags first and delete them from submissions
|
||
|
const flags = await getFlagFromContestID(contest);
|
||
|
console.log("Flags:", flags);
|
||
|
for (var i = 0; i < flags.length; i++)
|
||
|
await DeleteFlagFromSub(flags[i].FlagID);
|
||
|
const result = await deleteFlagsFromContest(contest);
|
||
|
console.log("Result", result);
|
||
|
if(result.affectedRows === 0)
|
||
|
return res.status(200).json({ success: true, message: "No flags found for this contest"});
|
||
|
return res.status(200).json({success: true});
|
||
|
} catch(err){
|
||
|
console.error("Error deleting flags from contest:", err.message);
|
||
|
return res.status(500).json({error: "COULD NOT DELETE FLAGS"});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// get every flag inside db
|
||
|
router.get('/getAllFlags', async (req,res) => {
|
||
|
try{
|
||
|
const flags = await getAllFlags();
|
||
|
res.json(flags);
|
||
|
} catch(err){ res.status(500).json({error: "FAILED TO GRAB FLAGS"})};
|
||
|
});
|
||
|
|
||
|
// delete specific flag with FlagID
|
||
|
router.post('/DeleteFlag', (req,res) => {
|
||
|
const { flag } = req.body;
|
||
|
DeleteFlagFromSub(flag);
|
||
|
deleteFlag(flag).then(result => {
|
||
|
if(result.affectedRows === 0)
|
||
|
return res.status(404).json({error: "FLAG NOT FOUNT"});
|
||
|
return res.status(200).json({success: true});
|
||
|
}).catch(err => {
|
||
|
console.error("Error deleting flag:", err.message);
|
||
|
return res.status(500).json({error: "COULD NOT DELETE FLAG"});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// get the active flag of a specific user
|
||
|
router.post('/getActiveFlag', async (req,res) => {
|
||
|
const { email, contest } = req.body;
|
||
|
try{
|
||
|
const table = await AdminorUser(email);
|
||
|
const activeFlag = await getActiveFlag(email, table);
|
||
|
if(activeFlag !== null){
|
||
|
const imageObject = {ActiveFlag: activeFlag};
|
||
|
const flag = await getFlagByImage(imageObject);
|
||
|
res.json(flag);
|
||
|
}
|
||
|
else res.status(500).json({error: "No active flag found"});
|
||
|
}catch(err){
|
||
|
console.error(err.message);
|
||
|
res.status(500).json({ error: "FAILED TO GET ACTIVE FLAG"});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// get every flag for a specific contest
|
||
|
router.post('/getAllFlagsFromContest', async (req,res) => {
|
||
|
const { contest } = req.body;
|
||
|
try{
|
||
|
const flags = await getFlagFromContestID(contest);
|
||
|
res.json(flags);
|
||
|
}catch(err) { res.status(500).json({error: "could not grab flags for contest"}); }
|
||
|
});
|
||
|
|
||
|
export default router;
|