Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-certbot-dns-dnsmadeeasy for openSUSE:Factory checked in at 2025-06-16 12:26:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-dnsmadeeasy (Old) and /work/SRC/openSUSE:Factory/.python-certbot-dns-dnsmadeeasy.new.19631 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot-dns-dnsmadeeasy" Mon Jun 16 12:26:26 2025 rev:47 rq:1286011 version:4.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-certbot-dns-dnsmadeeasy/python-certbot-dns-dnsmadeeasy.changes 2025-04-22 17:29:48.782937472 +0200 +++ /work/SRC/openSUSE:Factory/.python-certbot-dns-dnsmadeeasy.new.19631/python-certbot-dns-dnsmadeeasy.changes 2025-06-16 12:26:29.612306258 +0200 @@ -1,0 +2,7 @@ +Fri Jun 13 14:51:13 UTC 2025 - Markéta Machová <mmach...@suse.com> + +- update to version 4.1.1 + * Switched to src-layout from flat-layout to accommodate PEP 517 pip + editable installs + +------------------------------------------------------------------- Old: ---- certbot_dns_dnsmadeeasy-4.0.0.tar.gz New: ---- certbot_dns_dnsmadeeasy-4.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-certbot-dns-dnsmadeeasy.spec ++++++ --- /var/tmp/diff_new_pack.K4MjGS/_old 2025-06-16 12:26:30.164329244 +0200 +++ /var/tmp/diff_new_pack.K4MjGS/_new 2025-06-16 12:26:30.164329244 +0200 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-certbot-dns-dnsmadeeasy -Version: 4.0.0 +Version: 4.1.1 Release: 0 Summary: DNS Made Easy Authenticator plugin for Certbot License: Apache-2.0 ++++++ certbot_dns_dnsmadeeasy-4.0.0.tar.gz -> certbot_dns_dnsmadeeasy-4.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/MANIFEST.in new/certbot_dns_dnsmadeeasy-4.1.1/MANIFEST.in --- old/certbot_dns_dnsmadeeasy-4.0.0/MANIFEST.in 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/MANIFEST.in 2025-06-12 20:08:34.000000000 +0200 @@ -1,6 +1,6 @@ include LICENSE.txt include README.rst recursive-include docs * -include certbot_dns_dnsmadeeasy/py.typed +include src/certbot_dns_dnsmadeeasy/py.typed global-exclude __pycache__ global-exclude *.py[cod] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/PKG-INFO new/certbot_dns_dnsmadeeasy-4.1.1/PKG-INFO --- old/certbot_dns_dnsmadeeasy-4.0.0/PKG-INFO 2025-04-08 00:03:37.820513500 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/PKG-INFO 2025-06-12 20:08:40.030581500 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: certbot-dns-dnsmadeeasy -Version: 4.0.0 +Version: 4.1.1 Summary: DNS Made Easy DNS Authenticator plugin for Certbot Home-page: https://github.com/certbot/certbot Author: Certbot Project @@ -24,11 +24,11 @@ Classifier: Topic :: System :: Networking Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Utilities -Requires-Python: >=3.9 +Requires-Python: >=3.9.2 License-File: LICENSE.txt Requires-Dist: dns-lexicon>=3.14.1 -Requires-Dist: acme>=4.0.0 -Requires-Dist: certbot>=4.0.0 +Requires-Dist: acme>=4.1.1 +Requires-Dist: certbot>=4.1.1 Provides-Extra: docs Requires-Dist: Sphinx>=1.0; extra == "docs" Requires-Dist: sphinx_rtd_theme; extra == "docs" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/__init__.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/__init__.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,90 +0,0 @@ -""" -The `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin automates the process of -completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and -subsequently removing, TXT records using the DNS Made Easy API. - -.. note:: - The plugin is not installed by default. It can be installed by heading to - `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_, choosing your system and - selecting the Wildcard tab. - -Named Arguments ---------------- - -========================================= ===================================== -``--dns-dnsmadeeasy-credentials`` DNS Made Easy credentials_ INI file. - (Required) -``--dns-dnsmadeeasy-propagation-seconds`` The number of seconds to wait for DNS - to propagate before asking the ACME - server to verify the DNS record. - (Default: 60) -========================================= ===================================== - - -Credentials ------------ - -Use of this plugin requires a configuration file containing DNS Made Easy API -credentials, obtained from your DNS Made Easy -`account page <https://cp.dnsmadeeasy.com/account/info>`_. - -.. code-block:: ini - :name: credentials.ini - :caption: Example credentials file: - - # DNS Made Easy API credentials used by Certbot - dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a - dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55 - -The path to this file can be provided interactively or using the -``--dns-dnsmadeeasy-credentials`` command-line argument. Certbot records the path -to this file for use during renewal, but does not store the file's contents. - -.. caution:: - You should protect these API credentials as you would the password to your - DNS Made Easy account. Users who can read this file can use these credentials - to issue arbitrary API calls on your behalf. Users who can cause Certbot to - run using these credentials can complete a ``dns-01`` challenge to acquire - new certificates or revoke existing certificates for associated domains, - even if those domains aren't being managed by this server. - -Certbot will emit a warning if it detects that the credentials file can be -accessed by other users on your system. The warning reads "Unsafe permissions -on credentials configuration file", followed by the path to the credentials -file. This warning will be emitted each time Certbot uses the credentials file, -including for renewal, and cannot be silenced except by addressing the issue -(e.g., by using a command like ``chmod 600`` to restrict access to the file). - - -Examples --------- - -.. code-block:: bash - :caption: To acquire a certificate for ``example.com`` - - certbot certonly \\ - --dns-dnsmadeeasy \\ - --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ - -d example.com - -.. code-block:: bash - :caption: To acquire a single certificate for both ``example.com`` and - ``www.example.com`` - - certbot certonly \\ - --dns-dnsmadeeasy \\ - --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ - -d example.com \\ - -d www.example.com - -.. code-block:: bash - :caption: To acquire a certificate for ``example.com``, waiting 2 minutes - for DNS propagation - - certbot certonly \\ - --dns-dnsmadeeasy \\ - --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ - --dns-dnsmadeeasy-propagation-seconds 120 \\ - -d example.com - -""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/__init__.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/__init__.py 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -"""Internal implementation of `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,61 +0,0 @@ -"""DNS Authenticator for DNS Made Easy DNS.""" -import logging -from typing import Any -from typing import Callable -from typing import Optional - -from requests import HTTPError - -from certbot import errors -from certbot.plugins import dns_common_lexicon - -logger = logging.getLogger(__name__) - -ACCOUNT_URL = 'https://cp.dnsmadeeasy.com/account/info' - - -class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator): - """DNS Authenticator for DNS Made Easy - - This Authenticator uses the DNS Made Easy API to fulfill a dns-01 challenge. - """ - - description = ('Obtain certificates using a DNS TXT record (if you are using DNS Made Easy for ' - 'DNS).') - - def __init__(self, *args: Any, **kwargs: Any) -> None: - super().__init__(*args, **kwargs) - self._add_provider_option('api-key', - 'API key for DNS Made Easy account, ' - f'obtained from {ACCOUNT_URL}', - 'auth_username') - self._add_provider_option('secret-key', - 'Secret key for DNS Made Easy account, ' - f'obtained from {ACCOUNT_URL}', - 'auth_token') - - @classmethod - def add_parser_arguments(cls, add: Callable[..., None], - default_propagation_seconds: int = 60) -> None: - super().add_parser_arguments(add, default_propagation_seconds) - add('credentials', help='DNS Made Easy credentials INI file.') - - def more_info(self) -> str: - return 'This plugin configures a DNS TXT record to respond to a dns-01 challenge using ' + \ - 'the DNS Made Easy API.' - - @property - def _provider_name(self) -> str: - return 'dnsmadeeasy' - - def _handle_http_error(self, e: HTTPError, domain_name: str) -> Optional[errors.PluginError]: - if domain_name in str(e) and str(e).startswith('404 Client Error: Not Found for url:'): - return None - - hint = None - if str(e).startswith('403 Client Error: Forbidden for url:'): - hint = 'Are your API key and Secret key values correct?' - - hint_disp = f' ({hint})' if hint else '' - - return errors.PluginError(f'Error determining zone identifier: {e}.{hint_disp}') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -"""certbot-dns-dnsmadeeasy tests""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,43 +0,0 @@ -"""Tests for certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy.""" - -import sys -from unittest import mock - -import pytest -from requests import Response -from requests.exceptions import HTTPError - -from certbot.compat import os -from certbot.plugins import dns_test_common -from certbot.plugins import dns_test_common_lexicon -from certbot.plugins.dns_test_common import DOMAIN -from certbot.tests import util as test_util - -API_KEY = 'foo' -SECRET_KEY = 'bar' - - -class AuthenticatorTest(test_util.TempDirTestCase, - dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - - DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) - LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.', response=Response()) - - def setUp(self): - super().setUp() - - from certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy import Authenticator - - path = os.path.join(self.tempdir, 'file.ini') - dns_test_common.write({"dnsmadeeasy_api_key": API_KEY, - "dnsmadeeasy_secret_key": SECRET_KEY}, - path) - - self.config = mock.MagicMock(dnsmadeeasy_credentials=path, - dnsmadeeasy_propagation_seconds=0) # don't wait during tests - - self.auth = Authenticator(self.config, "dnsmadeeasy") - - -if __name__ == "__main__": - sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,46 +0,0 @@ -Metadata-Version: 2.4 -Name: certbot-dns-dnsmadeeasy -Version: 4.0.0 -Summary: DNS Made Easy DNS Authenticator plugin for Certbot -Home-page: https://github.com/certbot/certbot -Author: Certbot Project -Author-email: certbot-...@eff.org -License: Apache License 2.0 -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Plugins -Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Operating System :: POSIX :: Linux -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Security -Classifier: Topic :: System :: Installation/Setup -Classifier: Topic :: System :: Networking -Classifier: Topic :: System :: Systems Administration -Classifier: Topic :: Utilities -Requires-Python: >=3.9 -License-File: LICENSE.txt -Requires-Dist: dns-lexicon>=3.14.1 -Requires-Dist: acme>=4.0.0 -Requires-Dist: certbot>=4.0.0 -Provides-Extra: docs -Requires-Dist: Sphinx>=1.0; extra == "docs" -Requires-Dist: sphinx_rtd_theme; extra == "docs" -Provides-Extra: test -Requires-Dist: pytest; extra == "test" -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: home-page -Dynamic: license -Dynamic: license-file -Dynamic: provides-extra -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -LICENSE.txt -MANIFEST.in -README.rst -setup.py -certbot_dns_dnsmadeeasy/__init__.py -certbot_dns_dnsmadeeasy/py.typed -certbot_dns_dnsmadeeasy.egg-info/PKG-INFO -certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt -certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt -certbot_dns_dnsmadeeasy.egg-info/entry_points.txt -certbot_dns_dnsmadeeasy.egg-info/requires.txt -certbot_dns_dnsmadeeasy.egg-info/top_level.txt -certbot_dns_dnsmadeeasy/_internal/__init__.py -certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py -certbot_dns_dnsmadeeasy/_internal/tests/__init__.py -certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py -docs/.gitignore -docs/Makefile -docs/api.rst -docs/conf.py -docs/index.rst -docs/make.bat \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -[certbot.plugins] -dns-dnsmadeeasy = certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy:Authenticator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/requires.txt new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/requires.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/requires.txt 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -dns-lexicon>=3.14.1 -acme>=4.0.0 -certbot>=4.0.0 - -[docs] -Sphinx>=1.0 -sphinx_rtd_theme - -[test] -pytest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/top_level.txt new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/top_level.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/certbot_dns_dnsmadeeasy.egg-info/top_level.txt 2025-04-08 00:03:37.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/certbot_dns_dnsmadeeasy.egg-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -certbot_dns_dnsmadeeasy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/setup.py new/certbot_dns_dnsmadeeasy-4.1.1/setup.py --- old/certbot_dns_dnsmadeeasy-4.0.0/setup.py 2025-04-08 00:03:33.000000000 +0200 +++ new/certbot_dns_dnsmadeeasy-4.1.1/setup.py 2025-06-12 20:08:35.000000000 +0200 @@ -4,7 +4,7 @@ from setuptools import find_packages from setuptools import setup -version = '4.0.0' +version = '4.1.1' install_requires = [ 'dns-lexicon>=3.14.1', @@ -38,7 +38,7 @@ author="Certbot Project", author_email='certbot-...@eff.org', license='Apache License 2.0', - python_requires='>=3.9', + python_requires='>=3.9.2', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -60,7 +60,8 @@ 'Topic :: Utilities', ], - packages=find_packages(), + packages=find_packages(where='src'), + package_dir={'': 'src'}, include_package_data=True, install_requires=install_requires, extras_require={ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/__init__.py 2025-06-12 20:08:34.000000000 +0200 @@ -0,0 +1,90 @@ +""" +The `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin automates the process of +completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and +subsequently removing, TXT records using the DNS Made Easy API. + +.. note:: + The plugin is not installed by default. It can be installed by heading to + `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_, choosing your system and + selecting the Wildcard tab. + +Named Arguments +--------------- + +========================================= ===================================== +``--dns-dnsmadeeasy-credentials`` DNS Made Easy credentials_ INI file. + (Required) +``--dns-dnsmadeeasy-propagation-seconds`` The number of seconds to wait for DNS + to propagate before asking the ACME + server to verify the DNS record. + (Default: 60) +========================================= ===================================== + + +Credentials +----------- + +Use of this plugin requires a configuration file containing DNS Made Easy API +credentials, obtained from your DNS Made Easy +`account page <https://cp.dnsmadeeasy.com/account/info>`_. + +.. code-block:: ini + :name: credentials.ini + :caption: Example credentials file: + + # DNS Made Easy API credentials used by Certbot + dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a + dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55 + +The path to this file can be provided interactively or using the +``--dns-dnsmadeeasy-credentials`` command-line argument. Certbot records the path +to this file for use during renewal, but does not store the file's contents. + +.. caution:: + You should protect these API credentials as you would the password to your + DNS Made Easy account. Users who can read this file can use these credentials + to issue arbitrary API calls on your behalf. Users who can cause Certbot to + run using these credentials can complete a ``dns-01`` challenge to acquire + new certificates or revoke existing certificates for associated domains, + even if those domains aren't being managed by this server. + +Certbot will emit a warning if it detects that the credentials file can be +accessed by other users on your system. The warning reads "Unsafe permissions +on credentials configuration file", followed by the path to the credentials +file. This warning will be emitted each time Certbot uses the credentials file, +including for renewal, and cannot be silenced except by addressing the issue +(e.g., by using a command like ``chmod 600`` to restrict access to the file). + + +Examples +-------- + +.. code-block:: bash + :caption: To acquire a certificate for ``example.com`` + + certbot certonly \\ + --dns-dnsmadeeasy \\ + --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ + -d example.com + +.. code-block:: bash + :caption: To acquire a single certificate for both ``example.com`` and + ``www.example.com`` + + certbot certonly \\ + --dns-dnsmadeeasy \\ + --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ + -d example.com \\ + -d www.example.com + +.. code-block:: bash + :caption: To acquire a certificate for ``example.com``, waiting 2 minutes + for DNS propagation + + certbot certonly \\ + --dns-dnsmadeeasy \\ + --dns-dnsmadeeasy-credentials ~/.secrets/certbot/dnsmadeeasy.ini \\ + --dns-dnsmadeeasy-propagation-seconds 120 \\ + -d example.com + +""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/__init__.py 2025-06-12 20:08:34.000000000 +0200 @@ -0,0 +1 @@ +"""Internal implementation of `~certbot_dns_dnsmadeeasy.dns_dnsmadeeasy` plugin.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py 2025-06-12 20:08:34.000000000 +0200 @@ -0,0 +1,61 @@ +"""DNS Authenticator for DNS Made Easy DNS.""" +import logging +from typing import Any +from typing import Callable +from typing import Optional + +from requests import HTTPError + +from certbot import errors +from certbot.plugins import dns_common_lexicon + +logger = logging.getLogger(__name__) + +ACCOUNT_URL = 'https://cp.dnsmadeeasy.com/account/info' + + +class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator): + """DNS Authenticator for DNS Made Easy + + This Authenticator uses the DNS Made Easy API to fulfill a dns-01 challenge. + """ + + description = ('Obtain certificates using a DNS TXT record (if you are using DNS Made Easy for ' + 'DNS).') + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + self._add_provider_option('api-key', + 'API key for DNS Made Easy account, ' + f'obtained from {ACCOUNT_URL}', + 'auth_username') + self._add_provider_option('secret-key', + 'Secret key for DNS Made Easy account, ' + f'obtained from {ACCOUNT_URL}', + 'auth_token') + + @classmethod + def add_parser_arguments(cls, add: Callable[..., None], + default_propagation_seconds: int = 60) -> None: + super().add_parser_arguments(add, default_propagation_seconds) + add('credentials', help='DNS Made Easy credentials INI file.') + + def more_info(self) -> str: + return 'This plugin configures a DNS TXT record to respond to a dns-01 challenge using ' + \ + 'the DNS Made Easy API.' + + @property + def _provider_name(self) -> str: + return 'dnsmadeeasy' + + def _handle_http_error(self, e: HTTPError, domain_name: str) -> Optional[errors.PluginError]: + if domain_name in str(e) and str(e).startswith('404 Client Error: Not Found for url:'): + return None + + hint = None + if str(e).startswith('403 Client Error: Forbidden for url:'): + hint = 'Are your API key and Secret key values correct?' + + hint_disp = f' ({hint})' if hint else '' + + return errors.PluginError(f'Error determining zone identifier: {e}.{hint_disp}') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py 2025-06-12 20:08:34.000000000 +0200 @@ -0,0 +1 @@ +"""certbot-dns-dnsmadeeasy tests""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py 2025-06-12 20:08:34.000000000 +0200 @@ -0,0 +1,43 @@ +"""Tests for certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy.""" + +import sys +from unittest import mock + +import pytest +from requests import Response +from requests.exceptions import HTTPError + +from certbot.compat import os +from certbot.plugins import dns_test_common +from certbot.plugins import dns_test_common_lexicon +from certbot.plugins.dns_test_common import DOMAIN +from certbot.tests import util as test_util + +API_KEY = 'foo' +SECRET_KEY = 'bar' + + +class AuthenticatorTest(test_util.TempDirTestCase, + dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): + + DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) + LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.', response=Response()) + + def setUp(self): + super().setUp() + + from certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy import Authenticator + + path = os.path.join(self.tempdir, 'file.ini') + dns_test_common.write({"dnsmadeeasy_api_key": API_KEY, + "dnsmadeeasy_secret_key": SECRET_KEY}, + path) + + self.config = mock.MagicMock(dnsmadeeasy_credentials=path, + dnsmadeeasy_propagation_seconds=0) # don't wait during tests + + self.auth = Authenticator(self.config, "dnsmadeeasy") + + +if __name__ == "__main__": + sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1,46 @@ +Metadata-Version: 2.4 +Name: certbot-dns-dnsmadeeasy +Version: 4.1.1 +Summary: DNS Made Easy DNS Authenticator plugin for Certbot +Home-page: https://github.com/certbot/certbot +Author: Certbot Project +Author-email: certbot-...@eff.org +License: Apache License 2.0 +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Plugins +Classifier: Intended Audience :: System Administrators +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Security +Classifier: Topic :: System :: Installation/Setup +Classifier: Topic :: System :: Networking +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires-Python: >=3.9.2 +License-File: LICENSE.txt +Requires-Dist: dns-lexicon>=3.14.1 +Requires-Dist: acme>=4.1.1 +Requires-Dist: certbot>=4.1.1 +Provides-Extra: docs +Requires-Dist: Sphinx>=1.0; extra == "docs" +Requires-Dist: sphinx_rtd_theme; extra == "docs" +Provides-Extra: test +Requires-Dist: pytest; extra == "test" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1,22 @@ +LICENSE.txt +MANIFEST.in +README.rst +setup.py +docs/.gitignore +docs/Makefile +docs/api.rst +docs/conf.py +docs/index.rst +docs/make.bat +src/certbot_dns_dnsmadeeasy/__init__.py +src/certbot_dns_dnsmadeeasy/py.typed +src/certbot_dns_dnsmadeeasy.egg-info/PKG-INFO +src/certbot_dns_dnsmadeeasy.egg-info/SOURCES.txt +src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt +src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt +src/certbot_dns_dnsmadeeasy.egg-info/requires.txt +src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt +src/certbot_dns_dnsmadeeasy/_internal/__init__.py +src/certbot_dns_dnsmadeeasy/_internal/dns_dnsmadeeasy.py +src/certbot_dns_dnsmadeeasy/_internal/tests/__init__.py +src/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/dependency_links.txt 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1 @@ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/entry_points.txt 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1,2 @@ +[certbot.plugins] +dns-dnsmadeeasy = certbot_dns_dnsmadeeasy._internal.dns_dnsmadeeasy:Authenticator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/requires.txt 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1,10 @@ +dns-lexicon>=3.14.1 +acme>=4.1.1 +certbot>=4.1.1 + +[docs] +Sphinx>=1.0 +sphinx_rtd_theme + +[test] +pytest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt --- old/certbot_dns_dnsmadeeasy-4.0.0/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot_dns_dnsmadeeasy-4.1.1/src/certbot_dns_dnsmadeeasy.egg-info/top_level.txt 2025-06-12 20:08:40.000000000 +0200 @@ -0,0 +1 @@ +certbot_dns_dnsmadeeasy