From 15924240bee27f17a65e77dd56cdfb91404bc9b1 Mon Sep 17 00:00:00 2001 From: davidovski Date: Sun, 2 Jan 2022 18:29:01 +0000 Subject: removed auto-importing keys --- install-system.sh | 4 ++++ src/verbs/install.py | 48 +++++++++++++++++++++--------------------------- src/verbs/sync.py | 46 +++++++++++++++++++++++++--------------------- src/xi.py | 2 ++ 4 files changed, 52 insertions(+), 48 deletions(-) diff --git a/install-system.sh b/install-system.sh index 5eda255..aef3b72 100755 --- a/install-system.sh +++ b/install-system.sh @@ -3,6 +3,8 @@ # This is just a temporary install script that will install xilinux into a folder # recommended to run with root +KEY="davidovski https://xi.davidovski.xyz/repo/xi.pub" + R=$1 mkdir -p $R @@ -29,6 +31,7 @@ xi sync xi -nyl --root . install $(ls /var/lib/xipkg/packages/core) xi -nyl --root . install xipkg +xi -nyl --root . keyimport $KEY cd bin ln -s bash sh @@ -47,3 +50,4 @@ cat > $R/etc/resolv.conf << "EOF" nameserver 80.80.80.80 nameserver 80.80.81.81 EOF + diff --git a/src/verbs/install.py b/src/verbs/install.py index 7b6fd7d..929f8c4 100644 --- a/src/verbs/install.py +++ b/src/verbs/install.py @@ -179,34 +179,28 @@ def find_all_dependencies(package_names, options, config): # probably better way to implement this obligatory wildcard # 100% sure there is a better way of doing this than installing all packages from a repo # maybe some sort of package grouping (or empty package with deps on all needed) - if dep[-2:] == "/*": - repo = dep[:-2] - repo_dir = os.path.join(config["dir"]["packages"], repo) - files = os.listdir(repo_dir) - return files + dep_checksum, dep_sources, dep_repo = find_package(dep, config["repos"], config["dir"]["packages"], config["sources"]) + + if dep_checksum is not None: + info = retrieve_package_info( + dep_sources, dep_checksum, dep, config, + verbose=options["v"], skip_verification=options["u"] + ) + + if len(info) > 0: + if not dep in all_deps: + all_deps.append(dep) + deps = resolve_dependencies(info) + for dep in deps: + if not dep in all_deps: + if is_installed(dep, config, options["r"]): + if options["v"]: print(colors.YELLOW + f"Package {dep} has already been installed") + else: + to_check.append(dep) + elif options["v"]: + util.print_reset(colors.CLEAR_LINE + colors.RED + f"Failed to retrieve info for {dep}") else: - dep_checksum, dep_sources, dep_repo = find_package(dep, config["repos"], config["dir"]["packages"], config["sources"]) - - if dep_checksum is not None: - info = retrieve_package_info( - dep_sources, dep_checksum, dep, config, - verbose=options["v"], skip_verification=options["u"] - ) - - if len(info) > 0: - if not dep in all_deps: - all_deps.append(dep) - deps = resolve_dependencies(info) - for dep in deps: - if not dep in all_deps: - if is_installed(dep, config, options["r"]): - if options["v"]: print(colors.YELLOW + f"Package {dep} has already been installed") - else: - to_check.append(dep) - elif options["v"]: - util.print_reset(colors.CLEAR_LINE + colors.RED + f"Failed to retrieve info for {dep}") - else: - if options["v"]: util.print_reset(colors.CLEAR_LINE + colors.RED + f"Failed to find package {dep}") + if options["v"]: util.print_reset(colors.CLEAR_LINE + colors.RED + f"Failed to find package {dep}") if len(all_deps) > 0: util.loading_bar(len(all_deps), len(all_deps) + len(to_check), "Resolved dependencies") diff --git a/src/verbs/sync.py b/src/verbs/sync.py index 07ed2ec..13093c5 100644 --- a/src/verbs/sync.py +++ b/src/verbs/sync.py @@ -83,27 +83,6 @@ def save_package(package, info, location): return exists -###### !!! ####### -# THIS SHOULD BE A USER ACTION -# security problem to automatically decide to verify keys -# users should do this manually whenever they add a new source -###### !!! ####### -def import_key(source, url, config, verbose=False): - keyname = "xi.pub" - - keychain_dir = config["dir"]["keychain"] - util.mkdir(keychain_dir) - key_path = os.path.join(keychain_dir, source + ".pub") - - if os.path.exists(key_path): - if verbose: - print(colors.LIGHT_BLACK + f"Skipping already imported key from {source}") - return 0 - - else: - key_path = util.curl_to_file(url + keyname if url[-1] == "/" else f"/{keyname}", key_path) - return 1 - def test_source(source, url): # requesting a resource may not be the best way to do this, caching etc start = time.time() @@ -188,3 +167,28 @@ def sync(args, options, config): #for source, url in sources: #compelted += 1 #util.loading_bar(completed, total, f"Importing keys") + +def import_key(name, url, config, verbose=False, root="/"): + keychain_dir = util.add_path(root, config["dir"]["keychain"]) + util.mkdir(keychain_dir) + key_path = os.path.join(keychain_dir, name + ".pub") + + if os.path.exists(key_path): + print(colors.RED + f"Skipping existing key with name {name}") + else: + try: + key_path = util.curl_to_file(url, key_path) + print(colors.GREEN + f"Imported {name}.pub") + except Exception as e: + print(colors.RED + f"Failed to import key:", colors.DARK_RED + str(e)) + +def keyimport(args, options, config): + if len(args) > 1: + alias = args[0] + url = args[1] + + import_key(alias, url, config, verbose=options["v"], root=options["r"]) + + else: + print(colors.RED + "Usage: keyimport ") + diff --git a/src/xi.py b/src/xi.py index 157fc22..e5a74fb 100644 --- a/src/xi.py +++ b/src/xi.py @@ -10,9 +10,11 @@ from verbs.info import info from verbs.remove import remove from verbs.install import install from verbs.update import update +from verbs.sync import keyimport verbs = { v: globals()[v] for v in [ "search", + "keyimport", "file", "info", "update", -- cgit v1.2.1