Compare commits

...

2 Commits

Author SHA1 Message Date
ba87abad46 Fix confdir passing to workers 2023-11-21 13:06:43 +00:00
13e1a19c5b Fix confdir passing to workers 2023-11-21 13:05:55 +00:00
2 changed files with 25 additions and 11 deletions

View File

@ -50,6 +50,7 @@ def main():
def _main():
args = docopt(doc)
config.init_confdir()
if args["--user"]:
return _user(args)
listen = args["-l"]

View File

@ -7,7 +7,7 @@ from functools import wraps
from hashlib import sha256
from pathlib import Path, PurePath
from time import time
from contextlib import suppress
import msgspec
@ -37,6 +37,22 @@ config = None
conffile = None
def init_confdir():
if p := os.environ.get("CISTA_HOME"):
home = Path(p)
else:
xdg = os.environ.get("XDG_CONFIG_HOME")
home = (
Path(xdg).expanduser() / "cista" if xdg else Path.home() / ".config/cista"
)
if not home.exists()
home.mkdir(parents=True, exist_ok=True)
home.chmod(0o700)
global conffile
conffile = home / "db.toml"
def derived_secret(*params, len=8) -> bytes:
"""Used to derive secret keys from the main secret"""
# Each part is made the same length by hashing first
@ -62,8 +78,8 @@ def dec_hook(typ, obj):
def config_update(modify):
global config
if not conffile.exists():
conffile.parent.mkdir(parents=True, exist_ok=True)
if conffile is None:
init_confdir()
tmpname = conffile.with_suffix(".tmp")
try:
f = tmpname.open("xb")
@ -77,10 +93,6 @@ def config_update(modify):
old = conffile.read_bytes()
c = msgspec.toml.decode(old, type=Config, dec_hook=dec_hook)
except FileNotFoundError:
# No existing config file, make sure we have a folder...
confdir = conffile.parent
confdir.mkdir(parents=True, exist_ok=True)
confdir.chmod(0o700)
old = b""
c = None
c = modify(c)
@ -93,7 +105,9 @@ def config_update(modify):
f.write(new)
f.close()
if sys.platform == "win32":
conffile.unlink() # Windows doesn't support atomic replace
# Windows doesn't support atomic replace
with suppress(FileNotFoundError):
conffile.unlink()
tmpname.rename(conffile) # Atomic replace
except:
f.close()
@ -121,9 +135,8 @@ def modifies_config(modify):
def load_config():
global config, conffile
conffile = (
Path(os.environ.get("CISTA_HOME")) or Path.home() / ".local/share/cista/db.toml"
)
if conffile is None:
init_confdir()
config = msgspec.toml.decode(conffile.read_bytes(), type=Config, dec_hook=dec_hook)