|
1 | 1 | #!/usr/bin/env python3
|
2 | 2 | import importlib.metadata
|
| 3 | +import json |
3 | 4 | import logging
|
4 | 5 | import os
|
| 6 | +import sys |
| 7 | +import urllib.request |
5 | 8 |
|
6 | 9 | import coloredlogs
|
7 | 10 |
|
| 11 | +VERSION = importlib.metadata.version("ctf-script") |
| 12 | + |
| 13 | +if len(sys.argv) > 1 and sys.argv[1] == "version": |
| 14 | + print(VERSION) |
| 15 | + exit(code=0) |
| 16 | + |
8 | 17 | ENV = {}
|
9 | 18 | for k, v in os.environ.items():
|
10 | 19 | ENV[k] = v
|
11 | 20 |
|
12 |
| -VERSION = importlib.metadata.version("ctf-script") |
13 |
| - |
14 | 21 | LOG = logging.getLogger()
|
15 | 22 | LOG.setLevel(level=logging.DEBUG)
|
16 | 23 | coloredlogs.install(level="DEBUG", logger=LOG)
|
17 | 24 |
|
18 | 25 |
|
| 26 | +def check_tool_version(): |
| 27 | + with urllib.request.urlopen( |
| 28 | + url="https://api.github.com/repos/nsec/ctf-script/releases/latest" |
| 29 | + ) as r: |
| 30 | + if r.getcode() != 200: |
| 31 | + LOG.debug(r.read().decode()) |
| 32 | + LOG.error("Could not verify the latest release.") |
| 33 | + else: |
| 34 | + try: |
| 35 | + latest_version = json.loads(s=r.read().decode())["tag_name"] |
| 36 | + except Exception as e: |
| 37 | + LOG.debug(e) |
| 38 | + LOG.error("Could not verify the latest release.") |
| 39 | + |
| 40 | + compare = 0 |
| 41 | + for current_part, latest_part in zip( |
| 42 | + [int(part) for part in VERSION.split(".")], |
| 43 | + [int(part) for part in latest_version.split(".")], |
| 44 | + ): |
| 45 | + if current_part < latest_part: |
| 46 | + compare = -1 |
| 47 | + break |
| 48 | + elif current_part > latest_part: |
| 49 | + compare = 1 |
| 50 | + break |
| 51 | + |
| 52 | + match compare: |
| 53 | + case 0 | 1: |
| 54 | + LOG.debug("Script is up to date.") |
| 55 | + case -1: |
| 56 | + LOG.critical( |
| 57 | + "Script is outdated. Please update to the latest release before continuing." |
| 58 | + ) |
| 59 | + exit(code=1) |
| 60 | + |
| 61 | + |
| 62 | +check_tool_version() |
| 63 | + |
| 64 | + |
19 | 65 | def find_ctf_root_directory() -> str:
|
20 | 66 | path = os.path.join(os.getcwd(), ".")
|
21 | 67 |
|
|
0 commit comments