diff --git a/lib/nconf/stores/file.js b/lib/nconf/stores/file.js index 8d5bdd9e..f5d1e8ba 100644 --- a/lib/nconf/stores/file.js +++ b/lib/nconf/stores/file.js @@ -209,26 +209,19 @@ File.prototype.parse = function (contents) { if (this.secure) { var self = this; - var outdated = false; parsed = Object.keys(parsed).reduce(function (acc, key) { var value = parsed[key]; - var decipher = crypto.createDecipher(value.alg, self.secure.secret); - if (value.iv) { - // For backward compatibility, use createDecipheriv only if there is iv stored in file - decipher = crypto.createDecipheriv(value.alg, self.secure.secret, Buffer.from(value.iv, 'hex')); - } else { - outdated = true; + + if (!value.iv) { + throw new Error('Your encrypted file is outdated (encrypted without iv). Please re-encrypt your file using a pre-v1 release of nconf, v0.10 or above.'); } + let decipher = crypto.createDecipheriv(value.alg, self.secure.secret, Buffer.from(value.iv, 'hex')); + var plaintext = decipher.update(value.value, 'hex', 'utf8'); plaintext += decipher.final('utf8'); acc[key] = self.format.parse(plaintext); return acc; }, {}); - - if (outdated) { - // warn user if the file is encrypted without iv - console.warn('Your encrypted file is outdated (encrypted without iv). Please re-encrypt your file.'); - } } return parsed; diff --git a/test/stores/file-store.test.js b/test/stores/file-store.test.js index 0fe859a6..cbac6b63 100644 --- a/test/stores/file-store.test.js +++ b/test/stores/file-store.test.js @@ -268,15 +268,21 @@ describe('nconf/stores/file', () => { secure: 'super-secretzzz' }); - it("the load() method should decrypt legacy file properly", () => { + it("the load() method should throw an error when presented a legacy encrypted file", (done) => { secureStore.load(function (err, loaded) { - expect(err).toBe(null); - expect(loaded).toEqual(data); + try { + expect(err).not.toBe(null); + expect(loaded).toEqual(void 0); + done(); + } catch (err) { + done(err); + } }); }); - it("the loadSync() method should decrypt legacy file properly", () => { - var loaded = secureStore.loadSync(); - expect(loaded).toEqual(data); + it("the loadSync() method should throw an error when presented a legacy encrypted file", () => { + expect(() => { + secureStore.loadSync(); + }).toThrow(); }); })