Compare commits
2 Commits
a267a67947
...
ba87abad46
Author | SHA1 | Date | |
---|---|---|---|
ba87abad46 | |||
13e1a19c5b |
|
@ -50,6 +50,7 @@ def main():
|
|||
|
||||
def _main():
|
||||
args = docopt(doc)
|
||||
config.init_confdir()
|
||||
if args["--user"]:
|
||||
return _user(args)
|
||||
listen = args["-l"]
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user