From 5d4785ee199dc4087ffc377e528e5b20b887c2c7 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Tue, 28 May 2019 04:18:58 -0600 Subject: [PATCH] better error handling --- app/js/greenlock.js | 57 ++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/app/js/greenlock.js b/app/js/greenlock.js index c499df8..8c3147d 100644 --- a/app/js/greenlock.js +++ b/app/js/greenlock.js @@ -61,23 +61,39 @@ } } + function newAlert(str) { + return new Promise(function () { + setTimeout(function () { + window.alert(str); + if (window.confirm("Start over?")) { + document.location.href = document.location.href.replace(/\/app.*/, '/'); + } + }, 10); + }); + } + function submitForm(ev) { var j = i; i += 1; - return PromiseA.resolve(steps[j].submit(ev)).catch(function (err) { + return PromiseA.resolve().then(function () { + return steps[j].submit(ev); + }).catch(function (err) { var ourfault = true; console.error(err); - console.error(Object.keys(err)); - if ('E_CHALLENGE_INVALID' === err.code) { + if (/failed to fetch/i.test(err.message)) { + return newAlert("Network connection failure."); + } + + if ('E_ACME_CHALLENGE' === err.code) { if ('dns-01' === err.type) { ourfault = false; - window.alert("It looks like the DNS record you set for " + return newAlert("It looks like the DNS record you set for " + err.altname + " was incorrect or did not propagate. " + "The error message was '" + err.message + "'"); } else if ('http-01' === err.type) { ourfault = false; - window.alert("It looks like the file you uploaded for " + return newAlert("It looks like the file you uploaded for " + err.altname + " was incorrect or could not be downloaded. " + "The error message was '" + err.message + "'"); } @@ -88,6 +104,7 @@ window.alert("Something went wrong. It's probably our fault, not yours." + " Please email aj@rootprojects.org to let him know. The error message is: \n" + JSON.stringify(err, null, 2)); + return new Promise(function () {}); } }); } @@ -207,7 +224,7 @@ acme = ACME.create({ Keypairs: Keypairs, CSR: CSR }); return acme.init(acmeDirectoryUrl).then(function (directory) { $qs('.js-acme-tos-url').href = directory.meta.termsOfService; - steps[i](); + return steps[i](); }); }; @@ -248,12 +265,7 @@ }).catch(function (err) { console.error("[accounts] failed to upsert account:"); console.error(err); - window.alert(err.message || JSON.stringify(err, null, 2)); - return new Promise(function () { - if (window.confirm("Start over?")) { - document.location.reload(); - } - }); + return newAlert(err.message || JSON.stringify(err, null, 2)); }); }); }).then(function () { @@ -344,12 +356,19 @@ console.info("[housekeeping] challenges", info.challenges); updateChallengeType(); - steps[i](); + return steps[i](); + }).catch(function (err) { + if (err.detail || err.urn) { + console.error("(Probably) User Error:"); + console.error(err); + return newAlert("There was an error, probably with your email or domain:\n" + err.message); + } + throw err; }); }).catch(function (err) { console.error('Step \'\' Error:'); console.error(err, err.stack); - window.alert("An error happened (but it's not your fault)." + return newAlert("An error happened (but it's not your fault)." + " Email aj@rootprojects.org to let him know that 'order and get challenges' failed."); }); }; @@ -388,7 +407,7 @@ }).then(function (certs) { return Keypairs.export({ jwk: serverJwk }).then(function (keyPem) { console.info('WINNING!'); - console.log(certs); + console.info(certs); $qs('#js-fullchain').innerHTML = [ certs.cert.trim() + "\n" , certs.chain + "\n" @@ -399,7 +418,7 @@ $qs('#js-privkey').innerHTML = keyPem; $qs("#js-download-privkey-link").href = "data:text/octet-stream;base64," + window.btoa(keyPem); - submitForm(); + return submitForm(); }); }); }); @@ -416,7 +435,7 @@ steps[4].submit = function () { console.info('[submit] 4. Order complete'); - steps[i](); + return steps[i](); }; steps[5] = function () { @@ -435,7 +454,7 @@ $qsa('.js-acme-form').forEach(function ($el) { $el.addEventListener('submit', function (ev) { ev.preventDefault(); - submitForm(ev); + return submitForm(ev); }); }); @@ -457,7 +476,7 @@ updateApiType(); steps[2](); - submitForm(); + return submitForm(); } else { steps[1](); }