summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-01-02 18:29:01 +0000
committerdavidovski <david@davidovski.xyz>2022-01-02 18:29:01 +0000
commit15924240bee27f17a65e77dd56cdfb91404bc9b1 (patch)
tree6214c395c9d6ad8a8a2db70b0723fc8b59e02681 /src
parent313d7d23237c142a833e4f0e05593f50f8805b3e (diff)
removed auto-importing keys
Diffstat (limited to 'src')
-rw-r--r--src/verbs/install.py48
-rw-r--r--src/verbs/sync.py46
-rw-r--r--src/xi.py2
3 files changed, 48 insertions, 48 deletions
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 <alias> <url>")
+
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",