Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErica Portnoy <ebportnoy@gmail.com>2022-10-29 03:19:59 +0300
committerErica Portnoy <ebportnoy@gmail.com>2022-10-29 03:19:59 +0300
commitc6efe45e78aa140570dde419109b266acfe4252c (patch)
tree94c0f3216eda15784196218c97d6a18fafd9adda
parent928a7ec53121b61d923e7c95c7baae8b2804bc58 (diff)
factor out reporting results codeupdate-config
-rw-r--r--certbot/certbot/_internal/main.py135
1 files changed, 75 insertions, 60 deletions
diff --git a/certbot/certbot/_internal/main.py b/certbot/certbot/_internal/main.py
index 9e6a1a146..f3035c9f6 100644
--- a/certbot/certbot/_internal/main.py
+++ b/certbot/certbot/_internal/main.py
@@ -1653,6 +1653,80 @@ def make_or_verify_needed_dirs(config: configuration.NamespaceConfig) -> None:
util.make_or_verify_dir(hook_dir, strict=config.strict_permissions)
+def _report_reconfigure_results(renewal_file: str, orig_renewal_conf: configobj.ConfigObj) -> None:
+ """Reports the outcome of certificate renewal reconfiguration to the user.
+
+ :param renewal_file: Path to the cert's renewal file
+ :type renewal_file: str
+
+ :param orig_renewal_conf: Loaded original renewal configuration
+ :type orig_renewal_conf: configobj.ConfigObj
+
+ :returns: `None`
+ :rtype: None
+
+ """
+ try:
+ final_renewal_conf = configobj.ConfigObj(
+ renewal_file, encoding='utf-8', default_encoding='utf-8')
+ except configobj.ConfigObjError:
+ raise errors.CertStorageError(
+ f'error parsing {renewal_file}')
+
+ orig_renewal_params = orig_renewal_conf['renewalparams']
+ orig_renewal_params_set = set(orig_renewal_params.items())
+ final_renewal_params = final_renewal_conf['renewalparams']
+ final_renewal_params_set = set(final_renewal_params.items())
+ changes = orig_renewal_params_set ^ final_renewal_params_set
+
+ if len(changes) == 0:
+ success_message = '\nNo changes were made to the renewal configuration.'
+ display_util.notify(success_message)
+ return
+ else:
+ success_message = '\nSuccessfully updated configuration.'
+
+ results = {}
+ for x, _ in changes:
+ if x not in results:
+ results[x] = 0
+ results[x] += 1
+
+
+ added_removed = [x for x, y in results.items() if y == 1]
+ if len(added_removed) > 0:
+ added = {}
+ removed = {}
+ for name in added_removed:
+ if name in orig_renewal_params:
+ removed[name] = orig_renewal_params[name]
+ if name in final_renewal_params:
+ added[name] = final_renewal_params[name]
+
+ if len(added) > 0:
+ success_message += '\nThe following options were added:'
+ for name, value in added.items():
+ success_message += f'\n {name}: {value}'
+
+ # I cannot think of how someone could possibly remove an option given current
+ # functionality, but kind of want to leave this anyway for completeness.
+ if len(removed) > 0:
+ success_message += '\nThe following options were removed:'
+ for name, value in removed.items():
+ success_message += f'\n {name}: {value}'
+
+ changed = [x for x, y in results.items() if y > 1]
+ if len(changed) > 0:
+ success_message += '\nThe following options were changed:'
+ for name in changed:
+ success_message += f'\n {name}: {orig_renewal_params[name]} ' +\
+ f'--> {final_renewal_params[name]}'
+
+ success_message += '\nChanges will apply when the certificate renews.'
+
+ display_util.notify(success_message)
+
+
def reconfigure(config: configuration.NamespaceConfig,
plugins: plugins_disco.PluginsRegistry) -> None:
"""Allow the user to set new configuration options for an existing certificate without
@@ -1734,66 +1808,7 @@ def reconfigure(config: configuration.NamespaceConfig,
# this function will update lineage.configuration with the new values, and save it to disk
renewal_candidate.save_new_config_values(lineage_config)
- # Display results
- try:
- final_renewal_conf = configobj.ConfigObj(
- renewal_file, encoding='utf-8', default_encoding='utf-8')
- except configobj.ConfigObjError:
- raise errors.CertStorageError(
- f'error parsing {renewal_file}')
-
- orig_renewal_params = orig_renewal_conf['renewalparams']
- orig_renewal_params_set = set(orig_renewal_params.items())
- final_renewal_params = final_renewal_conf['renewalparams']
- final_renewal_params_set = set(final_renewal_params.items())
- changes = orig_renewal_params_set ^ final_renewal_params_set
-
- if len(changes) == 0:
- success_message = '\nNo changes were made to the renewal configuration.'
- display_util.notify(success_message)
- return
- else:
- success_message = '\nSuccessfully updated configuration.'
-
- results = {}
- for x, _ in changes:
- if x not in results:
- results[x] = 0
- results[x] += 1
-
-
- added_removed = [x for x, y in results.items() if y == 1]
- if len(added_removed) > 0:
- added = {}
- removed = {}
- for name in added_removed:
- if name in orig_renewal_params:
- removed[name] = orig_renewal_params[name]
- if name in final_renewal_params:
- added[name] = final_renewal_params[name]
-
- if len(added) > 0:
- success_message += '\nThe following options were added:'
- for name, value in added.items():
- success_message += f'\n {name}: {value}'
-
- # I cannot think of how someone could possibly remove an option given current
- # functionality, but kind of want to leave this anyway for completeness.
- if len(removed) > 0:
- success_message += '\nThe following options were removed:'
- for name, value in removed.items():
- success_message += f'\n {name}: {value}'
-
- changed = [x for x, y in results.items() if y > 1]
- if len(changed) > 0:
- success_message += '\nThe following options were changed:'
- for name in changed:
- success_message += f'\n {name}: {orig_renewal_params[name]} ' +\
- f'--> {final_renewal_params[name]}'
-
- success_message += '\nChanges will apply when the certificate renews.'
-
- display_util.notify(success_message)
+ _report_reconfigure_results(renewal_file, orig_renewal_conf)
@contextmanager