diff --git a/DocService/npm-shrinkwrap.json b/DocService/npm-shrinkwrap.json
index 08ca6176..418cc6bf 100644
--- a/DocService/npm-shrinkwrap.json
+++ b/DocService/npm-shrinkwrap.json
@@ -18,6 +18,17 @@
"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",
@@ -28,6 +39,11 @@
"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",
@@ -287,6 +303,11 @@
"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",
@@ -311,6 +332,11 @@
"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",
@@ -437,6 +463,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",
@@ -506,6 +537,19 @@
"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",
@@ -514,6 +558,16 @@
"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",
@@ -761,6 +815,11 @@
"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",
@@ -872,6 +931,16 @@
"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 dbef3527..610370d6 100644
--- a/DocService/package.json
+++ b/DocService/package.json
@@ -25,6 +25,7 @@
"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 bd209ea1..960c1d26 100644
--- a/DocService/sources/DocsCoServer.js
+++ b/DocService/sources/DocsCoServer.js
@@ -1147,6 +1147,7 @@ exports.install = function(server, callbackFunction) {
conn.close(constants.ACCESS_DENIED_CODE, constants.ACCESS_DENIED_REASON);
return;
}
+ yield* encryptPasswordParams(data);
switch (data.type) {
case 'auth' :
yield* auth(conn, data);
@@ -1862,6 +1863,18 @@ exports.install = function(server, callbackFunction) {
return jwt.sign(payload, secret, options);
}
+ function* encryptPasswordParams(data) {
+ let dataWithPassword;
+ if (data.type === 'openDocument' && data.message) {
+ dataWithPassword = data.message;
+ } else if (data.type === 'auth' && data.openCmd) {
+ dataWithPassword = data.openCmd;
+ }
+ if (dataWithPassword && dataWithPassword.password) {
+ dataWithPassword.password = yield canvasService.encryptPassword(dataWithPassword.password);
+ }
+ }
+
function* auth(conn, data) {
//TODO: Do authorization etc. check md5 or query db
if (data.token && data.user) {
diff --git a/DocService/sources/canvasservice.js b/DocService/sources/canvasservice.js
index 865e1c00..d289daa3 100644
--- a/DocService/sources/canvasservice.js
+++ b/DocService/sources/canvasservice.js
@@ -127,8 +127,19 @@ OutputData.prototype = {
this['data'] = data;
}
};
-
-function* getOutputData(cmd, outputData, key, status, statusInfo, optConn, optAdditionalOutput, opt_bIsRestore) {
+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) {
case taskResult.FileStatus.SaveVersion:
@@ -177,7 +188,23 @@ function* getOutputData(cmd, outputData, key, status, statusInfo, optConn, optAd
optAdditionalOutput.needUrlType = commonDefines.c_oAscUrlTypes.Temporary;
}
} else {
- if (optConn) {
+ let encryptedUserPassword = cmd.getPassword();
+ let userPassword;
+ let decryptedPassword;
+ if (encryptedUserPassword) {
+ decryptedPassword = yield decryptPassword(password);
+ userPassword = yield decryptPassword(encryptedUserPassword);
+ }
+ logger.debug("checkPassword password: %s===%s docId = %s", decryptedPassword, userPassword, docId);
+ if(password && !(encryptedUserPassword && decryptedPassword === userPassword)) {
+ if(encryptedUserPassword) {
+ outputData.setStatus('needpassword');
+ outputData.setData(constants.CONVERT_PASSWORD);
+ } else {
+ outputData.setStatus('needpassword');
+ outputData.setData(constants.CONVERT_DRM);
+ }
+ } else if (optConn) {
outputData.setData(yield storage.getSignedUrls(optConn.baseUrl, key, commonDefines.c_oAscUrlTypes.Session));
} else if (optAdditionalOutput) {
optAdditionalOutput.needUrlKey = key;
@@ -238,6 +265,7 @@ function* saveParts(cmd, filename) {
}
return result;
}
+
function getSaveTask(cmd) {
cmd.setData(null);
var queueData = new commonDefines.TaskQueueData();
@@ -258,18 +286,20 @@ function getUpdateResponse(cmd) {
var statusInfo = cmd.getStatusInfo();
if (constants.NO_ERROR == statusInfo) {
updateTask.status = taskResult.FileStatus.Ok;
+ let password = cmd.getPassword();
+ if (password) {
+ updateTask.password = password;
+ }
} else if (constants.CONVERT_DOWNLOAD == statusInfo) {
updateTask.status = taskResult.FileStatus.ErrToReload;
} else if (constants.CONVERT_NEED_PARAMS == statusInfo) {
updateTask.status = taskResult.FileStatus.NeedParams;
- } else if (constants.CONVERT_DRM == statusInfo) {
+ } else if (constants.CONVERT_DRM == statusInfo || constants.CONVERT_PASSWORD == statusInfo) {
if (cfgOpenProtectedFile) {
- updateTask.status = taskResult.FileStatus.NeedPassword;
+ updateTask.status = taskResult.FileStatus.NeedPassword;
} else {
updateTask.status = taskResult.FileStatus.Err;
}
- } else if (constants.CONVERT_PASSWORD == statusInfo) {
- updateTask.status = taskResult.FileStatus.NeedPassword;
} else if (constants.CONVERT_DEAD_LETTER == statusInfo) {
updateTask.status = taskResult.FileStatus.ErrToReload;
} else {
@@ -369,40 +399,53 @@ function* commandOpenFillOutput(conn, cmd, outputData, opt_bIsRestore) {
if (taskResult.FileStatus.None === row.status) {
needAddTask = true;
} else {
- yield* getOutputData(cmd, outputData, cmd.getDocId(), row.status, row.status_info, conn, undefined, opt_bIsRestore);
+ yield* getOutputData(cmd, outputData, cmd.getDocId(), row.status, row.status_info, row.password, conn, undefined, opt_bIsRestore);
}
}
return needAddTask;
}
-function* commandReopen(cmd) {
+function* commandReopen(conn, cmd, outputData) {
let res = true;
let isPassword = undefined !== cmd.getPassword();
+ if(isPassword) {
+ let selectRes = yield taskResult.select(cmd.getDocId());
+ if (selectRes.length > 0) {
+ let row = selectRes[0];
+ if (row.password) {
+ yield* commandOpenFillOutput(conn, cmd, outputData, false);
+ return res;
+ }
+ }
+ }
if (!isPassword || cfgOpenProtectedFile) {
- let updateMask = new taskResult.TaskResultData();
- updateMask.key = cmd.getDocId();
+ let updateMask = new taskResult.TaskResultData();
+ updateMask.key = cmd.getDocId();
updateMask.status = isPassword ? taskResult.FileStatus.NeedPassword : taskResult.FileStatus.NeedParams;
- var task = new taskResult.TaskResultData();
- task.key = cmd.getDocId();
- task.status = taskResult.FileStatus.WaitQueue;
- task.statusInfo = constants.NO_ERROR;
+ var task = new taskResult.TaskResultData();
+ task.key = cmd.getDocId();
+ task.status = taskResult.FileStatus.WaitQueue;
+ task.statusInfo = constants.NO_ERROR;
- var upsertRes = yield taskResult.updateIf(task, updateMask);
- if (upsertRes.affectedRows > 0) {
- //add task
- cmd.setUrl(null);//url may expire
- cmd.setSaveKey(cmd.getDocId());
- cmd.setOutputFormat(constants.AVS_OFFICESTUDIO_FILE_CANVAS);
- cmd.setEmbeddedFonts(false);
- var dataQueue = new commonDefines.TaskQueueData();
- dataQueue.setCmd(cmd);
- dataQueue.setToFile('Editor.bin');
- dataQueue.setFromSettings(true);
- yield* docsCoServer.addTask(dataQueue, constants.QUEUE_PRIORITY_HIGH);
- }
+ var upsertRes = yield taskResult.updateIf(task, updateMask);
+ if (upsertRes.affectedRows > 0) {
+ //add task
+ cmd.setUrl(null);//url may expire
+ cmd.setSaveKey(cmd.getDocId());
+ cmd.setOutputFormat(constants.AVS_OFFICESTUDIO_FILE_CANVAS);
+ cmd.setEmbeddedFonts(false);
+ // if (isPassword) {
+ // cmd.setUserConnectionId(opt_userConnectionId);
+ // }
+ var dataQueue = new commonDefines.TaskQueueData();
+ dataQueue.setCmd(cmd);
+ dataQueue.setToFile('Editor.bin');
+ dataQueue.setFromSettings(true);
+ yield* docsCoServer.addTask(dataQueue, constants.QUEUE_PRIORITY_HIGH);
+ }
} else {
res = false;
-}
+ }
return res;
}
function* commandSave(cmd, outputData) {
@@ -953,6 +996,12 @@ 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* () {
@@ -971,7 +1020,7 @@ exports.openDocument = function(conn, cmd, opt_upsertRes, opt_bIsRestore) {
yield* commandOpen(conn, cmd, outputData, opt_upsertRes, opt_bIsRestore);
break;
case 'reopen':
- res = yield* commandReopen(cmd);
+ res = yield* commandReopen(conn, cmd, outputData);
break;
case 'imgurls':
yield* commandImgurls(conn, cmd, outputData);
@@ -1210,13 +1259,15 @@ 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 || 'reopen' == command) {
- //yield utils.sleep(5000);
+ if ('open' == command) {
yield* getOutputData(cmd, outputData, cmd.getDocId(), updateTask.status,
- updateTask.statusInfo, null, additionalOutput);
+ updateTask.statusInfo, updateTask.password, null, additionalOutput);
+ } else if ('reopen' == command) {
+ yield* getOutputData(cmd, outputData, cmd.getDocId(), updateTask.status,
+ updateTask.statusInfo, updateTask.password, null, additionalOutput);
} else if ('save' == command || 'savefromorigin' == command || 'sfct' == command) {
yield* getOutputData(cmd, outputData, cmd.getSaveKey(), updateTask.status,
- updateTask.statusInfo, null, additionalOutput);
+ updateTask.statusInfo, updateTask.password, null, additionalOutput);
} else if ('sfcm' == command) {
yield* commandSfcCallback(cmd, true);
} else if ('sfc' == command) {
@@ -1247,6 +1298,7 @@ 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 5111e227..1a80ab7d 100644
--- a/DocService/sources/converterservice.js
+++ b/DocService/sources/converterservice.js
@@ -224,7 +224,10 @@ function convertRequest(req, res, isJson) {
if (params.spreadsheetLayout) {
cmd.setJsonParams(JSON.stringify({'spreadsheetLayout': params.spreadsheetLayout}));
}
- cmd.setPassword(params.password);
+ if (params.password) {
+ let encryptedPassword = yield canvasService.encryptPassword(params.password);
+ cmd.setPassword(encryptedPassword);
+ }
cmd.setWithAuthorization(true);
var thumbnail = params.thumbnail;
if (thumbnail) {
diff --git a/DocService/sources/mySqlBaseConnector.js b/DocService/sources/mySqlBaseConnector.js
index 1c04fd7d..231fc691 100644
--- a/DocService/sources/mySqlBaseConnector.js
+++ b/DocService/sources/mySqlBaseConnector.js
@@ -101,17 +101,18 @@ exports.upsert = function(task, opt_updateUserIndex) {
let p6 = addSqlParam(task.changeId, values);
let p7 = addSqlParam(cbInsert, values);
let p8 = addSqlParam(task.baseurl, values);
- let p9 = addSqlParam(dateNow, values);
- var sqlCommand = 'INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl)'+
- ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8}) ON DUPLICATE KEY UPDATE` +
- ` last_open_date = ${p9}`;
+ let p9 = addSqlParam(task.password, values);
+ let pDate = addSqlParam(dateNow, values);
+ var sqlCommand = 'INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl, password)'+
+ ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8}, ${p9}) ON DUPLICATE KEY UPDATE` +
+ ` last_open_date = ${pDate}`;
if (task.callback) {
- let p10 = addSqlParam(JSON.stringify(task.callback), values);
- sqlCommand += `, callback = CONCAT(callback , '${sqlBase.UserCallback.prototype.delimiter}{"userIndex":' , (user_index + 1) , ',"callback":', ${p10}, '}')`;
+ let pCallback = addSqlParam(JSON.stringify(task.callback), values);
+ sqlCommand += `, callback = CONCAT(callback , '${sqlBase.UserCallback.prototype.delimiter}{"userIndex":' , (user_index + 1) , ',"callback":', ${pCallback}, '}')`;
}
if (task.baseurl) {
- let p11 = addSqlParam(task.baseurl, values);
- sqlCommand += `, baseurl = ${p11}`;
+ let pBaseurl = addSqlParam(task.baseurl, values);
+ sqlCommand += `, baseurl = ${pBaseurl}`;
}
if (opt_updateUserIndex) {
sqlCommand += ', user_index = LAST_INSERT_ID(user_index + 1)';
diff --git a/DocService/sources/postgreSqlBaseConnector.js b/DocService/sources/postgreSqlBaseConnector.js
index 0c54b5d0..bcb1d654 100644
--- a/DocService/sources/postgreSqlBaseConnector.js
+++ b/DocService/sources/postgreSqlBaseConnector.js
@@ -118,20 +118,21 @@ function getUpsertString(task, values) {
let p6 = addSqlParam(task.changeId, values);
let p7 = addSqlParam(cbInsert, values);
let p8 = addSqlParam(task.baseurl, values);
+ let p9 = addSqlParam(task.password, values);
if (isSupportOnConflict) {
- let p9 = addSqlParam(dateNow, values);
+ let pDate = addSqlParam(dateNow, values);
//http://stackoverflow.com/questions/34762732/how-to-find-out-if-an-upsert-was-an-update-with-postgresql-9-5-upsert
- let sqlCommand = "INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl)";
- sqlCommand += ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8})`;
- sqlCommand += ` ON CONFLICT (id) DO UPDATE SET last_open_date = ${p9}`;
+ let sqlCommand = "INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl, password)";
+ sqlCommand += ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8}, ${p9})`;
+ sqlCommand += ` ON CONFLICT (id) DO UPDATE SET last_open_date = ${pDate}`;
if (task.callback) {
- let p10 = addSqlParam(JSON.stringify(task.callback), values);
+ let pCallback = addSqlParam(JSON.stringify(task.callback), values);
sqlCommand += `, callback = task_result.callback || '${sqlBase.UserCallback.prototype.delimiter}{"userIndex":' `;
- sqlCommand += ` || (task_result.user_index + 1)::text || ',"callback":' || ${p10}::text || '}'`;
+ sqlCommand += ` || (task_result.user_index + 1)::text || ',"callback":' || ${pCallback}::text || '}'`;
}
if (task.baseurl) {
- let p11 = addSqlParam(task.baseurl, values);
- sqlCommand += `, baseurl = ${p11}`;
+ let pBaseurl = addSqlParam(task.baseurl, values);
+ sqlCommand += `, baseurl = ${pBaseurl}`;
}
sqlCommand += ", user_index = task_result.user_index + 1 RETURNING user_index as userindex;";
return sqlCommand;
diff --git a/DocService/sources/taskresult.js b/DocService/sources/taskresult.js
index f1386767..c6df9381 100644
--- a/DocService/sources/taskresult.js
+++ b/DocService/sources/taskresult.js
@@ -64,6 +64,7 @@ function TaskResultData() {
this.changeId = null;
this.callback = null;
this.baseurl = null;
+ this.password = null;
}
TaskResultData.prototype.completeDefaults = function() {
if (!this.key) {
@@ -90,6 +91,9 @@ TaskResultData.prototype.completeDefaults = function() {
if (!this.baseurl) {
this.baseurl = '';
}
+ if (!this.password) {
+ this.password = '';
+ }
};
function upsert(task, opt_updateUserIndex) {
@@ -146,6 +150,10 @@ function toUpdateArray(task, updateTime, isMask, values) {
let sqlParam = addSqlParam(task.baseurl, values);
res.push(`baseurl=${sqlParam}`);
}
+ if (null != task.password) {
+ let sqlParam = addSqlParam(task.password, values);
+ res.push(`password=${sqlParam}`);
+ }
return res;
}
@@ -202,8 +210,9 @@ function addRandomKey(task, opt_prefix, opt_size) {
let p6 = addSqlParam(task.changeId, values);
let p7 = addSqlParam(task.callback, values);
let p8 = addSqlParam(task.baseurl, values);
- let sqlCommand = 'INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl)' +
- ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8});`;
+ let p9 = addSqlParam(task.password, values);
+ let sqlCommand = 'INSERT INTO task_result (id, status, status_info, last_open_date, user_index, change_id, callback, baseurl, password)' +
+ ` VALUES (${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8}, ${p9});`;
sqlBase.baseConnector.sqlQuery(sqlCommand, function(error, result) {
if (error) {
reject(error);
diff --git a/FileConverter/npm-shrinkwrap.json b/FileConverter/npm-shrinkwrap.json
index 9fca47e2..ca124551 100644
--- a/FileConverter/npm-shrinkwrap.json
+++ b/FileConverter/npm-shrinkwrap.json
@@ -12,6 +12,22 @@
"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",
@@ -40,6 +56,21 @@
"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",
@@ -62,16 +93,49 @@
"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",
@@ -85,6 +149,11 @@
"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",
@@ -93,6 +162,16 @@
"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 7e53f027..24f0d5e2 100644
--- a/FileConverter/package.json
+++ b/FileConverter/package.json
@@ -8,7 +8,8 @@
"@expo/spawn-async": "^1.3.0",
"bytes": "^3.0.0",
"co": "^4.6.0",
- "config": "^2.0.1"
+ "config": "^2.0.1",
+ "openpgp": "^4.10.8"
},
"pkg": {
"scripts": [
diff --git a/FileConverter/sources/converter.js b/FileConverter/sources/converter.js
index 8b3f00f0..084c0c14 100644
--- a/FileConverter/sources/converter.js
+++ b/FileConverter/sources/converter.js
@@ -86,6 +86,13 @@ 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;
@@ -149,13 +156,20 @@ TaskQueueDataConvert.prototype = {
xml += this.serializeLimit();
xml += '';
fs.writeFileSync(fsPath, xml, {encoding: 'utf8'});
- let hiddenXml;
- if (undefined !== this.password) {
- hiddenXml = '';
- hiddenXml += this.serializeXmlProp('m_sPassword', this.password);
- hiddenXml += '';
- }
- return hiddenXml;
+ },
+ serializeHidden: function() {
+ var t = this;
+ return co(function* () {
+ let xml;
+ if (undefined !== t.password) {
+ let password = yield* decryptPassword(t.password);
+ console.log(`password:${password}`);
+ xml = '';
+ xml += t.serializeXmlProp('m_sPassword', password);
+ xml += '';
+ }
+ return xml;
+ });
},
serializeMailMerge: function(data) {
var xml = '';
@@ -650,8 +664,10 @@ function* ExecuteTask(task) {
if (!isBuilder) {
processPath = cfgX2tPath;
let paramsFile = path.join(tempDirs.temp, 'params.xml');
- let hiddenXml = dataConvert.serialize(paramsFile);
+ dataConvert.serialize(paramsFile);
childArgs.push(paramsFile);
+ let hiddenXml = yield dataConvert.serializeHidden();
+ console.log(`hiddenXml:${hiddenXml}`);
if (hiddenXml) {
childArgs.push(hiddenXml);
}