forked from root/acme.js
Bug fix: Polling status using POST-as-GET wherever possible
Avoid repeating finalize POST request and challenge POST requests by using POST-as-GET requests instead. Allows for testing with Pebble, and more correctly follows the spec.
This commit is contained in:
parent
bef931f28f
commit
0aa939a227
48
acme.js
48
acme.js
|
@ -756,12 +756,8 @@ ACME._postChallenge = function (me, options, kid, auth) {
|
|||
altname: altname
|
||||
});
|
||||
|
||||
if ('processing' === resp.body.status) {
|
||||
//#console.debug('poll: again', auth.url);
|
||||
return ACME._wait(RETRY_INTERVAL).then(pollStatus);
|
||||
}
|
||||
|
||||
// This state should never occur
|
||||
// State can be pending while waiting ACME server to transition to
|
||||
// processing
|
||||
if ('pending' === resp.body.status) {
|
||||
if (count >= MAX_PEND) {
|
||||
return ACME._wait(RETRY_INTERVAL)
|
||||
|
@ -769,7 +765,12 @@ ACME._postChallenge = function (me, options, kid, auth) {
|
|||
.then(respondToChallenge);
|
||||
}
|
||||
//#console.debug('poll: again', auth.url);
|
||||
return ACME._wait(RETRY_INTERVAL).then(respondToChallenge);
|
||||
return ACME._wait(RETRY_INTERVAL).then(pollStatus);
|
||||
}
|
||||
|
||||
if ('processing' === resp.body.status) {
|
||||
//#console.debug('poll: again', auth.url);
|
||||
return ACME._wait(RETRY_INTERVAL).then(pollStatus);
|
||||
}
|
||||
|
||||
// REMOVE DNS records as soon as the state is non-processing
|
||||
|
@ -1012,14 +1013,7 @@ ACME._pollOrderStatus = function (me, options, kid, order, verifieds) {
|
|||
var body = { csr: csr64 };
|
||||
var payload = JSON.stringify(body);
|
||||
|
||||
function pollCert() {
|
||||
//#console.debug('[ACME.js] pollCert:', order._finalizeUrl);
|
||||
return U._jwsRequest(me, {
|
||||
accountKey: options.accountKey,
|
||||
url: order._finalizeUrl,
|
||||
protected: { kid: kid },
|
||||
payload: Enc.strToBuf(payload)
|
||||
}).then(function (resp) {
|
||||
function processResponse(resp) {
|
||||
ACME._notify(me, options, 'certificate_status', {
|
||||
subject: options.domains[0],
|
||||
status: resp.body.status
|
||||
|
@ -1035,7 +1029,7 @@ ACME._pollOrderStatus = function (me, options, kid, order, verifieds) {
|
|||
}
|
||||
|
||||
if ('processing' === resp.body.status) {
|
||||
return ACME._wait().then(pollCert);
|
||||
return ACME._wait().then(pollStatus);
|
||||
}
|
||||
|
||||
if (me.debug) {
|
||||
|
@ -1075,10 +1069,28 @@ ACME._pollOrderStatus = function (me, options, kid, order, verifieds) {
|
|||
return Promise.reject(
|
||||
E.UNHANDLED_ORDER_STATUS(options, verifieds, resp)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
return pollCert();
|
||||
function pollStatus() {
|
||||
return U._jwsRequest(me, {
|
||||
accountKey: options.accountKey,
|
||||
url: order._orderUrl,
|
||||
protected: { kid: kid },
|
||||
payload: Enc.binToBuf('')
|
||||
}).then(processResponse);
|
||||
}
|
||||
|
||||
function finalizeOrder() {
|
||||
//#console.debug('[ACME.js] pollCert:', order._finalizeUrl);
|
||||
return U._jwsRequest(me, {
|
||||
accountKey: options.accountKey,
|
||||
url: order._finalizeUrl,
|
||||
protected: { kid: kid },
|
||||
payload: Enc.strToBuf(payload)
|
||||
}).then(processResponse);
|
||||
}
|
||||
|
||||
return finalizeOrder();
|
||||
};
|
||||
|
||||
ACME._redeemCert = function (me, options, kid, voucher) {
|
||||
|
|
Loading…
Reference in New Issue