diff --git a/certbot-dns-cloudxns/LICENSE.txt b/certbot-dns-cloudxns/LICENSE.txt deleted file mode 100644 index 981c46c9f..000000000 --- a/certbot-dns-cloudxns/LICENSE.txt +++ /dev/null @@ -1,190 +0,0 @@ - Copyright 2015 Electronic Frontier Foundation and others - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/certbot-dns-cloudxns/MANIFEST.in b/certbot-dns-cloudxns/MANIFEST.in deleted file mode 100644 index 20810e7eb..000000000 --- a/certbot-dns-cloudxns/MANIFEST.in +++ /dev/null @@ -1,7 +0,0 @@ -include LICENSE.txt -include README.rst -recursive-include docs * -recursive-include tests * -include certbot_dns_cloudxns/py.typed -global-exclude __pycache__ -global-exclude *.py[cod] diff --git a/certbot-dns-cloudxns/README.rst b/certbot-dns-cloudxns/README.rst deleted file mode 100644 index b127770df..000000000 --- a/certbot-dns-cloudxns/README.rst +++ /dev/null @@ -1 +0,0 @@ -CloudXNS DNS Authenticator plugin for Certbot diff --git a/certbot-dns-cloudxns/certbot_dns_cloudxns/__init__.py b/certbot-dns-cloudxns/certbot_dns_cloudxns/__init__.py deleted file mode 100644 index 0d098445c..000000000 --- a/certbot-dns-cloudxns/certbot_dns_cloudxns/__init__.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -The `~certbot_dns_cloudxns.dns_cloudxns` plugin automates the process of -completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and -subsequently removing, TXT records using the CloudXNS API. - -.. note:: - The plugin is not installed by default. It can be installed by heading to - `certbot.eff.org `_, choosing your system and - selecting the Wildcard tab. - -Named Arguments ---------------- - -======================================== ===================================== -``--dns-cloudxns-credentials`` CloudXNS credentials_ INI file. - (Required) -``--dns-cloudxns-propagation-seconds`` The number of seconds to wait for DNS - to propagate before asking the ACME - server to verify the DNS record. - (Default: 30) -======================================== ===================================== - - -Credentials ------------ - -Use of this plugin requires a configuration file containing CloudXNS API -credentials, obtained from your CloudXNS -`API page `_. - -.. code-block:: ini - :name: credentials.ini - :caption: Example credentials file: - - # CloudXNS API credentials used by Certbot - dns_cloudxns_api_key = 1234567890abcdef1234567890abcdef - dns_cloudxns_secret_key = 1122334455667788 - -The path to this file can be provided interactively or using the -``--dns-cloudxns-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 - CloudXNS 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-cloudxns \\ - --dns-cloudxns-credentials ~/.secrets/certbot/cloudxns.ini \\ - -d example.com - -.. code-block:: bash - :caption: To acquire a single certificate for both ``example.com`` and - ``www.example.com`` - - certbot certonly \\ - --dns-cloudxns \\ - --dns-cloudxns-credentials ~/.secrets/certbot/cloudxns.ini \\ - -d example.com \\ - -d www.example.com - -.. code-block:: bash - :caption: To acquire a certificate for ``example.com``, waiting 60 seconds - for DNS propagation - - certbot certonly \\ - --dns-cloudxns \\ - --dns-cloudxns-credentials ~/.secrets/certbot/cloudxns.ini \\ - --dns-cloudxns-propagation-seconds 60 \\ - -d example.com - -""" diff --git a/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/__init__.py b/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/__init__.py deleted file mode 100644 index e2177417d..000000000 --- a/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Internal implementation of `~certbot_dns_cloudxns.dns_cloudxns` plugin.""" diff --git a/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/dns_cloudxns.py b/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/dns_cloudxns.py deleted file mode 100644 index 15cdf8aa8..000000000 --- a/certbot-dns-cloudxns/certbot_dns_cloudxns/_internal/dns_cloudxns.py +++ /dev/null @@ -1,93 +0,0 @@ -"""DNS Authenticator for CloudXNS DNS.""" -import logging -from typing import Any -from typing import Callable -from typing import Optional - -from lexicon.providers import cloudxns -from requests import HTTPError - -from certbot import errors -from certbot.plugins import dns_common -from certbot.plugins import dns_common_lexicon -from certbot.plugins.dns_common import CredentialsConfiguration - -logger = logging.getLogger(__name__) - -ACCOUNT_URL = 'https://www.cloudxns.net/en/AccountManage/apimanage.html' - - -class Authenticator(dns_common.DNSAuthenticator): - """DNS Authenticator for CloudXNS DNS - - This Authenticator uses the CloudXNS DNS API to fulfill a dns-01 challenge. - """ - - description = 'Obtain certificates using a DNS TXT record (if you are using CloudXNS for DNS).' - ttl = 60 - - def __init__(self, *args: Any, **kwargs: Any) -> None: - super().__init__(*args, **kwargs) - self.credentials: Optional[CredentialsConfiguration] = None - - @classmethod - def add_parser_arguments(cls, add: Callable[..., None], - default_propagation_seconds: int = 30) -> None: - super().add_parser_arguments(add, default_propagation_seconds) - add('credentials', help='CloudXNS 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 CloudXNS API.' - - def _setup_credentials(self) -> None: - self.credentials = self._configure_credentials( - 'credentials', - 'CloudXNS credentials INI file', - { - 'api-key': 'API key for CloudXNS account, obtained from {0}'.format(ACCOUNT_URL), - 'secret-key': 'Secret key for CloudXNS account, obtained from {0}' - .format(ACCOUNT_URL) - } - ) - - def _perform(self, domain: str, validation_name: str, validation: str) -> None: - self._get_cloudxns_client().add_txt_record(domain, validation_name, validation) - - def _cleanup(self, domain: str, validation_name: str, validation: str) -> None: - self._get_cloudxns_client().del_txt_record(domain, validation_name, validation) - - def _get_cloudxns_client(self) -> "_CloudXNSLexiconClient": - if not self.credentials: # pragma: no cover - raise errors.Error("Plugin has not been prepared.") - return _CloudXNSLexiconClient(self.credentials.conf('api-key'), - self.credentials.conf('secret-key'), - self.ttl) - - -class _CloudXNSLexiconClient(dns_common_lexicon.LexiconClient): - """ - Encapsulates all communication with the CloudXNS via Lexicon. - """ - - def __init__(self, api_key: str, secret_key: str, ttl: int) -> None: - super().__init__() - - config = dns_common_lexicon.build_lexicon_config('cloudxns', { - 'ttl': ttl, - }, { - 'auth_username': api_key, - 'auth_token': secret_key, - }) - - self.provider = cloudxns.Provider(config) - - def _handle_http_error(self, e: HTTPError, domain_name: str) -> Optional[errors.PluginError]: - hint = None - if str(e).startswith('400 Client Error:'): - 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 for {domain_name}: ' - f'{e}.{hint_disp}') diff --git a/certbot-dns-cloudxns/certbot_dns_cloudxns/py.typed b/certbot-dns-cloudxns/certbot_dns_cloudxns/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/certbot-dns-cloudxns/docs/.gitignore b/certbot-dns-cloudxns/docs/.gitignore deleted file mode 100644 index ba65b13af..000000000 --- a/certbot-dns-cloudxns/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/_build/ diff --git a/certbot-dns-cloudxns/docs/Makefile b/certbot-dns-cloudxns/docs/Makefile deleted file mode 100644 index ecda13dfe..000000000 --- a/certbot-dns-cloudxns/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = certbot-dns-cloudxns -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/certbot-dns-cloudxns/docs/api.rst b/certbot-dns-cloudxns/docs/api.rst deleted file mode 100644 index ac13c3df2..000000000 --- a/certbot-dns-cloudxns/docs/api.rst +++ /dev/null @@ -1,5 +0,0 @@ -================= -API Documentation -================= - -Certbot plugins implement the Certbot plugins API, and do not otherwise have an external API. diff --git a/certbot-dns-cloudxns/docs/conf.py b/certbot-dns-cloudxns/docs/conf.py deleted file mode 100644 index f516d9a1e..000000000 --- a/certbot-dns-cloudxns/docs/conf.py +++ /dev/null @@ -1,181 +0,0 @@ -# -*- coding: utf-8 -*- -# -# certbot-dns-cloudxns documentation build configuration file, created by -# sphinx-quickstart on Wed May 10 16:05:50 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os - -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ['sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode'] - -autodoc_member_order = 'bysource' -autodoc_default_flags = ['show-inheritance'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'certbot-dns-cloudxns' -copyright = u'2017, Certbot Project' -author = u'Certbot Project' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'0' -# The full version, including alpha/beta/rc tags. -release = u'0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'en' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -default_role = 'py:obj' - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# - -# https://docs.readthedocs.io/en/stable/faq.html#i-want-to-use-the-read-the-docs-theme-locally -# on_rtd is whether we are on readthedocs.org -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -# otherwise, readthedocs.org uses their theme by default, so no need to specify it - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['_static'] - - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'certbot-dns-cloudxnsdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'certbot-dns-cloudxns.tex', u'certbot-dns-cloudxns Documentation', - u'Certbot Project', 'manual'), -] - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'certbot-dns-cloudxns', u'certbot-dns-cloudxns Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'certbot-dns-cloudxns', u'certbot-dns-cloudxns Documentation', - author, 'certbot-dns-cloudxns', 'One line description of project.', - 'Miscellaneous'), -] - - - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - 'python': ('https://docs.python.org/', None), - 'acme': ('https://acme-python.readthedocs.org/en/latest/', None), - 'certbot': ('https://eff-certbot.readthedocs.io/en/stable/', None), -} diff --git a/certbot-dns-cloudxns/docs/index.rst b/certbot-dns-cloudxns/docs/index.rst deleted file mode 100644 index 83c6ca18d..000000000 --- a/certbot-dns-cloudxns/docs/index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. certbot-dns-cloudxns documentation master file, created by - sphinx-quickstart on Wed May 10 16:05:50 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to certbot-dns-cloudxns's documentation! -================================================ - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - -.. automodule:: certbot_dns_cloudxns - :members: - -.. toctree:: - :maxdepth: 1 - - api - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/certbot-dns-cloudxns/docs/make.bat b/certbot-dns-cloudxns/docs/make.bat deleted file mode 100644 index dddd6db56..000000000 --- a/certbot-dns-cloudxns/docs/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=certbot-dns-cloudxns - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/certbot-dns-cloudxns/readthedocs.org.requirements.txt b/certbot-dns-cloudxns/readthedocs.org.requirements.txt deleted file mode 100644 index c1754a936..000000000 --- a/certbot-dns-cloudxns/readthedocs.org.requirements.txt +++ /dev/null @@ -1,15 +0,0 @@ -# readthedocs.org gives no way to change the install command to "pip -# install -e certbot-dns-cloudxns[docs]" (that would in turn install documentation -# dependencies), but it allows to specify a requirements.txt file at -# https://readthedocs.org/dashboard/letsencrypt/advanced/ (c.f. #259) - -# Although ReadTheDocs certainly doesn't need to install the project -# in --editable mode (-e), just "pip install certbot-dns-cloudxns[docs]" does not work as -# expected and "pip install -e certbot-dns-cloudxns[docs]" must be used instead - -# We also pin our dependencies for increased stability. - --c ../tools/requirements.txt --e acme --e certbot --e certbot-dns-cloudxns[docs] diff --git a/certbot-dns-cloudxns/setup.py b/certbot-dns-cloudxns/setup.py deleted file mode 100644 index acb3dd4cc..000000000 --- a/certbot-dns-cloudxns/setup.py +++ /dev/null @@ -1,73 +0,0 @@ -import os -import sys - -from setuptools import find_packages -from setuptools import setup - -version = '1.30.0.dev0' - -install_requires = [ - 'dns-lexicon>=3.2.1', - 'setuptools>=41.6.0', -] - -if not os.environ.get('SNAP_BUILD'): - install_requires.extend([ - # We specify the minimum acme and certbot version as the current plugin - # version for simplicity. See - # https://github.com/certbot/certbot/issues/8761 for more info. - f'acme>={version}', - f'certbot>={version}', - ]) -elif 'bdist_wheel' in sys.argv[1:]: - raise RuntimeError('Unset SNAP_BUILD when building wheels ' - 'to include certbot dependencies.') -if os.environ.get('SNAP_BUILD'): - install_requires.append('packaging') - -docs_extras = [ - 'Sphinx>=1.0', # autodoc_member_order = 'bysource', autodoc_default_flags - 'sphinx_rtd_theme', -] - -setup( - name='certbot-dns-cloudxns', - version=version, - description="CloudXNS DNS Authenticator plugin for Certbot", - url='https://github.com/certbot/certbot', - author="Certbot Project", - author_email='certbot-dev@eff.org', - license='Apache License 2.0', - python_requires='>=3.7', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Plugins', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: Apache Software License', - 'Operating System :: POSIX :: Linux', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Topic :: Internet :: WWW/HTTP', - 'Topic :: Security', - 'Topic :: System :: Installation/Setup', - 'Topic :: System :: Networking', - 'Topic :: System :: Systems Administration', - 'Topic :: Utilities', - ], - - packages=find_packages(), - include_package_data=True, - install_requires=install_requires, - extras_require={ - 'docs': docs_extras, - }, - entry_points={ - 'certbot.plugins': [ - 'dns-cloudxns = certbot_dns_cloudxns._internal.dns_cloudxns:Authenticator', - ], - }, -) diff --git a/certbot-dns-cloudxns/tests/dns_cloudxns_test.py b/certbot-dns-cloudxns/tests/dns_cloudxns_test.py deleted file mode 100644 index 81dea5ca4..000000000 --- a/certbot-dns-cloudxns/tests/dns_cloudxns_test.py +++ /dev/null @@ -1,58 +0,0 @@ -"""Tests for certbot_dns_cloudxns._internal.dns_cloudxns.""" - -import unittest - -try: - import mock -except ImportError: # pragma: no cover - from unittest import mock # type: ignore -from requests.exceptions import HTTPError -from requests.exceptions import RequestException - -from certbot.compat import os -from certbot.plugins import dns_test_common -from certbot.plugins import dns_test_common_lexicon -from certbot.tests import util as test_util - -DOMAIN_NOT_FOUND = Exception('No domain found') -GENERIC_ERROR = RequestException -LOGIN_ERROR = HTTPError('400 Client Error: ...') - -API_KEY = 'foo' -SECRET = 'bar' - - -class AuthenticatorTest(test_util.TempDirTestCase, - dns_test_common_lexicon.BaseLexiconAuthenticatorTest): - - def setUp(self): - super().setUp() - - from certbot_dns_cloudxns._internal.dns_cloudxns import Authenticator - - path = os.path.join(self.tempdir, 'file.ini') - dns_test_common.write({"cloudxns_api_key": API_KEY, "cloudxns_secret_key": SECRET}, path) - - self.config = mock.MagicMock(cloudxns_credentials=path, - cloudxns_propagation_seconds=0) # don't wait during tests - - self.auth = Authenticator(self.config, "cloudxns") - - self.mock_client = mock.MagicMock() - # _get_cloudxns_client | pylint: disable=protected-access - self.auth._get_cloudxns_client = mock.MagicMock(return_value=self.mock_client) - - -class CloudXNSLexiconClientTest(unittest.TestCase, dns_test_common_lexicon.BaseLexiconClientTest): - - def setUp(self): - from certbot_dns_cloudxns._internal.dns_cloudxns import _CloudXNSLexiconClient - - self.client = _CloudXNSLexiconClient(API_KEY, SECRET, 0) - - self.provider_mock = mock.MagicMock() - self.client.provider = self.provider_mock - - -if __name__ == "__main__": - unittest.main() # pragma: no cover diff --git a/certbot/certbot/_internal/cli/plugins_parsing.py b/certbot/certbot/_internal/cli/plugins_parsing.py index f0a976bf4..d19825738 100644 --- a/certbot/certbot/_internal/cli/plugins_parsing.py +++ b/certbot/certbot/_internal/cli/plugins_parsing.py @@ -45,10 +45,6 @@ def _plugins_parsing(helpful: "helpful.HelpfulArgumentParser", default=flag_default("dns_cloudflare"), help=("Obtain certificates using a DNS TXT record (if you are " "using Cloudflare for DNS).")) - helpful.add(["plugins", "certonly"], "--dns-cloudxns", action="store_true", - default=flag_default("dns_cloudxns"), - help=("Obtain certificates using a DNS TXT record (if you are " - "using CloudXNS for DNS).")) helpful.add(["plugins", "certonly"], "--dns-digitalocean", action="store_true", default=flag_default("dns_digitalocean"), help=("Obtain certificates using a DNS TXT record (if you are " diff --git a/certbot/certbot/_internal/constants.py b/certbot/certbot/_internal/constants.py index 22bba0607..ce0b84d2e 100644 --- a/certbot/certbot/_internal/constants.py +++ b/certbot/certbot/_internal/constants.py @@ -112,7 +112,6 @@ CLI_DEFAULTS: Dict[str, Any] = dict( # noqa manual=False, webroot=False, dns_cloudflare=False, - dns_cloudxns=False, dns_digitalocean=False, dns_dnsimple=False, dns_dnsmadeeasy=False, diff --git a/certbot/certbot/_internal/plugins/disco.py b/certbot/certbot/_internal/plugins/disco.py index 30409aff0..707f5ae9d 100644 --- a/certbot/certbot/_internal/plugins/disco.py +++ b/certbot/certbot/_internal/plugins/disco.py @@ -31,7 +31,6 @@ PREFIX_FREE_DISTRIBUTIONS = [ "certbot", "certbot-apache", "certbot-dns-cloudflare", - "certbot-dns-cloudxns", "certbot-dns-digitalocean", "certbot-dns-dnsimple", "certbot-dns-dnsmadeeasy", diff --git a/certbot/certbot/_internal/plugins/selection.py b/certbot/certbot/_internal/plugins/selection.py index cde6bd221..826e1c932 100644 --- a/certbot/certbot/_internal/plugins/selection.py +++ b/certbot/certbot/_internal/plugins/selection.py @@ -168,7 +168,7 @@ def choose_plugin(prepared: List[disco.PluginEntryPoint], return None -noninstaller_plugins = ["webroot", "manual", "standalone", "dns-cloudflare", "dns-cloudxns", +noninstaller_plugins = ["webroot", "manual", "standalone", "dns-cloudflare", "dns-digitalocean", "dns-dnsimple", "dns-dnsmadeeasy", "dns-gehirn", "dns-google", "dns-linode", "dns-luadns", "dns-nsone", "dns-ovh", "dns-rfc2136", "dns-route53", "dns-sakuracloud"] @@ -316,8 +316,6 @@ def cli_plugin_requests(config: configuration.NamespaceConfig req_auth = set_configurator(req_auth, "manual") if config.dns_cloudflare: req_auth = set_configurator(req_auth, "dns-cloudflare") - if config.dns_cloudxns: - req_auth = set_configurator(req_auth, "dns-cloudxns") if config.dns_digitalocean: req_auth = set_configurator(req_auth, "dns-digitalocean") if config.dns_dnsimple: diff --git a/certbot/docs/packaging.rst b/certbot/docs/packaging.rst index a1fb23100..75349ad14 100644 --- a/certbot/docs/packaging.rst +++ b/certbot/docs/packaging.rst @@ -12,7 +12,6 @@ We release packages and upload them to PyPI (wheels and source tarballs). - https://pypi.python.org/pypi/certbot-apache - https://pypi.python.org/pypi/certbot-nginx - https://pypi.python.org/pypi/certbot-dns-cloudflare -- https://pypi.python.org/pypi/certbot-dns-cloudxns - https://pypi.python.org/pypi/certbot-dns-digitalocean - https://pypi.python.org/pypi/certbot-dns-dnsimple - https://pypi.python.org/pypi/certbot-dns-dnsmadeeasy diff --git a/certbot/docs/using.rst b/certbot/docs/using.rst index c4f55bc02..c43a006fd 100644 --- a/certbot/docs/using.rst +++ b/certbot/docs/using.rst @@ -206,7 +206,6 @@ use the DNS plugins on your system. Once installed, you can find documentation on how to use each plugin at: * `certbot-dns-cloudflare `_ -* `certbot-dns-cloudxns `_ * `certbot-dns-digitalocean `_ * `certbot-dns-dnsimple `_ * `certbot-dns-dnsmadeeasy `_ diff --git a/tools/_release.sh b/tools/_release.sh index a9ed017a7..368ed21d5 100755 --- a/tools/_release.sh +++ b/tools/_release.sh @@ -57,7 +57,7 @@ export GPG_TTY=$(tty) PORT=${PORT:-1234} # subpackages to be released (the way the script thinks about them) -SUBPKGS_NO_CERTBOT="acme certbot-apache certbot-nginx certbot-dns-cloudflare certbot-dns-cloudxns \ +SUBPKGS_NO_CERTBOT="acme certbot-apache certbot-nginx certbot-dns-cloudflare \ certbot-dns-digitalocean certbot-dns-dnsimple certbot-dns-dnsmadeeasy \ certbot-dns-gehirn certbot-dns-google certbot-dns-linode certbot-dns-luadns \ certbot-dns-nsone certbot-dns-ovh certbot-dns-rfc2136 certbot-dns-route53 \ diff --git a/tools/docker/lib/common b/tools/docker/lib/common index 4ba86cac0..bf3598f92 100644 --- a/tools/docker/lib/common +++ b/tools/docker/lib/common @@ -20,7 +20,6 @@ export CERTBOT_PLUGINS=( "dns-dnsimple" "dns-ovh" "dns-cloudflare" - "dns-cloudxns" "dns-digitalocean" "dns-google" "dns-luadns" diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml index b5959bc20..e8358a926 100644 --- a/tools/pinning/current/pyproject.toml +++ b/tools/pinning/current/pyproject.toml @@ -15,7 +15,6 @@ python = "^3.7" certbot-ci = {path = "../../../certbot-ci"} certbot-compatibility-test = {path = "../../../certbot-compatibility-test"} certbot-dns-cloudflare = {path = "../../../certbot-dns-cloudflare", extras = ["docs"]} -certbot-dns-cloudxns = {path = "../../../certbot-dns-cloudxns", extras = ["docs"]} certbot-dns-digitalocean = {path = "../../../certbot-dns-digitalocean", extras = ["docs"]} certbot-dns-dnsimple = {path = "../../../certbot-dns-dnsimple", extras = ["docs"]} certbot-dns-dnsmadeeasy = {path = "../../../certbot-dns-dnsmadeeasy", extras = ["docs"]} diff --git a/tools/pinning/oldest/pyproject.toml b/tools/pinning/oldest/pyproject.toml index 5585a39f4..9b76fdbb5 100644 --- a/tools/pinning/oldest/pyproject.toml +++ b/tools/pinning/oldest/pyproject.toml @@ -18,7 +18,6 @@ python = "3.7" # on acme so certbot must be listed before acme. certbot-ci = {path = "../../../certbot-ci"} certbot-dns-cloudflare = {path = "../../../certbot-dns-cloudflare"} -certbot-dns-cloudxns = {path = "../../../certbot-dns-cloudxns"} certbot-dns-digitalocean = {path = "../../../certbot-dns-digitalocean"} certbot-dns-dnsimple = {path = "../../../certbot-dns-dnsimple"} certbot-dns-dnsmadeeasy = {path = "../../../certbot-dns-dnsmadeeasy"} diff --git a/tools/venv.py b/tools/venv.py index 2aa5b0a2d..0721b2b25 100755 --- a/tools/venv.py +++ b/tools/venv.py @@ -27,7 +27,6 @@ REQUIREMENTS = [ '-e certbot[all]', '-e certbot-apache', '-e certbot-dns-cloudflare', - '-e certbot-dns-cloudxns', '-e certbot-dns-digitalocean', '-e certbot-dns-dnsimple', '-e certbot-dns-dnsmadeeasy', diff --git a/tox.cover.py b/tox.cover.py index 1f8f9dcce..f1e400eb8 100755 --- a/tox.cover.py +++ b/tox.cover.py @@ -7,7 +7,7 @@ import subprocess import sys DEFAULT_PACKAGES = [ - 'certbot', 'acme', 'certbot_apache', 'certbot_dns_cloudflare', 'certbot_dns_cloudxns', + 'certbot', 'acme', 'certbot_apache', 'certbot_dns_cloudflare', 'certbot_dns_digitalocean', 'certbot_dns_dnsimple', 'certbot_dns_dnsmadeeasy', 'certbot_dns_gehirn', 'certbot_dns_google', 'certbot_dns_linode', 'certbot_dns_luadns', 'certbot_dns_nsone', 'certbot_dns_ovh', 'certbot_dns_rfc2136', 'certbot_dns_route53', @@ -18,7 +18,6 @@ COVER_THRESHOLDS = { 'acme': {'linux': 100, 'windows': 99}, 'certbot_apache': {'linux': 100, 'windows': 100}, 'certbot_dns_cloudflare': {'linux': 98, 'windows': 98}, - 'certbot_dns_cloudxns': {'linux': 98, 'windows': 98}, 'certbot_dns_digitalocean': {'linux': 98, 'windows': 98}, 'certbot_dns_dnsimple': {'linux': 98, 'windows': 98}, 'certbot_dns_dnsmadeeasy': {'linux': 99, 'windows': 99}, diff --git a/tox.ini b/tox.ini index 03f638c0e..f4776328d 100644 --- a/tox.ini +++ b/tox.ini @@ -17,10 +17,10 @@ install_and_test = python {toxinidir}/tools/install_and_test.py # Packages are listed on one line because tox seems to have inconsistent # behavior with substitutions that contain line continuations, see # https://github.com/tox-dev/tox/issues/2069 for more info. -dns_packages = certbot-dns-cloudflare certbot-dns-cloudxns certbot-dns-digitalocean certbot-dns-dnsimple certbot-dns-dnsmadeeasy certbot-dns-gehirn certbot-dns-google certbot-dns-linode certbot-dns-luadns certbot-dns-nsone certbot-dns-ovh certbot-dns-rfc2136 certbot-dns-route53 certbot-dns-sakuracloud +dns_packages = certbot-dns-cloudflare certbot-dns-digitalocean certbot-dns-dnsimple certbot-dns-dnsmadeeasy certbot-dns-gehirn certbot-dns-google certbot-dns-linode certbot-dns-luadns certbot-dns-nsone certbot-dns-ovh certbot-dns-rfc2136 certbot-dns-route53 certbot-dns-sakuracloud win_all_packages = acme[test] certbot[test] {[base]dns_packages} certbot-nginx all_packages = {[base]win_all_packages} certbot-apache -source_paths = acme/acme certbot/certbot certbot-apache/certbot_apache certbot-ci/certbot_integration_tests certbot-ci/snap_integration_tests certbot-ci/windows_installer_integration_tests certbot-compatibility-test/certbot_compatibility_test certbot-dns-cloudflare/certbot_dns_cloudflare certbot-dns-cloudxns/certbot_dns_cloudxns certbot-dns-digitalocean/certbot_dns_digitalocean certbot-dns-dnsimple/certbot_dns_dnsimple certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy certbot-dns-gehirn/certbot_dns_gehirn certbot-dns-google/certbot_dns_google certbot-dns-linode/certbot_dns_linode certbot-dns-luadns/certbot_dns_luadns certbot-dns-nsone/certbot_dns_nsone certbot-dns-ovh/certbot_dns_ovh certbot-dns-rfc2136/certbot_dns_rfc2136 certbot-dns-route53/certbot_dns_route53 certbot-dns-sakuracloud/certbot_dns_sakuracloud certbot-nginx/certbot_nginx tests/lock_test.py +source_paths = acme/acme certbot/certbot certbot-apache/certbot_apache certbot-ci/certbot_integration_tests certbot-ci/snap_integration_tests certbot-ci/windows_installer_integration_tests certbot-compatibility-test/certbot_compatibility_test certbot-dns-cloudflare/certbot_dns_cloudflare certbot-dns-digitalocean/certbot_dns_digitalocean certbot-dns-dnsimple/certbot_dns_dnsimple certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy certbot-dns-gehirn/certbot_dns_gehirn certbot-dns-google/certbot_dns_google certbot-dns-linode/certbot_dns_linode certbot-dns-luadns/certbot_dns_luadns certbot-dns-nsone/certbot_dns_nsone certbot-dns-ovh/certbot_dns_ovh certbot-dns-rfc2136/certbot_dns_rfc2136 certbot-dns-route53/certbot_dns_route53 certbot-dns-sakuracloud/certbot_dns_sakuracloud certbot-nginx/certbot_nginx tests/lock_test.py [testenv] passenv =