This repository was archived by the owner on May 1, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctf.ts
85 lines (74 loc) · 2.48 KB
/
ctf.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { NextFunction, Request, Response, Router } from "express";
import Logger from "../../loaders/logger";
import CTFService from "../../services/CTF";
import { notImplemented } from "../../util";
import attachCTF from "../../util/middleware/ctf";
import attachUser from "../../util/middleware/user";
import challenge from "./challenge";
export default (): Router => {
const router = Router({ mergeParams: true });
router.use(attachUser(), attachCTF());
router.use("/:ctfID/challenges", challenge());
router.route("/").get(listCTFs).post(createCTF).all(notImplemented);
router.route("/:ctfID").get(getCTF).all(notImplemented);
router.route("/:ctfID/archive").post(archiveCTF).all(notImplemented);
router.route("/:ctfID/unarchive").post(unarchiveCTF).all(notImplemented);
return router;
};
const _CTFService = new CTFService();
function createCTF(req: Request, res: Response, next: NextFunction) {
Logger.verbose(`Creating new CTF for team ${req.team._id}`);
Logger.debug(JSON.stringify({ ...req.body }));
_CTFService
.createCTF(req.user, req.team, req.body)
.then((ctfDetails) => {
res.status(201).send(ctfDetails);
})
.catch((err) => next(err));
}
function listCTFs(req: Request, res: Response, next: NextFunction) {
Logger.verbose(`Getting list of CTFs for team ${req.team._id}`);
_CTFService
.listCTFs(
req.user,
req.team,
req.body.includeArchived ?? undefined
)
.then((CTFs) => {
res.status(200).send(CTFs);
})
.catch((err) => next(err));
}
function getCTF(req: Request, res: Response, next: NextFunction) {
Logger.verbose(
`Getting CTF with ID ${req.params.ctfID} from team ${req.team._id}`
);
_CTFService
.getCTF(req.user, req.team, req.params.ctfID)
.then((CTF) => {
res.status(200).send(CTF);
})
.catch((err) => next(err));
}
function archiveCTF(req: Request, res: Response, next: NextFunction) {
Logger.verbose(
`Archiving CTF with ID ${req.params.ctfID} in team ${req.team._id}`
);
_CTFService
.archiveCTF(req.user, req.team, req.params.ctfID)
.then((CTF) => {
res.status(200).send(CTF);
})
.catch((err) => next(err));
}
function unarchiveCTF(req: Request, res: Response, next: NextFunction) {
Logger.verbose(
`Unarchiving CTF with ID ${req.params.ctfID} in team ${req.team._id}`
);
_CTFService
.unarchiveCTF(req.user, req.team, req.params.ctfID)
.then((CTF) => {
res.status(200).send(CTF);
})
.catch((err) => next(err));
}