mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Update acme_tiny to 4.1.0 (#1037)
This commit is contained in:
parent
6ec0e7b6af
commit
d491b3208b
1 changed files with 12 additions and 12 deletions
22
src/yunohost/vendor/acme_tiny/acme_tiny.py
vendored
22
src/yunohost/vendor/acme_tiny/acme_tiny.py
vendored
|
@ -48,7 +48,7 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
|
|
||||||
# helper function - make signed requests
|
# helper function - make signed requests
|
||||||
def _send_signed_request(url, payload, err_msg, depth=0):
|
def _send_signed_request(url, payload, err_msg, depth=0):
|
||||||
payload64 = _b64(json.dumps(payload).encode('utf8'))
|
payload64 = "" if payload is None else _b64(json.dumps(payload).encode('utf8'))
|
||||||
new_nonce = _do_request(directory['newNonce'])[2]['Replay-Nonce']
|
new_nonce = _do_request(directory['newNonce'])[2]['Replay-Nonce']
|
||||||
protected = {"url": url, "alg": alg, "nonce": new_nonce}
|
protected = {"url": url, "alg": alg, "nonce": new_nonce}
|
||||||
protected.update({"jwk": jwk} if acct_headers is None else {"kid": acct_headers['Location']})
|
protected.update({"jwk": jwk} if acct_headers is None else {"kid": acct_headers['Location']})
|
||||||
|
@ -63,11 +63,11 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
|
|
||||||
# helper function - poll until complete
|
# helper function - poll until complete
|
||||||
def _poll_until_not(url, pending_statuses, err_msg):
|
def _poll_until_not(url, pending_statuses, err_msg):
|
||||||
while True:
|
result, t0 = None, time.time()
|
||||||
result, _, _ = _do_request(url, err_msg=err_msg)
|
while result is None or result['status'] in pending_statuses:
|
||||||
if result['status'] in pending_statuses:
|
assert (time.time() - t0 < 3600), "Polling timeout" # 1 hour timeout
|
||||||
time.sleep(2)
|
time.sleep(0 if result is None else 2)
|
||||||
continue
|
result, _, _ = _send_signed_request(url, None, err_msg)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# parse account key to get public key
|
# parse account key to get public key
|
||||||
|
@ -93,7 +93,7 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
common_name = re.search(r"Subject:.*? CN\s?=\s?([^\s,;/]+)", out.decode('utf8'))
|
common_name = re.search(r"Subject:.*? CN\s?=\s?([^\s,;/]+)", out.decode('utf8'))
|
||||||
if common_name is not None:
|
if common_name is not None:
|
||||||
domains.add(common_name.group(1))
|
domains.add(common_name.group(1))
|
||||||
subject_alt_names = re.search(r"X509v3 Subject Alternative Name: \n +([^\n]+)\n", out.decode('utf8'), re.MULTILINE|re.DOTALL)
|
subject_alt_names = re.search(r"X509v3 Subject Alternative Name: (?:critical)?\n +([^\n]+)\n", out.decode('utf8'), re.MULTILINE|re.DOTALL)
|
||||||
if subject_alt_names is not None:
|
if subject_alt_names is not None:
|
||||||
for san in subject_alt_names.group(1).split(", "):
|
for san in subject_alt_names.group(1).split(", "):
|
||||||
if san.startswith("DNS:"):
|
if san.startswith("DNS:"):
|
||||||
|
@ -123,7 +123,7 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
|
|
||||||
# get the authorizations that need to be completed
|
# get the authorizations that need to be completed
|
||||||
for auth_url in order['authorizations']:
|
for auth_url in order['authorizations']:
|
||||||
authorization, _, _ = _do_request(auth_url, err_msg="Error getting challenges")
|
authorization, _, _ = _send_signed_request(auth_url, None, "Error getting challenges")
|
||||||
domain = authorization['identifier']['value']
|
domain = authorization['identifier']['value']
|
||||||
log.info("Verifying {0}...".format(domain))
|
log.info("Verifying {0}...".format(domain))
|
||||||
|
|
||||||
|
@ -138,9 +138,8 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
# check that the file is in place
|
# check that the file is in place
|
||||||
try:
|
try:
|
||||||
wellknown_url = "http://{0}/.well-known/acme-challenge/{1}".format(domain, token)
|
wellknown_url = "http://{0}/.well-known/acme-challenge/{1}".format(domain, token)
|
||||||
assert(disable_check or _do_request(wellknown_url)[0] == keyauthorization)
|
assert (disable_check or _do_request(wellknown_url)[0] == keyauthorization)
|
||||||
except (AssertionError, ValueError) as e:
|
except (AssertionError, ValueError) as e:
|
||||||
os.remove(wellknown_path)
|
|
||||||
raise ValueError("Wrote file to {0}, but couldn't download {1}: {2}".format(wellknown_path, wellknown_url, e))
|
raise ValueError("Wrote file to {0}, but couldn't download {1}: {2}".format(wellknown_path, wellknown_url, e))
|
||||||
|
|
||||||
# say the challenge is done
|
# say the challenge is done
|
||||||
|
@ -148,6 +147,7 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
authorization = _poll_until_not(auth_url, ["pending"], "Error checking challenge status for {0}".format(domain))
|
authorization = _poll_until_not(auth_url, ["pending"], "Error checking challenge status for {0}".format(domain))
|
||||||
if authorization['status'] != "valid":
|
if authorization['status'] != "valid":
|
||||||
raise ValueError("Challenge did not pass for {0}: {1}".format(domain, authorization))
|
raise ValueError("Challenge did not pass for {0}: {1}".format(domain, authorization))
|
||||||
|
os.remove(wellknown_path)
|
||||||
log.info("{0} verified!".format(domain))
|
log.info("{0} verified!".format(domain))
|
||||||
|
|
||||||
# finalize the order with the csr
|
# finalize the order with the csr
|
||||||
|
@ -161,7 +161,7 @@ def get_crt(account_key, csr, acme_dir, log=LOGGER, CA=DEFAULT_CA, disable_check
|
||||||
raise ValueError("Order failed: {0}".format(order))
|
raise ValueError("Order failed: {0}".format(order))
|
||||||
|
|
||||||
# download the certificate
|
# download the certificate
|
||||||
certificate_pem, _, _ = _do_request(order['certificate'], err_msg="Certificate download failed")
|
certificate_pem, _, _ = _send_signed_request(order['certificate'], None, "Certificate download failed")
|
||||||
log.info("Certificate signed!")
|
log.info("Certificate signed!")
|
||||||
return certificate_pem
|
return certificate_pem
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue