diff --git a/server/server_key.py b/server/server_key.py index 66fd76b6e..eba0b9248 100644 --- a/server/server_key.py +++ b/server/server_key.py @@ -9,13 +9,26 @@ B{Entropy Package Manager Server GPG Keys text interface}. """ -from entropy.output import red, blue, purple, darkgreen, bold, brown, teal -from entropy.const import etpConst, const_convert_to_rawstring +from entropy.output import blue, purple, darkgreen, bold, brown, teal +from entropy.const import const_convert_to_rawstring from entropy.server.interfaces import Server from entropy.security import Repository from entropy.i18n import _ from entropy.tools import convert_unix_time_to_human_time +GPG_MSG_SHOWN = False + +def get_gpg(entropy_srv): + obj = Repository() + global GPG_MSG_SHOWN + if not GPG_MSG_SHOWN: + entropy_srv.updateProgress("%s: %s" % ( + blue(_("GPG interface loaded, home directory")), + brown(Repository.GPG_HOME),) + ) + GPG_MSG_SHOWN = True + return obj + def key(myopts): if not myopts: @@ -23,8 +36,8 @@ def key(myopts): cmd = myopts.pop(0) rc = -10 - Entropy = Server() - sys_set = Entropy.SystemSettings[Entropy.sys_settings_plugin_id]['server'] + entropy_srv = Server() + sys_set = entropy_srv.SystemSettings[entropy_srv.sys_settings_plugin_id]['server'] avail_repos = sys_set['repositories'] def validate_repos(repos, entropy_srv): @@ -43,58 +56,58 @@ def key(myopts): repos: return rc elif cmd in ("create", "delete", "sign",): - v_rc = validate_repos(repos, Entropy) + v_rc = validate_repos(repos, entropy_srv) if v_rc != 0: return v_rc try: - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) except Repository.GPGError as err: - Entropy.updateProgress("%s: %s" % ( + entropy_srv.updateProgress("%s: %s" % ( _("GnuPG not available"), err,), type = "error") return 1 if cmd == "create" and repos: for repo in repos: - rc = _create_keys(Entropy, repo) + rc = _create_keys(entropy_srv, repo) if rc != 0: break elif cmd == "delete" and repos: for repo in repos: - rc = _delete_keys(Entropy, repo) + rc = _delete_keys(entropy_srv, repo) if rc != 0: break elif cmd == "status": if not repos: - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) repos = sorted(repo_sec.get_keys(private = True)) for repo in repos: - rc = _show_status(Entropy, repo) + rc = _show_status(entropy_srv, repo) if rc != 0: break elif cmd == "sign" and repos: for repo in repos: - rc = _sign_packages(Entropy, repo) + rc = _sign_packages(entropy_srv, repo) if rc != 0: break elif cmd == "import" and len(repos) == 3: - rc = _import_key(Entropy, repos[0], repos[1], repos[2]) + rc = _import_key(entropy_srv, repos[0], repos[1], repos[2]) elif cmd == "export-public" and len(repos) == 2: - rc = _export_key(Entropy, True, repos[0], repos[1]) + rc = _export_key(entropy_srv, True, repos[0], repos[1]) elif cmd == "export-private" and len(repos) == 2: - rc = _export_key(Entropy, False, repos[0], repos[1]) + rc = _export_key(entropy_srv, False, repos[0], repos[1]) finally: - Entropy.destroy() + entropy_srv.destroy() - del Entropy + del entropy_srv return rc @@ -103,7 +116,7 @@ def _import_key(entropy_srv, repo, privkey_path, pubkey_path): entropy_srv.updateProgress("%s: %s" % ( blue(_("Importing keypair for repository")), purple(repo),)) - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) if repo_sec.is_keypair_available(repo): entropy_srv.updateProgress("%s: %s" % ( blue(_("Another keypair already exists for repository")), @@ -134,7 +147,7 @@ def _import_key(entropy_srv, repo, privkey_path, pubkey_path): def _export_key(entropy_srv, is_pubkey, repo, store_path): - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) key_msg = _("Exporting private key for repository") func_check = repo_sec.is_privkey_available @@ -187,7 +200,7 @@ def _create_keys(entropy_srv, repo): entropy_srv.updateProgress("%s: %s" % ( blue(_("Creating keys for repository")), purple(repo),)) - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) if repo_sec.is_keypair_available(repo): entropy_srv.updateProgress("%s: %s" % ( blue(_("Another key already exists for repository")), @@ -199,17 +212,17 @@ def _create_keys(entropy_srv, repo): if answer == _("No"): return 1 - def mycb(s): - return s + def mycb(sstr): + return sstr - def mycb_int(s): + def mycb_int(sstr): try: - int(s) + int(sstr) except ValueError: return False return True - def mycb_ok(s): + def mycb_ok(sstr): return True input_data = [ @@ -247,6 +260,15 @@ def _create_keys(entropy_srv, repo): ), type = "warning" ) + entropy_srv.updateProgress( + darkgreen(_("Make friggin' sure to generate a revoke key and store it in a very safe place.")), + type = "warning" + ) + entropy_srv.updateProgress( + "# gpg --homedir '%s' --armor --output revoke.asc --gen-revoke '%s'" % ( + Repository.GPG_HOME, key_fp), + type = "info" + ) # remove signatures from repository database dbconn = entropy_srv.open_server_repository(repo = repo, read_only = False) @@ -258,7 +280,7 @@ def _delete_keys(entropy_srv, repo): entropy_srv.updateProgress("%s: %s" % ( blue(_("Deleting keys for repository")), purple(repo),)) - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) if not repo_sec.is_keypair_available(repo): entropy_srv.updateProgress("%s: %s" % ( blue(_("No keys available for given repository")), @@ -297,7 +319,7 @@ def _delete_keys(entropy_srv, repo): return 0 def _show_status(entropy_srv, repo): - repo_sec = Repository() + repo_sec = get_gpg(entropy_srv) try: key_meta = repo_sec.get_key_metadata(repo) diff --git a/server/server_reagent.py b/server/server_reagent.py index f99dff0f0..1fa579cd4 100644 --- a/server/server_reagent.py +++ b/server/server_reagent.py @@ -882,7 +882,6 @@ def spm_compile_pkgset(pkgsets, do_rebuild = False, do_dbupdate = False, return 1 spm = Entropy.Spm() - done_atoms = set()