698 Commits
Author SHA1 Message Date
Anna LiaoandBrad Warren 8ae3a9082d updated manual challenge prompt so last sentence is complete (#4704)
Fixes #4641.
2017-05-24 11:50:37 -07:00
ohemorangeandBrad Warren 033c995bd2 Update options-ssl-nginx.conf inprepare if it hasn't been manually modified (#4689)
Fixes #4559.

* Update options-ssl-nginx.conf in prepare, if it hasn't been modified.

* add previous options-ssl-nginx.conf hashes

* InstallSslOptionsConfTest

* remove .new file and only print warning once

* save digest to /etc/letsencrypt

* add comment reminding devs to update hashes

* add comment and test for sha256sum

* treat hash file as text file because python3

* move constants and rename hidden digest file
2017-05-23 13:18:50 -07:00
Zach ShepherdandBrad Warren fb02877268 DNSimple DNS Authenticator (#4587)
Implement an Authenticator which can fulfill a dns-01 challenge using
the DNSimple DNS API. Applicable only for domains using DNSimple DNS.

Testing Done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual testing:
    * Used `certbot certonly --dns-dnsimple -d`, specifying a
      credentials file as a command line argument. Verified that a
      certificate was successfully obtained without user interaction.
    * Used `certbot certonly --dns-dnsimple -d`, without specifying a
      credentials file as a command line argument. Verified that the
      user was prompted and that a certificate was successfully
      obtained.
    * Used `certbot certonly -d`. Verified that the user was prompted for
      a credentials file after selecting dnsimple interactively and that
      a certificate was successfully obtained.
    * Used `certbot renew --force-renewal`. Verified that certificates
      were renewed without user interaction.
 * Negative testing:
    * Path to non-existent credentials file.
    * Credentials file with unsafe permissions (644).
    * Path to credentials file with an invalid token.
    * Path to credentials file without a token.
    * Domain name not registered to DNSimple account.
2017-05-22 17:06:04 -07:00
Aaron CohenandBrad Warren 42c0117c16 Domain change wording (#4709)
* Change wording of renew with new domains msg to allow clearer display.

* Further improve domain change message formatting.

* Fix text formatting tests
2017-05-22 14:43:08 -07:00
FabianandBrad Warren 2680879068 Print stdout when running a hook (#4167, #4487) (#4702) 2017-05-22 13:00:44 -07:00
Brad WarrenandGitHub c2b24702b7 Fix defaults on older systems (#4691)
* Creates SupportedChallengesAction

This fixes #3987 as the call to set_by_default can be removed entirely.
Additionally, logger.warning can be used rather than writing to stderr directly
because #3184 has been resolved and we're guaranteed to having logging setup.

* Move validator to SupportedChallengesAction

supported_challenges_validator was moved to SupportedChallengesAction so
argparse.ArgumentError can be easily used to provide nice error output. Tests
in standalone_test.py were also updated so the module still has 100% test
coverage.

* Better document ArgumentError usage
2017-05-19 16:26:15 -07:00
Zach ShepherdandBrad Warren 49c41da4f1 CloudXNS DNS Authenticator (#4585)
Implement an Authenticator which can fulfill a dns-01 challenge using
the CloudXNS DNS API. Applicable only for domains using CloudXNS DNS.

Testing Done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual testing:
    * Used `certbot certonly --dns-cloudxns -d`, specifying a
      credentials file as a command line argument. Verified that a
      certificate was successfully obtained without user interaction.
    * Used `certbot certonly --dns-cloudxns -d`, without specifying a
      credentials file as a command line argument. Verified that the
      user was prompted and that a certificate was successfully
      obtained.
    * Used `certbot certonly -d`. Verified that the user was prompted for
      a credentials file after selecting cloudxns interactively and that
      a certificate was successfully obtained.
    * Used `certbot renew --force-renewal`. Verified that certificates
      were renewed without user interaction.
 * Negative testing:
    * Path to non-existent credentials file.
    * Credentials file with unsafe permissions (644).
    * Domain name not registered to CloudXNS account.
2017-05-19 16:23:53 -07:00
Jeff R. AllenandBrad Warren bbbfc473d3 Handle mixed case domains in CSRs (#4685)
Lowercase domains from CSR, just like the domains from the
command line are.

Fixes #4684
2017-05-19 13:54:00 -07:00
Zach ShepherdandBrad Warren 7da5381968 Common code for Lexicon-based DNS authenticators (#4583)
Introduce abstract classes to provide base functionality for Lexicon-based DNS Authenticator plugins and corresponding test cases.
2017-05-18 14:05:47 -07:00
Brad WarrenandGitHub 462c0aba62 Modify special action types only once (#4656) 2017-05-17 14:25:50 -07:00
Zach ShepherdandBrad Warren 4caff11371 Google Cloud DNS Authenticator (#4581)
Implement an Authenticator which can fulfill a dns-01 challenge using
the Google Cloud DNS API. Applicable only for domains using Google Cloud
DNS for DNS.

Testing Done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual testing:
    * Used `certbot certonly --dns-google -d`, specifying a credentials
      file as a command line argument. Verified that a certificate was
      successfully obtained without user interaction.
    * Used `certbot certonly --dns-google -d`, without specifying a
      credentials file as a command line argument. Verified that the
      user was prompted and that a certificate was successfully
      obtained.
    * Used `certbot certonly -d`. Verified that the user was prompted for
      a credentials file after selecting google interactively and that
      a certificate was successfully obtained.
    * Used `certbot renew --force-renewal`. Verified that certificates
      were renewed without user interaction.
 * Negative testing:
    * Path to non-existent credentials file.
    * Credentials file with unsafe permissions (644).
    * Domain name not registered to Google Cloud Platform account.
2017-05-17 11:26:26 -07:00
Brad Warren d467295d2a Make 42d07d7 more closely follow repo conventions 2017-05-15 15:01:54 -07:00
Ryan Pineo 42d07d756d support version 0.12.0 of configargparse
fixes #4648
2017-05-12 20:18:27 -04:00
Zach Shepherd 9e206f8024 DigitalOcean DNS Authenticator
Implement an Authenticator which can fulfill a dns-01 challenge using the
DigitalOcean API. Applicable only for domains using DigitalOcean for DNS.

Testing Done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual testing:
    * Used `certbot certonly --dns-digitalocean -d`, specifying a
      credentials file as a command line argument. Verified that a
      certificate was successfully obtained without user interaction.
    * Used `certbot certonly --dns-digitalocean -d`, without specifying a
      credentials file as a command line argument. Verified that the user
      was prompted and that a certificate was successfully obtained.
    * Used `certbot certonly -d`. Verified that the user was prompted for
      a credentials file after selecting digitalocean interactively and
      that a certificate was successfully obtained.
    * Used `certbot renew --force-renewal`. Verified that certificates
      were renewed without user interaction.
 * Negative testing:
    * Path to non-existent credentials file.
    * Credentials file with unsafe permissions (644).
    * Credentials file missing token.
    * Credentials file with blank token.
    * Credentials file with incorrect token.
    * Domain name not registered to DigitalOcean account.
2017-05-11 17:26:02 -07:00
Zach ShepherdandBrad Warren 71451dd54b security: preserve permissions on renewal conf (#4430)
Ensure that permissions are preserved when renewal data is written to
conf files. This allows users to limit access to the file, if they wish.

Testing done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual Testing
    * Got a new certificate. Restricted the permissions on the renewal
      conf. Renewed the certificate. Verified that the new renewal conf
      permissions matched.
2017-05-11 15:49:34 -07:00
Zach Shepherd db6defe614 Cloudflare DNS Authenticator
Implement an Authenticator which can fulfill a dns-01 challenge using the
Cloudflare API. Applicable only for domains using Cloudflare for DNS.

Testing Done:
 * `tox -e py27`
 * `tox -e lint`
 * Manual testing:
    * Used `certbot certonly --dns-cloudflare -d`, specifying a
      credentials file as a command line argument. Verified that a
      certificate was successfully obtained without user interaction.
    * Used `certbot certonly --dns-cloudflare -d`, without specifying a
      credentials file as a command line argument. Verified that the user
      was prompted and that a certificate was successfully obtained.
    * Used `certbot certonly -d`. Verified that the user was prompted for
      a credentials file after selecting cloudflare interactively and
      that a certificate was successfully obtained.
    * Used `certbot renew --force-renewal`. Verified that certificates
      were renewed without user interaction.
 * Negative testing:
    * Path to non-existent credentials file.
    * Credentials file with unsafe permissions (644).
    * Credentials file missing e-mail address.
    * Credentials file with blank API key.
    * Credentials file with incorrect e-mail address.
    * Credentials file with malformed API key.
    * Credentials file with invalid API key.
    * Domain name not registered to Cloudflare account.
2017-05-10 15:26:51 -07:00
Yen Chi HsuanandBrad Warren c6fcb017b8 Use universal_newlines=True whereever the output is used (#4626) 2017-05-08 10:55:02 -07:00
Brad Warren 2754a2d0ae Bump version to 0.15.0 2017-05-04 16:52:29 -07:00
Brad Warren 4be7efbf74 Release 0.14.0 2017-05-04 16:52:13 -07:00
Brad WarrenandGitHub 0db668f67b remove unnecessary closes causing logging problems (#4616) 2017-05-04 16:35:37 -07:00
Brad WarrenandGitHub 13c88f1c02 Properly handle EOF in input (#4612)
* properly handle eof

* cleanup InputWithTimeoutTest

* add test_eof

* add comment about mimicking getpass
2017-05-03 14:44:15 -07:00
Brad WarrenandGitHub 83064941bc Merge pull request #4607 from certbot/joohoi_multiple_vhosts2
Multiple vhosts 2
2017-05-02 17:55:38 -07:00
Noah SwartzandBrad Warren f57f35b1dd Start work on multivhost support in Apache
* get through parsing

* not slice

* add mult vhost per file

* idx line backwards

* blocks be wrong

* always close ifmod

* let's not mess up indexes

* don't double add multi

* fix some lint, only dedupe multi

* tests

* fix lint

* in progress bit flip

* try to pick the right vhost

* take Dominic's suggestion

* don't redo search

* add ancestor

* we now support multiple vhosts

* yay

* add docstrings
2017-05-02 15:38:27 -07:00
Brad WarrenandGitHub 79d5c890c3 Add a timeout to prompts (#4601)
* Add input_with_timeout

* use input_with_timeout
2017-05-01 14:55:31 -07:00
Brad WarrenandPeter Eckersley 5ca8f7c5b9 Add lockfile (#4449)
* add lock_file

* cleanup lock file

* Add LockFile tests

* add lock_dir

* add lock_dir_until_exit

* add set_up_core_dir and move lock_dir_until_exit

* Move lock_and_call to certbot.test.util

* Add lock to Apache

* Add lock to the Nginx plugin

* Improve permissions error message

* sort plugins

* add test_prepare_order

* provide more actionable permissions error

* Document and catch use of OSError

* don't lock a directory twice

* add conditional dependency on ordereddict

* Add lock_test

* expand sorted plugins comment

* Add lock_test to lint

* make make_lineage more conventional and flexible

* enhance lock_test.py

* add lock_test to tox

* Readd success message

* make py26 happy

* add test_acquire_without_deletion
2017-05-01 14:49:12 -07:00
ohemorangeandGitHub 5885b09e13 Merge pull request #4354 from certbot/more-ua
Add extra information to user-agent
2017-04-28 19:17:39 -07:00
Peter Eckersley 72b6179e0e Remove vestigial thingy 2017-04-28 18:46:01 -07:00
Peter Eckersley f6c02728e4 Address review comments 2017-04-28 18:42:03 -07:00
Peter Eckersley 0a4ee306a9 Fix UA flag setting (and set more of them) 2017-04-28 18:02:34 -07:00
Noah Swartz 8ceb216fe5 add to cli.py 2017-04-28 15:30:07 -07:00
schoenandBrad Warren 0c4e813a72 Demote PEM generation to logger.debug (#4549) 2017-04-26 10:54:40 -07:00
Zach ShepherdandBrad Warren b41472afce Enhance display.util to support input validation (#4372)
* display: support validation of user input

To avoid each caller of `display.input` and `display.directory_select`
needing to implement validation logic, this allows for a validator to be
supplied as a part of the call.

Following the existing pattern from `webroot`, this validator is expected
to throw a `Error` when it encounters invalid input. The user then
receives a `notification` is re-prompted.

Testing Done:
 * tox -e py27
 * tox -e lint

* plugins: update webroot to use display's validation functionality

This change updates the webroot plugin to use the now-built-in validation
functionality in display, reducing duplicated code.

Testing Done:
 * tox -e py27
 * tox -e lint

* display: move validation logic to ops

To avoid adding complexity to `IDisplay` methods, move validation logic
to helper methods in `display.ops`.

Testing Done:
 * tox -e py27
 * tox -e lint
2017-04-24 17:36:00 -07:00
Jacob Hoffman-AndrewsandBrad Warren d54cb3c59d Improve Account.repr() (#4325)
* Include more detail in Account's repr.

In particular, regr and meta.

* Fix test.

* Review feedback.

* Lint

* Test prefix only.
2017-04-18 17:09:22 -07:00
Arthur GautierandBrad Warren b0600483fd interface: IConfig is missing fields used in client.py (#4453)
Signed-off-by: Arthur Gautier <baloo@gandi.net>
2017-04-18 11:18:56 -07:00
Peter Eckersley 5be0811bdc Replace removed "renewing" with potential future substitutes :/ 2017-04-13 20:07:03 -07:00
Peter Eckersley cb66ba95e1 Revert "Also report if we're renewing"
This reverts commit 6fa521bc5f.
2017-04-13 20:00:31 -07:00
Carl Michael SkogandPeter Eckersley f54280d9b9 Use binary flag when writing cert and key files (#4462)
* Use binary flag when writing cert and key files

Add binary flag to mode argument when opening files for writing key and
certificate files.
On Python 3 the data buffers use for writing are bytes objects not
strings, and the write fails accordingly.
As far as I understand, it the "b" flag will not hurt things in Python 2
either.

* Update the tests for RenewableCert::save_successor

Update the tests for RenewableCert::save_successor after changing
three  parameters to be called with bytes objects instead of strings.

Also, update the doc comment of the function.
2017-04-13 19:10:12 -07:00
Brad WarrenandGitHub bd8c31021a Logging setup before argument parsing (#4446)
Second part of #4443. Built on #4444. Fixes #3148.

This fixes an old problem with code logging messages before logging has been set up. How this works is explained in the docstring of certbot.log.pre_arg_setup.

* add memory handler

* Add exit_with_log_path

* add new_except_hook

* pre_arg_parse_setup++ and remove old except_hook

* Rewrite post_arg_setup

* test restricted permissions

* move changes to main

* Use .name of NamedTemporaryFile

* use better assertions

* set exc_info in except_hook

* Make post_arg_setup more robust

* final cleanup

* Add TempHandler

* undo main_test changes

* improve documentation

* use decorators instead of with for mock.patch

* add inline comment about logging.shutdown
2017-04-13 13:42:01 -07:00
Noah SwartzandBrad Warren 3381cc10ec fix 3664 (#4495) 2017-04-13 11:57:14 -07:00
Noah SwartzandGitHub 9f3e9e56a9 Merge pull request #4497 from certbot/star-link
Make sphinx happy
2017-04-13 09:48:18 -07:00
John Morrissey fef3262759 add example of --renew-hook envvar values and hook script (#3502) 2017-04-13 11:00:32 -04:00
Brad Warren 42d732d3c2 make sphinx happy 2017-04-12 18:38:45 -07:00
Peter EckersleyandGitHub fbaf145c29 "Renew" now ignores domains in cli.ini (#4479)
* "Renew" now ignores domains in cli.ini

* Document things slightly better

* fix variable names

* py3fix
2017-04-12 15:48:58 -07:00
Yen Chi HsuanandBrad Warren 4b91f7fbbc Replace e.message with str(e) for Python 3 compatibility (#4416) 2017-04-07 09:58:19 -07:00
Jacob Hoffman-AndrewsandBrad Warren cacee80c51 Move make_csr into acme.crypto_util (#4165)
It's relatively finicky to make a CSR appropriate to pass to poll_and_request_issuance. I think most users want to be able to give a list of domains and a private key, and get back a CSR. This branch adds that functionality to crypto_util.

Note that the two new functions take arguments, and return values, as PEM-encoded buffers. This is a departure from some existing ACME interfaces that take PyOpenSSL types. I've discussed with the Certbot team, and we agree that this is broadly the direction the ACME API should take, so that users of the module don't need to import PyOpenSSL themselves, or use its primitives.

* Add make_csr.

* accept privkey

* Tweak API.

* Remove make_csr from certbot package.

* Skip test in older Pythons.

* Move get_Extensions call under protection.

* Remove assertIn because not backwards-compatible.

* Fix encoding, and use PEM.

* Fix test

* Fix tests on py35.

* Fix error in test.

* Make import_csr_file always return PEM.

Also delete get_sans_from_csr (unused) and get_names_from_csr (newly unused).

* Fix function doc.

* Fix indent

* Fix call of obtain_certificate_from_Csr

* lint

* Handle review feedback.

* Fix test.
2017-04-07 09:43:33 -07:00
Brad WarrenandGitHub 2e8a5ef477 Call certbot client cb_client rather than acme_client (#4357)
In some sense, certbot.client.Client is an ACME client, but it's the not the client in the ACME library and this leads to confusion. Let's make what this is clear.

* call certbot client cb_client rather than acme_client

* update tests
2017-04-06 16:05:54 -07:00
Peter Eckersley c35ca9775b tweak comment 2017-04-06 14:41:40 -07:00
Erica PortnoyandGitHub 82f3f7523e Candidate 0.13.0 (#4475)
* Release 0.13.0

* Bump version to 0.14.0
2017-04-06 11:33:32 -07:00
Peter Eckersley 23a2ecb36e Fixup 2017-04-05 15:28:14 -07:00
Erica PortnoyandGitHub 18486d6ea0 Revert "More thoroughly rename during certbot rename. (#4320)" (#4467)
This reverts commit 43dccfc671.
2017-04-05 12:45:03 -07:00