From be093ed3b3745c4887bcfcd1803ee47435a08faf Mon Sep 17 00:00:00 2001 From: venus Date: Tue, 14 Apr 2026 03:36:14 -0500 Subject: [PATCH] updated config logic to read from one file --- config.json | 4 ---- config.toml | 4 ++++ src/ctf/main.py | 28 ++++++++++++++++++++++++---- src/ctf/utils.py | 17 +++++++++-------- 4 files changed, 37 insertions(+), 16 deletions(-) delete mode 100644 config.json create mode 100644 config.toml diff --git a/config.json b/config.json deleted file mode 100644 index 6fc9e1b..0000000 --- a/config.json +++ /dev/null @@ -1,4 +0,0 @@ - -{ - "data_dir": "/home/venus/code/ctf/" -} diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..bbd563f --- /dev/null +++ b/config.toml @@ -0,0 +1,4 @@ +[Enviroment] +competition = "mycomp" +catagory = "somecat" +challenge = "somechal" diff --git a/src/ctf/main.py b/src/ctf/main.py index c7143f7..89953c3 100644 --- a/src/ctf/main.py +++ b/src/ctf/main.py @@ -3,11 +3,31 @@ import argparse from ctf.utils import state -state.testVal = 123 -state.testVal2 = 123 + +def setArguments(): + parser = argparse.ArgumentParser( #type:ignore + prog="ctf", + description="A collection of cli tools to improve your ctf workflow", + epilog="") + parser.add_argument('action') # positional argument, action to be taken + parser.add_argument('-c', '--count') # option that takes a value + parser.add_argument('-v', '--verbose', action='store_true') # on/off flag + args = parser.parse_args() + return args + + def main(): - print("Hello from ctf!") - print(f"Stored: {state.testVal}") + state.info = "me" + # Parse arguments + # Current Ctf + # Current Challenge + # Validate args + # Call library functiions + # Set Ctf + args = setArguments() + if args.action == set: + print(f"setting ctf to{args.ctf}") + if __name__ == "__main__": diff --git a/src/ctf/utils.py b/src/ctf/utils.py index a6588ff..ef63e37 100644 --- a/src/ctf/utils.py +++ b/src/ctf/utils.py @@ -3,15 +3,16 @@ import tomllib import json +import toml from pathlib import Path from platformdirs import user_config_dir -from platformdirs import user_data_dir # Parse config file class ConfigManager: - # CONFIG_DIR = Path(user_config_dir("ctf")) #config directory is $XDG_CONFIG_HOME/ctf/ + CONFIG_DIR = Path(user_config_dir("ctf")) #config directory is $XDG_CONFIG_HOME/ctf/ def set_defaults(self, key = "all"): + # set all default options for the config if key == "data_dir" or key == "all" : self.data_dir = Path("user_data_dir/ctf") def __init__(self, file_path = "user_config_dir/ctf.json"): @@ -33,19 +34,19 @@ class ConfigManager: return f"ConfigManager({self.__dict__})" class StateManager: - _state_file : Path + _path : Path _data: dict def __init__(self, data_dir: Path): # DATA_DIR = Path(user_data_dir("ctf")) #config directory is $XDG_CONFIG_HOME/ctf/ data_dir.mkdir(parents = True, exist_ok = True) - object.__setattr__(self, "_state_file", data_dir / "state.json") # set self._path to data_dir safely + object.__setattr__(self, "_path", "user_config_dir/config.json") # set self._path to data_dir safely object.__setattr__(self, "_data", self._load()) # load objects into self def _load(self): - if self._state_file.exists(): - with open(self._state_file, "r") as f: - return json.load(f) + if self._path.exists(): + with open(self._path, "r") as f: + return toml.load(f) return{} def __getattr__(self, name): @@ -56,7 +57,7 @@ class StateManager: # use state.challenge = "run" to set challenge and run to dictionary # writes the whole dict to disk self._data[name] = value - with open(self._state_file, "w",) as f: + with open(self._path, "w",) as f: json.dump(self._data, f, indent=4) def __repr__(self): return f"StateManager({self.__dict__})"