Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-certbot-dns-digitalocean for openSUSE:Factory checked in at 2021-04-15 16:57:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-digitalocean (Old) and /work/SRC/openSUSE:Factory/.python-certbot-dns-digitalocean.new.12324 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot-dns-digitalocean" Thu Apr 15 16:57:44 2021 rev:25 rq:885410 version:1.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-certbot-dns-digitalocean/python-certbot-dns-digitalocean.changes 2021-03-08 15:21:05.778107362 +0100 +++ /work/SRC/openSUSE:Factory/.python-certbot-dns-digitalocean.new.12324/python-certbot-dns-digitalocean.changes 2021-04-15 16:58:26.422771427 +0200 @@ -1,0 +2,7 @@ +Wed Apr 14 15:16:52 UTC 2021 - Mark??ta Machov?? <mmach...@suse.com> + +- update to version 1.14.0 + * The DigitalOcean plugin now creates TXT records for the DNS-01 + challenge with a lower 30s TTL. + +------------------------------------------------------------------- Old: ---- certbot-dns-digitalocean-1.13.0.tar.gz New: ---- certbot-dns-digitalocean-1.14.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-certbot-dns-digitalocean.spec ++++++ --- /var/tmp/diff_new_pack.SD3LVY/_old 2021-04-15 16:58:26.826772066 +0200 +++ /var/tmp/diff_new_pack.SD3LVY/_new 2021-04-15 16:58:26.826772066 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-certbot-dns-digitalocean -Version: 1.13.0 +Version: 1.14.0 Release: 0 Summary: DigitalOcean Authenticator plugin for Certbot License: Apache-2.0 ++++++ certbot-dns-digitalocean-1.13.0.tar.gz -> certbot-dns-digitalocean-1.14.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.13.0/PKG-INFO new/certbot-dns-digitalocean-1.14.0/PKG-INFO --- old/certbot-dns-digitalocean-1.13.0/PKG-INFO 2021-03-02 22:37:58.781778300 +0100 +++ new/certbot-dns-digitalocean-1.14.0/PKG-INFO 2021-04-06 19:17:21.725840000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot-dns-digitalocean -Version: 1.13.0 +Version: 1.14.0 Summary: DigitalOcean DNS Authenticator plugin for Certbot Home-page: https://github.com/certbot/certbot Author: Certbot Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.13.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py new/certbot-dns-digitalocean-1.14.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py --- old/certbot-dns-digitalocean-1.13.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py 2021-03-02 22:37:04.000000000 +0100 +++ new/certbot-dns-digitalocean-1.14.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py 2021-04-06 19:17:00.000000000 +0200 @@ -1,5 +1,6 @@ """DNS Authenticator for DigitalOcean.""" import logging +from typing import Optional import digitalocean import zope.interface @@ -7,6 +8,7 @@ from certbot import errors from certbot import interfaces from certbot.plugins import dns_common +from certbot.plugins.dns_common import CredentialsConfiguration logger = logging.getLogger(__name__) @@ -21,10 +23,11 @@ description = 'Obtain certificates using a DNS TXT record (if you are ' + \ 'using DigitalOcean for DNS).' + ttl = 30 def __init__(self, *args, **kwargs): super(Authenticator, self).__init__(*args, **kwargs) - self.credentials = None + self.credentials: Optional[CredentialsConfiguration] = None @classmethod def add_parser_arguments(cls, add): # pylint: disable=arguments-differ @@ -45,12 +48,15 @@ ) def _perform(self, domain, validation_name, validation): - self._get_digitalocean_client().add_txt_record(domain, validation_name, validation) + self._get_digitalocean_client().add_txt_record(domain, validation_name, validation, + self.ttl) def _cleanup(self, domain, validation_name, validation): self._get_digitalocean_client().del_txt_record(domain, validation_name, validation) def _get_digitalocean_client(self): + if not self.credentials: # pragma: no cover + raise errors.Error("Plugin has not been prepared.") return _DigitalOceanClient(self.credentials.conf('token')) @@ -62,13 +68,15 @@ def __init__(self, token): self.manager = digitalocean.Manager(token=token) - def add_txt_record(self, domain_name, record_name, record_content): + def add_txt_record(self, domain_name: str, record_name: str, record_content: str, + record_ttl: int): """ Add a TXT record using the supplied information. :param str domain_name: The domain to use to associate the record with. :param str record_name: The record name (typically beginning with '_acme-challenge.'). :param str record_content: The record content (typically the challenge validation). + :param int record_ttl: The record TTL. :raises certbot.errors.PluginError: if an error occurs communicating with the DigitalOcean API """ @@ -89,7 +97,8 @@ result = domain.create_new_domain_record( type='TXT', name=self._compute_record_name(domain, record_name), - data=record_content) + data=record_content, + ttl=record_ttl) # ttl kwarg is only effective starting python-digitalocean 1.15.0 record_id = result['domain_record']['id'] @@ -99,7 +108,7 @@ raise errors.PluginError('Error adding TXT record using the DigitalOcean API: {0}' .format(e)) - def del_txt_record(self, domain_name, record_name, record_content): + def del_txt_record(self, domain_name: str, record_name: str, record_content: str): """ Delete a TXT record using the supplied information. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.13.0/certbot_dns_digitalocean.egg-info/PKG-INFO new/certbot-dns-digitalocean-1.14.0/certbot_dns_digitalocean.egg-info/PKG-INFO --- old/certbot-dns-digitalocean-1.13.0/certbot_dns_digitalocean.egg-info/PKG-INFO 2021-03-02 22:37:58.000000000 +0100 +++ new/certbot-dns-digitalocean-1.14.0/certbot_dns_digitalocean.egg-info/PKG-INFO 2021-04-06 19:17:21.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot-dns-digitalocean -Version: 1.13.0 +Version: 1.14.0 Summary: DigitalOcean DNS Authenticator plugin for Certbot Home-page: https://github.com/certbot/certbot Author: Certbot Project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.13.0/setup.py new/certbot-dns-digitalocean-1.14.0/setup.py --- old/certbot-dns-digitalocean-1.13.0/setup.py 2021-03-02 22:37:05.000000000 +0100 +++ new/certbot-dns-digitalocean-1.14.0/setup.py 2021-04-06 19:17:02.000000000 +0200 @@ -4,12 +4,12 @@ from setuptools import find_packages from setuptools import setup -version = '1.13.0' +version = '1.14.0' # Remember to update local-oldest-requirements.txt when changing the minimum # acme/certbot version. install_requires = [ - 'python-digitalocean>=1.11', + 'python-digitalocean>=1.11', # 1.15.0 or newer is recommended for TTL support 'setuptools>=39.0.1', 'zope.interface', ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.13.0/tests/dns_digitalocean_test.py new/certbot-dns-digitalocean-1.14.0/tests/dns_digitalocean_test.py --- old/certbot-dns-digitalocean-1.13.0/tests/dns_digitalocean_test.py 2021-03-02 22:37:04.000000000 +0100 +++ new/certbot-dns-digitalocean-1.14.0/tests/dns_digitalocean_test.py 2021-04-06 19:17:00.000000000 +0200 @@ -40,7 +40,7 @@ def test_perform(self): self.auth.perform([self.achall]) - expected = [mock.call.add_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY)] + expected = [mock.call.add_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY, 30)] self.assertEqual(expected, self.mock_client.mock_calls) def test_cleanup(self): @@ -58,6 +58,7 @@ record_prefix = "_acme-challenge" record_name = record_prefix + "." + DOMAIN record_content = "bar" + record_ttl = 60 def setUp(self): from certbot_dns_digitalocean._internal.dns_digitalocean import _DigitalOceanClient @@ -78,25 +79,27 @@ self.manager.get_all_domains.return_value = [wrong_domain_mock, domain_mock] - self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content) + self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, + self.record_ttl) domain_mock.create_new_domain_record.assert_called_with(type='TXT', name=self.record_prefix, - data=self.record_content) + data=self.record_content, + ttl=self.record_ttl) def test_add_txt_record_fail_to_find_domain(self): self.manager.get_all_domains.return_value = [] self.assertRaises(errors.PluginError, self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) + DOMAIN, self.record_name, self.record_content, self.record_ttl) def test_add_txt_record_error_finding_domain(self): self.manager.get_all_domains.side_effect = API_ERROR self.assertRaises(errors.PluginError, self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) + DOMAIN, self.record_name, self.record_content, self.record_ttl) def test_add_txt_record_error_creating_record(self): domain_mock = mock.MagicMock() @@ -107,7 +110,7 @@ self.assertRaises(errors.PluginError, self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) + DOMAIN, self.record_name, self.record_content, self.record_ttl) def test_del_txt_record(self): first_record_mock = mock.MagicMock()