diff --git a/package-lock.json b/package-lock.json index fd41f1dfa..7acd69f50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,9 +54,9 @@ "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==" }, "@google-cloud/storage": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.4.tgz", - "integrity": "sha512-jtEQZ0k6EkoQEkMpisjdEFOGqQiE9rRmJo6lhfLnGVfkV5dGg1BS70wEJ8jGm3AwxOwU86bYIMHkwtAGktbAfQ==", + "version": "5.8.5", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.5.tgz", + "integrity": "sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg==", "requires": { "@google-cloud/common": "^3.6.0", "@google-cloud/paginator": "^3.0.0", @@ -68,7 +68,7 @@ "duplexify": "^4.0.0", "extend": "^3.0.2", "gaxios": "^4.0.0", - "gcs-resumable-upload": "^3.1.3", + "gcs-resumable-upload": "^3.1.4", "get-stream": "^6.0.0", "hash-stream-validation": "^0.2.2", "mime": "^2.2.0", @@ -232,9 +232,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -316,9 +316,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sdk": { - "version": "2.899.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.899.0.tgz", - "integrity": "sha512-k8jSANDQGvTyyj1f/7Hj4SWaV61/gjj/BopRmavAr6n1ayjXtUeVrV8G29+ABD3V82pHXDqLq47bqNmZ9m86xQ==", + "version": "2.903.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.903.0.tgz", + "integrity": "sha512-BP/giYLP8QJ63Jta59kph1F76oPITxRt/wNr3BdoEs9BtshWlGKk149UaseDB4wJtI+0TER5jtzBIUBcP6E+wA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -2544,9 +2544,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2762,9 +2762,9 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -2949,9 +2949,9 @@ } }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { @@ -3924,9 +3924,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "safetydance": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safetydance/-/safetydance-2.0.0.tgz", - "integrity": "sha512-DFuUlE/gRK1AsYtX7hSB2wYcBEoRgPt3uNF2okG34iLWWkfqaFrmTr0YT37XPtygWeC+gkpM9Zi/M92NYFPrcQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/safetydance/-/safetydance-2.0.1.tgz", + "integrity": "sha512-RuMpDOXn4bC+cIrzeZ6ZJR8/aaa+58KztATWO8KbEpfC4LRaYskn+Ll3H5KMikH1N1F47S+razKDqZklUkRkTg==" }, "sass-graph": { "version": "2.2.5", diff --git a/package.json b/package.json index 9c78eb942..20af4b7ba 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,10 @@ }, "dependencies": { "@google-cloud/dns": "^2.1.0", - "@google-cloud/storage": "^5.8.4", + "@google-cloud/storage": "^5.8.5", "@sindresorhus/df": "git+https://github.com/cloudron-io/df.git#type", "async": "^3.2.0", - "aws-sdk": "^2.899.0", + "aws-sdk": "^2.903.0", "basic-auth": "^2.0.1", "body-parser": "^1.19.0", "cloudron-manifestformat": "^5.10.1", @@ -58,7 +58,7 @@ "request": "^2.88.2", "rimraf": "^3.0.2", "s3-block-read-stream": "^0.5.0", - "safetydance": "^2.0.0", + "safetydance": "^2.0.1", "semver": "^7.3.5", "showdown": "^1.9.1", "speakeasy": "^2.0.0", @@ -79,7 +79,7 @@ "expect.js": "*", "hock": "^1.4.1", "js2xmlparser": "^4.0.1", - "mocha": "^8.3.2", + "mocha": "^8.4.0", "mock-aws-s3": "git+https://github.com/cloudron-io/mock-aws-s3.git", "nock": "^13.0.11", "node-sass": "^5.0.0", diff --git a/src/cert/acme2.js b/src/cert/acme2.js index b53d1a902..fae665285 100644 --- a/src/cert/acme2.js +++ b/src/cert/acme2.js @@ -86,8 +86,8 @@ Acme2.prototype.sendSignedRequest = async function (url, payload) { const payload64 = b64(payload); - const response = await safe(superagent.get(this.directory.newNonce).timeout(30000).ok(() => true)); - if (!response) throw new BoxError(BoxError.NETWORK_ERROR, `Network error sending signed request: ${safe.error.message}`); + let [error, response] = await safe(superagent.get(this.directory.newNonce).timeout(30000).ok(() => true)); + if (error) throw new BoxError(BoxError.NETWORK_ERROR, `Network error sending signed request: ${error.message}`); if (response.status !== 204) throw new BoxError(BoxError.EXTERNAL_ERROR, `Invalid response code when fetching nonce : ${response.status}`); const nonce = response.headers['Replay-Nonce'.toLowerCase()]; @@ -107,10 +107,10 @@ Acme2.prototype.sendSignedRequest = async function (url, payload) { signature: signature64 }; - const response2 = await safe(superagent.post(url).send(data).set('Content-Type', 'application/jose+json').set('User-Agent', 'acme-cloudron').timeout(30000).ok(() => true)); - if (!response2) throw new BoxError(BoxError.NETWORK_ERROR, `Network error sending signed request: ${safe.error.message}`); + [error, response] = await safe(superagent.post(url).send(data).set('Content-Type', 'application/jose+json').set('User-Agent', 'acme-cloudron').timeout(30000).ok(() => true)); + if (error) throw new BoxError(BoxError.NETWORK_ERROR, `Network error sending signed request: ${error.message}`); - return response2; + return response; }; // https://tools.ietf.org/html/rfc8555#section-6.3 @@ -187,11 +187,7 @@ Acme2.prototype.waitForOrder = async function (orderUrl) { return await promiseRetry({ times: 15, interval: 20000 }, async () => { debug('waitForOrder: getting status'); - const result = await safe(this.postAsGet(orderUrl)); - if (!result) { - debug(`waitForOrder: network error getting uri ${orderUrl}`); - throw new BoxError(BoxError.EXTERNAL_ERROR, `Network error: ${safe.error.message}`); - } + const result = await this.postAsGet(orderUrl); if (result.status !== 200) { debug(`waitForOrder: invalid response code getting uri ${result.status}`); throw new BoxError(BoxError.EXTERNAL_ERROR, `Bad response code: ${result.status}`); @@ -245,11 +241,6 @@ Acme2.prototype.waitForChallenge = async function (challenge) { debug('waitingForChallenge: getting status'); const result = await this.postAsGet(challenge.url); - if (!result) { - debug(`waitForChallenge: network error getting uri ${challenge.url}`); - throw new BoxError(BoxError.EXTERNAL_ERROR, `network error: ${safe.error.message}`); - } - if (result.status !== 200) { debug(`waitForChallenge: invalid response code getting uri ${result.status}`); throw new BoxError(BoxError.EXTERNAL_ERROR, 'Bad response code:' + result.statusCode); @@ -323,8 +314,7 @@ Acme2.prototype.downloadCertificate = async function (hostname, certUrl) { await promiseRetry({ times: 5, interval: 20000 }, async () => { debug('downloadCertificate: downloading certificate'); - const result = await safe(this.postAsGet(certUrl)); - if (!result) throw new BoxError(BoxError.NETWORK_ERROR, `Network error when downloading certificate: ${safe.error.message}`); + const result = await this.postAsGet(certUrl); if (result.statusCode === 202) throw new BoxError(BoxError.TRY_AGAIN, 'Retry downloading certificate'); if (result.statusCode !== 200) throw new BoxError(BoxError.EXTERNAL_ERROR, `Failed to get cert. Expecting 200, got ${result.statusCode} ${JSON.stringify(result.body)}`); @@ -354,8 +344,8 @@ Acme2.prototype.prepareHttpChallenge = async function (hostname, domain, authori debug('prepareHttpChallenge: writing %s to %s', keyAuthorization, path.join(paths.ACME_CHALLENGES_DIR, challenge.token)); - await safe(fs.promises.writeFile(path.join(paths.ACME_CHALLENGES_DIR, challenge.token), keyAuthorization)); - if (safe.error) throw new BoxError(BoxError.FS_ERROR, safe.error); + if (!fs.writeFileSync(path.join(paths.ACME_CHALLENGES_DIR, challenge.token), keyAuthorization)) throw new BoxError(BoxError.FS_ERROR, safe.error); + return challenge; }; @@ -503,9 +493,7 @@ Acme2.prototype.acmeFlow = async function (hostname, domain) { Acme2.prototype.loadDirectory = async function () { await promiseRetry({ times: 3, interval: 20000 }, async () => { - const response = await safe(superagent.get(this.caDirectory).timeout(30000).ok(() => true)); - - if (!response) throw new BoxError(BoxError.NETWORK_ERROR, `Network error getting directory: ${safe.error.message}`); + const response = await superagent.get(this.caDirectory).timeout(30000).ok(() => true); if (response.status !== 200) throw new BoxError(BoxError.EXTERNAL_ERROR, `Invalid response code when fetching directory : ${response.status}`);