|
3 | 3 | from .dataset import CTFDataset |
4 | 4 | from .challenge import CTFChallenge |
5 | 5 |
|
6 | | -logging.basicConfig(level=logging.DEBUG) |
| 6 | +logging.basicConfig(level=logging.ERROR) |
7 | 7 |
|
8 | | -parser = argparse.ArgumentParser("Print challenge details") |
9 | | -parser.add_argument("--challenge", required=True, help="Challenge name") |
10 | | -parser.add_argument("--dataset", required=True, help="Dataset JSON") |
| 8 | +parser = argparse.ArgumentParser("List challenges that match filter") |
| 9 | +parser.add_argument("-y", "--year", help="Challenge name") |
| 10 | +parser.add_argument("-e", "--event", help="Event (CSAW-Quals, CSAW-Finals)") |
| 11 | +parser.add_argument("-c", "--category", help="Category (rev, pwn, forensics, web, misc)") |
| 12 | +parser.add_argument("-n", "--name", help="Challenge name") |
| 13 | +parser.add_argument("-d", "--dataset", default="test", help="Dataset name or JSON path") |
| 14 | +parser.add_argument("-D", "--details", action="store_true", help="Print details") |
11 | 15 | args = parser.parse_args() |
12 | 16 |
|
13 | | -ds = CTFDataset(args.dataset) |
14 | | -challenge = CTFChallenge(ds.get(args.challenge), ds.basedir) |
| 17 | +if args.dataset and args.dataset.endswith(".json"): |
| 18 | + ds = CTFDataset(dataset_json=args.dataset) |
| 19 | +else: |
| 20 | + ds = CTFDataset(split=args.dataset) |
15 | 21 |
|
16 | | -print("Name:", challenge.name) |
17 | | -print("Category:", challenge.category) |
18 | | -print("Compose:", challenge.container) |
19 | | -print("Flag:", challenge.real_flag) |
20 | | -print("Files:", challenge.files) |
21 | | -print("Server:", challenge.server_name, challenge.port) |
| 22 | +chals = ds.filter(year=args.year, event=args.event, category=args.category, challenge=args.name) |
| 23 | + |
| 24 | +for chal in map(lambda c: CTFChallenge(c, basedir=ds.basedir), chals): |
| 25 | + print(chal.canonical_name) |
| 26 | + if args.details: |
| 27 | + print("\tName:", chal.name) |
| 28 | + print("\tCategory:", chal.category) |
| 29 | + print("\tCompose:", chal.container) |
| 30 | + print("\tFlag:", chal.flag) |
| 31 | + print("\tFiles:", chal.files) |
| 32 | + if chal.server_name: |
| 33 | + print("\tServer:", chal.server_name, chal.port) |
0 commit comments