diff options
author | Erica Portnoy <ebportnoy@gmail.com> | 2022-10-29 03:19:59 +0300 |
---|---|---|
committer | Erica Portnoy <ebportnoy@gmail.com> | 2022-10-29 03:19:59 +0300 |
commit | c6efe45e78aa140570dde419109b266acfe4252c (patch) | |
tree | 94c0f3216eda15784196218c97d6a18fafd9adda | |
parent | 928a7ec53121b61d923e7c95c7baae8b2804bc58 (diff) |
factor out reporting results codeupdate-config
-rw-r--r-- | certbot/certbot/_internal/main.py | 135 |
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 |