From 2b5aa740eb881bd45c2fdbd1cf5b94ae3087bc31 Mon Sep 17 00:00:00 2001 From: Sergey Konovalov Date: Wed, 2 Dec 2020 19:35:21 +0300 Subject: [PATCH] [feature] Add savepassword param to file assembly --- Common/config/default.json | 3 +- Common/npm-shrinkwrap.json | 64 +++++++++++++++++++++ Common/package.json | 1 + Common/sources/commondefines.js | 8 +++ Common/sources/utils.js | 12 ++++ DocService/npm-shrinkwrap.json | 69 ---------------------- DocService/package.json | 1 - DocService/sources/DocsCoServer.js | 2 +- DocService/sources/canvasservice.js | 59 +++++++++---------- DocService/sources/converterservice.js | 2 +- FileConverter/npm-shrinkwrap.json | 79 -------------------------- FileConverter/package.json | 3 +- FileConverter/sources/converter.js | 22 ++++--- 13 files changed, 126 insertions(+), 199 deletions(-) diff --git a/Common/config/default.json b/Common/config/default.json index 605e2a9e..70edc314 100644 --- a/Common/config/default.json +++ b/Common/config/default.json @@ -161,7 +161,8 @@ "browser": {"string": "secret", "file": "", "tenants": {}}, "inbox": {"string": "secret", "file": "", "tenants": {}}, "outbox": {"string": "secret", "file": ""}, - "session": {"string": "secret", "file": ""} + "session": {"string": "secret", "file": ""}, + "password": "verysecretstring" }, "token": { "enable": { diff --git a/Common/npm-shrinkwrap.json b/Common/npm-shrinkwrap.json index 3a0274a8..07f07236 100644 --- a/Common/npm-shrinkwrap.json +++ b/Common/npm-shrinkwrap.json @@ -44,6 +44,17 @@ "safer-buffer": "~2.1.0" } }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -106,6 +117,11 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" }, + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -328,6 +344,11 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -523,6 +544,11 @@ "mime-db": "~1.37.0" } }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimist": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -557,6 +583,19 @@ "lodash": "^4.17.15" } }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-localstorage": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz", + "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==", + "requires": { + "write-file-atomic": "^1.1.4" + } + }, "node-statsd": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/node-statsd/-/node-statsd-0.1.1.tgz", @@ -567,6 +606,16 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "openpgp": { + "version": "4.10.8", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.8.tgz", + "integrity": "sha512-l+/u3TyR3+qS7mN0+HoNQRu/2BzHdLOMOOCDRLDE9gZGAqpKkD9ZD7hkpjan+GGY3f0nHaE7Qv7kI6qmQK+AkA==", + "requires": { + "asn1.js": "^5.0.0", + "node-fetch": "^2.1.2", + "node-localstorage": "~1.3.0" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -670,6 +719,11 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, "sshpk": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", @@ -809,6 +863,16 @@ "extsprintf": "^1.2.0" } }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/Common/package.json b/Common/package.json index ae461ed8..7c76b666 100644 --- a/Common/package.json +++ b/Common/package.json @@ -21,6 +21,7 @@ "ms": "^2.1.1", "node-cache": "^4.2.1", "node-statsd": "^0.1.1", + "openpgp": "^4.10.8", "request": "^2.88.0", "rhea": "^0.3.9", "uri-js": "^4.2.2" diff --git a/Common/sources/commondefines.js b/Common/sources/commondefines.js index 2a38911c..99b0c8a7 100644 --- a/Common/sources/commondefines.js +++ b/Common/sources/commondefines.js @@ -85,6 +85,7 @@ function InputCommand(data, copyExplicit) { this['userdata'] = data['userdata']; this['inline'] = data['inline']; this['password'] = data['password']; + this['savepassword'] = data['savepassword']; this['outputurls'] = data['outputurls']; this['closeonerror'] = data['closeonerror']; this['serverVersion'] = data['serverVersion']; @@ -137,6 +138,7 @@ function InputCommand(data, copyExplicit) { this['userdata'] = undefined; this['inline'] = undefined;//content disposition this['password'] = undefined; + this['savepassword'] = undefined; this['outputurls'] = undefined; this['closeonerror'] = undefined; this['serverVersion'] = undefined; @@ -353,6 +355,12 @@ InputCommand.prototype = { setPassword: function(data) { this['password'] = data; }, + getSavePassword: function() { + return this['savepassword']; + }, + setSavePassword: function(data) { + this['savepassword'] = data; + }, setOutputUrls: function(data) { this['outputurls'] = data; }, diff --git a/Common/sources/utils.js b/Common/sources/utils.js index 41adeb2b..9ad0ce91 100644 --- a/Common/sources/utils.js +++ b/Common/sources/utils.js @@ -57,6 +57,7 @@ const constants = require('./constants'); const logger = require('./logger'); const forwarded = require('forwarded'); const mime = require('mime'); +const openpgp = require('openpgp'); var configIpFilter = config.get('services.CoAuthoring.ipfilter'); var cfgIpFilterRules = configIpFilter.get('rules'); @@ -75,6 +76,7 @@ var cfgRequestDefaults = config.get('services.CoAuthoring.requestDefaults'); const cfgTokenOutboxInBody = config.get('services.CoAuthoring.token.outbox.inBody'); const cfgTokenEnableRequestOutbox = config.get('services.CoAuthoring.token.enable.request.outbox'); const cfgTokenOutboxUrlExclusionRegex = config.get('services.CoAuthoring.token.outbox.urlExclusionRegex'); +const cfgSecretPassword = config.get('services.CoAuthoring.secret.password'); var ANDROID_SAFE_FILENAME = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._-+,@£$€!½§~\'=()[]{}0123456789'; @@ -809,3 +811,13 @@ exports.canIncludeOutboxAuthorization = function (url) { } return false; }; +exports.encryptPassword = co.wrap(function* (password) { + console.log(`encryptPassword:${password}:${new Error().stack}`); + const { data: encrypted } = yield openpgp.encrypt({message: openpgp.message.fromText(password), passwords: [cfgSecretPassword]}); + return encrypted; +}); +exports.decryptPassword = co.wrap(function* (password) { + const message = yield openpgp.message.readArmored(password); + const { data: decrypted } = yield openpgp.decrypt({message: message, passwords: [cfgSecretPassword]}); + return decrypted; +}); diff --git a/DocService/npm-shrinkwrap.json b/DocService/npm-shrinkwrap.json index 418cc6bf..08ca6176 100644 --- a/DocService/npm-shrinkwrap.json +++ b/DocService/npm-shrinkwrap.json @@ -18,17 +18,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, "base64-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-1.0.0.tgz", @@ -39,11 +28,6 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" }, - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -303,11 +287,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, "http-errors": { "version": "1.6.3", "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -332,11 +311,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -463,11 +437,6 @@ "mime-db": "~1.37.0" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "minimist": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -537,19 +506,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-localstorage": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz", - "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==", - "requires": { - "write-file-atomic": "^1.1.4" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -558,16 +514,6 @@ "ee-first": "1.1.1" } }, - "openpgp": { - "version": "4.10.8", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.8.tgz", - "integrity": "sha512-l+/u3TyR3+qS7mN0+HoNQRu/2BzHdLOMOOCDRLDE9gZGAqpKkD9ZD7hkpjan+GGY3f0nHaE7Qv7kI6qmQK+AkA==", - "requires": { - "asn1.js": "^5.0.0", - "node-fetch": "^2.1.2", - "node-localstorage": "~1.3.0" - } - }, "packet-reader": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", @@ -815,11 +761,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, "sockjs": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", @@ -931,16 +872,6 @@ "resolved": "https://registry.npmjs.org/windows-locale/-/windows-locale-1.0.1.tgz", "integrity": "sha512-X8B22Cg9njwV4h3C5j28xmZ2eWaO69j63WhReeglB69LOT3LoqSO4Vb6TTVSfFikh4KQ9qBOJb6+WvR4tVLTfQ==" }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/DocService/package.json b/DocService/package.json index 610370d6..dbef3527 100644 --- a/DocService/package.json +++ b/DocService/package.json @@ -25,7 +25,6 @@ "multi-integer-range": "^4.0.7", "multiparty": "^4.2.1", "mysql": "^2.16.0", - "openpgp": "^4.10.8", "pg": "^7.6.0", "redis": "^2.8.0", "retry": "^0.12.0", diff --git a/DocService/sources/DocsCoServer.js b/DocService/sources/DocsCoServer.js index 960c1d26..77b19387 100644 --- a/DocService/sources/DocsCoServer.js +++ b/DocService/sources/DocsCoServer.js @@ -1871,7 +1871,7 @@ exports.install = function(server, callbackFunction) { dataWithPassword = data.openCmd; } if (dataWithPassword && dataWithPassword.password) { - dataWithPassword.password = yield canvasService.encryptPassword(dataWithPassword.password); + dataWithPassword.password = yield utils.encryptPassword(dataWithPassword.password); } } diff --git a/DocService/sources/canvasservice.js b/DocService/sources/canvasservice.js index d289daa3..dd8e9643 100644 --- a/DocService/sources/canvasservice.js +++ b/DocService/sources/canvasservice.js @@ -127,18 +127,7 @@ OutputData.prototype = { this['data'] = data; } }; -let encryptPassword = co.wrap(function* (password) { - console.log(`encryptPassword:${password}:${new Error().stack}`); - const openpgp = require('openpgp'); - const { data: encrypted } = yield openpgp.encrypt({message: openpgp.message.fromText(password), passwords: ['secret stuff']}); - return encrypted; -}); -let decryptPassword = co.wrap(function* (password) { - const openpgp = require('openpgp'); - const message = yield openpgp.message.readArmored(password); - const { data: decrypted } = yield openpgp.decrypt({message: message, passwords: ['secret stuff']}); - return decrypted; -}); + function* getOutputData(cmd, outputData, key, status, statusInfo, password, optConn, optAdditionalOutput, opt_bIsRestore) { var docId = cmd.getDocId(); switch (status) { @@ -192,11 +181,11 @@ function* getOutputData(cmd, outputData, key, status, statusInfo, password, optC let userPassword; let decryptedPassword; if (encryptedUserPassword) { - decryptedPassword = yield decryptPassword(password); - userPassword = yield decryptPassword(encryptedUserPassword); + decryptedPassword = yield utils.decryptPassword(password); + userPassword = yield utils.decryptPassword(encryptedUserPassword); } - logger.debug("checkPassword password: %s===%s docId = %s", decryptedPassword, userPassword, docId); if(password && !(encryptedUserPassword && decryptedPassword === userPassword)) { + logger.debug("getOutputData password mismatch: docId = %s", docId); if(encryptedUserPassword) { outputData.setStatus('needpassword'); outputData.setData(constants.CONVERT_PASSWORD); @@ -265,7 +254,6 @@ function* saveParts(cmd, filename) { } return result; } - function getSaveTask(cmd) { cmd.setData(null); var queueData = new commonDefines.TaskQueueData(); @@ -411,7 +399,7 @@ function* commandReopen(conn, cmd, outputData) { let selectRes = yield taskResult.select(cmd.getDocId()); if (selectRes.length > 0) { let row = selectRes[0]; - if (row.password) { + if (taskResult.FileStatus.Ok === row.status && row.password) { yield* commandOpenFillOutput(conn, cmd, outputData, false); return res; } @@ -434,14 +422,17 @@ function* commandReopen(conn, cmd, outputData) { cmd.setSaveKey(cmd.getDocId()); cmd.setOutputFormat(constants.AVS_OFFICESTUDIO_FILE_CANVAS); cmd.setEmbeddedFonts(false); - // if (isPassword) { - // cmd.setUserConnectionId(opt_userConnectionId); - // } + if (isPassword) { + cmd.setUserConnectionId(conn.user.id); + } var dataQueue = new commonDefines.TaskQueueData(); dataQueue.setCmd(cmd); dataQueue.setToFile('Editor.bin'); dataQueue.setFromSettings(true); yield* docsCoServer.addTask(dataQueue, constants.QUEUE_PRIORITY_HIGH); + } else { + outputData.setStatus('needpassword'); + outputData.setData(constants.CONVERT_PASSWORD); } } else { res = false; @@ -487,6 +478,11 @@ function* commandSendMailMerge(cmd, outputData) { } function* commandSfctByCmd(cmd, opt_priority, opt_expiration, opt_queue) { yield* addRandomKeyTaskCmd(cmd); + var selectRes = yield taskResult.select(cmd.getDocId()); + var row = selectRes.length > 0 ? selectRes[0] : null; + if (row && row.password) { + cmd.setSavePassword(row.password); + } var queueData = getSaveTask(cmd); queueData.setFromChanges(true); let priority = null != opt_priority ? opt_priority : constants.QUEUE_PRIORITY_LOW; @@ -996,12 +992,6 @@ function* commandSendMMCallback(cmd) { } logger.debug('End commandSendMMCallback: docId = %s', docId); } -function* commandOpenReopenCallback(cmd, updateTask, outputData, additionalOutput) { - let password = cmd.getPassword(); - if (password) { - updateTask.password = password; - } -} exports.openDocument = function(conn, cmd, opt_upsertRes, opt_bIsRestore) { return co(function* () { @@ -1107,7 +1097,11 @@ exports.downloadAs = function(req, res) { return; } } - + var selectRes = yield taskResult.select(docId); + var row = selectRes.length > 0 ? selectRes[0] : null; + if (row && row.password) { + cmd.setSavePassword(row.password); + } cmd.setData(req.body); var outputData = new OutputData(cmd.getCommand()); switch (cmd.getCommand()) { @@ -1222,6 +1216,9 @@ exports.saveFromChanges = function(docId, statusInfo, optFormat, opt_userId, opt cmd.setStatusInfoIn(statusInfo); cmd.setUserActionId(opt_userId); cmd.setUserActionIndex(opt_userIndex); + if (row.password) { + cmd.setSavePassword(row.password); + } yield* addRandomKeyTaskCmd(cmd); var queueData = getSaveTask(cmd); queueData.setFromChanges(true); @@ -1259,12 +1256,9 @@ exports.receiveTask = function(data, ack) { var outputData = new OutputData(cmd.getCommand()); var command = cmd.getCommand(); var additionalOutput = {needUrlKey: null, needUrlMethod: null, needUrlType: null}; - if ('open' == command) { + if ('open' == command || 'reopen' == command) { yield* getOutputData(cmd, outputData, cmd.getDocId(), updateTask.status, - updateTask.statusInfo, updateTask.password, null, additionalOutput); - } else if ('reopen' == command) { - yield* getOutputData(cmd, outputData, cmd.getDocId(), updateTask.status, - updateTask.statusInfo, updateTask.password, null, additionalOutput); + updateTask.statusInfo, updateTask.password, null, additionalOutput); } else if ('save' == command || 'savefromorigin' == command || 'sfct' == command) { yield* getOutputData(cmd, outputData, cmd.getSaveKey(), updateTask.status, updateTask.statusInfo, updateTask.password, null, additionalOutput); @@ -1298,7 +1292,6 @@ exports.receiveTask = function(data, ack) { }); }; -exports.encryptPassword = encryptPassword; exports.cleanupCache = cleanupCache; exports.commandSfctByCmd = commandSfctByCmd; exports.commandOpenStartPromise = commandOpenStartPromise; diff --git a/DocService/sources/converterservice.js b/DocService/sources/converterservice.js index 1a80ab7d..a1677df0 100644 --- a/DocService/sources/converterservice.js +++ b/DocService/sources/converterservice.js @@ -225,7 +225,7 @@ function convertRequest(req, res, isJson) { cmd.setJsonParams(JSON.stringify({'spreadsheetLayout': params.spreadsheetLayout})); } if (params.password) { - let encryptedPassword = yield canvasService.encryptPassword(params.password); + let encryptedPassword = yield utils.encryptPassword(params.password); cmd.setPassword(encryptedPassword); } cmd.setWithAuthorization(true); diff --git a/FileConverter/npm-shrinkwrap.json b/FileConverter/npm-shrinkwrap.json index ca124551..9fca47e2 100644 --- a/FileConverter/npm-shrinkwrap.json +++ b/FileConverter/npm-shrinkwrap.json @@ -12,22 +12,6 @@ "cross-spawn": "^5.1.0" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -56,21 +40,6 @@ "which": "^1.2.9" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -93,49 +62,16 @@ "yallist": "^2.1.2" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "minimist": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-localstorage": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz", - "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==", - "requires": { - "write-file-atomic": "^1.1.4" - } - }, - "openpgp": { - "version": "4.10.8", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.8.tgz", - "integrity": "sha512-l+/u3TyR3+qS7mN0+HoNQRu/2BzHdLOMOOCDRLDE9gZGAqpKkD9ZD7hkpjan+GGY3f0nHaE7Qv7kI6qmQK+AkA==", - "requires": { - "asn1.js": "^5.0.0", - "node-fetch": "^2.1.2", - "node-localstorage": "~1.3.0" - } - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -149,11 +85,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -162,16 +93,6 @@ "isexe": "^2.0.0" } }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", diff --git a/FileConverter/package.json b/FileConverter/package.json index 24f0d5e2..7e53f027 100644 --- a/FileConverter/package.json +++ b/FileConverter/package.json @@ -8,8 +8,7 @@ "@expo/spawn-async": "^1.3.0", "bytes": "^3.0.0", "co": "^4.6.0", - "config": "^2.0.1", - "openpgp": "^4.10.8" + "config": "^2.0.1" }, "pkg": { "scripts": [ diff --git a/FileConverter/sources/converter.js b/FileConverter/sources/converter.js index 084c0c14..5b4bcefc 100644 --- a/FileConverter/sources/converter.js +++ b/FileConverter/sources/converter.js @@ -86,13 +86,6 @@ var exitCodesUpload = [constants.NO_ERROR, constants.CONVERT_CORRUPTED, constant constants.CONVERT_DRM]; let inputLimitsXmlCache; -function* decryptPassword(password){ - const openpgp = require('openpgp'); - const message = yield openpgp.message.readArmored(password); - const { data: decrypted } = yield openpgp.decrypt({message: message, passwords: ['secret stuff']}); - return decrypted -} - function TaskQueueDataConvert(task) { var cmd = task.getCmd(); this.key = cmd.savekey ? cmd.savekey : cmd.id; @@ -122,6 +115,7 @@ function TaskQueueDataConvert(task) { this.jsonParams = cmd.getJsonParams(); this.lcid = cmd.getLCID(); this.password = cmd.getPassword(); + this.savePassword = cmd.getSavePassword(); this.noBase64 = cmd.getNoBase64(); this.timestamp = new Date(); } @@ -161,11 +155,16 @@ TaskQueueDataConvert.prototype = { var t = this; return co(function* () { let xml; - if (undefined !== t.password) { - let password = yield* decryptPassword(t.password); - console.log(`password:${password}`); + if (t.password || t.savePassword) { xml = ''; - xml += t.serializeXmlProp('m_sPassword', password); + if(t.password) { + let password = yield utils.decryptPassword(t.password); + xml += t.serializeXmlProp('m_sPassword', password); + } + if(t.savePassword) { + let savePassword = yield utils.decryptPassword(t.savePassword); + xml += t.serializeXmlProp('m_sSavePassword', savePassword); + } xml += ''; } return xml; @@ -667,7 +666,6 @@ function* ExecuteTask(task) { dataConvert.serialize(paramsFile); childArgs.push(paramsFile); let hiddenXml = yield dataConvert.serializeHidden(); - console.log(`hiddenXml:${hiddenXml}`); if (hiddenXml) { childArgs.push(hiddenXml); }