236 lines
7.6 KiB
JavaScript
236 lines
7.6 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2024
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
|
|
* street, Riga, Latvia, EU, LV-1050.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
|
|
const constants = require('../../../Common/sources/constants');
|
|
|
|
function UserCallback() {
|
|
this.userIndex = undefined;
|
|
this.callback = undefined;
|
|
}
|
|
UserCallback.prototype.fromValues = function (userIndex, callback) {
|
|
if (null !== userIndex) {
|
|
this.userIndex = userIndex;
|
|
}
|
|
if (null !== callback) {
|
|
this.callback = callback;
|
|
}
|
|
};
|
|
UserCallback.prototype.delimiter = constants.CHAR_DELIMITER;
|
|
UserCallback.prototype.toSQLInsert = function () {
|
|
return this.delimiter + JSON.stringify(this);
|
|
};
|
|
UserCallback.prototype.getCallbackByUserIndex = function (ctx, callbacksStr, opt_userIndex) {
|
|
ctx.logger.debug('getCallbackByUserIndex: userIndex = %s callbacks = %s', opt_userIndex, callbacksStr);
|
|
if (!callbacksStr || !callbacksStr.startsWith(UserCallback.prototype.delimiter)) {
|
|
const index = callbacksStr.indexOf(UserCallback.prototype.delimiter);
|
|
if (-1 === index) {
|
|
//old format
|
|
return callbacksStr;
|
|
} else {
|
|
//mix of old and new format
|
|
callbacksStr = callbacksStr.substring(index);
|
|
}
|
|
}
|
|
const callbacks = callbacksStr.split(UserCallback.prototype.delimiter);
|
|
let callbackUrl = '';
|
|
for (let i = 1; i < callbacks.length; ++i) {
|
|
const callback = JSON.parse(callbacks[i]);
|
|
callbackUrl = callback.callback;
|
|
if (callback.userIndex === opt_userIndex) {
|
|
break;
|
|
}
|
|
}
|
|
return callbackUrl;
|
|
};
|
|
UserCallback.prototype.getCallbacks = function (ctx, callbacksStr) {
|
|
ctx.logger.debug('getCallbacks: callbacks = %s', callbacksStr);
|
|
if (!callbacksStr || !callbacksStr.startsWith(UserCallback.prototype.delimiter)) {
|
|
const index = callbacksStr.indexOf(UserCallback.prototype.delimiter);
|
|
if (-1 === index) {
|
|
//old format
|
|
return [callbacksStr];
|
|
} else {
|
|
//mix of old and new format
|
|
callbacksStr = callbacksStr.substring(index);
|
|
}
|
|
}
|
|
const callbacks = callbacksStr.split(UserCallback.prototype.delimiter);
|
|
const res = [];
|
|
for (let i = 1; i < callbacks.length; ++i) {
|
|
const callback = JSON.parse(callbacks[i]);
|
|
res.push(callback.callback);
|
|
}
|
|
return res;
|
|
};
|
|
|
|
function DocumentPassword() {
|
|
this.password = undefined;
|
|
this.change = undefined;
|
|
}
|
|
DocumentPassword.prototype.fromString = function (passwordStr) {
|
|
const parsed = JSON.parse(passwordStr);
|
|
this.fromValues(parsed.password, parsed.change);
|
|
};
|
|
DocumentPassword.prototype.fromValues = function (password, change) {
|
|
if (null !== password) {
|
|
this.password = password;
|
|
}
|
|
if (null !== change) {
|
|
this.change = change;
|
|
}
|
|
};
|
|
DocumentPassword.prototype.delimiter = constants.CHAR_DELIMITER;
|
|
DocumentPassword.prototype.toSQLInsert = function () {
|
|
return this.delimiter + JSON.stringify(this);
|
|
};
|
|
DocumentPassword.prototype.isInitial = function () {
|
|
return !this.change;
|
|
};
|
|
DocumentPassword.prototype.getDocPassword = function (ctx, docPasswordStr) {
|
|
const res = {initial: undefined, current: undefined, change: undefined};
|
|
if (docPasswordStr) {
|
|
ctx.logger.debug('getDocPassword: passwords = %s', docPasswordStr);
|
|
const passwords = docPasswordStr.split(UserCallback.prototype.delimiter);
|
|
|
|
for (let i = 1; i < passwords.length; ++i) {
|
|
const password = new DocumentPassword();
|
|
password.fromString(passwords[i]);
|
|
if (password.isInitial()) {
|
|
res.initial = password.password;
|
|
} else {
|
|
res.change = password.change;
|
|
}
|
|
res.current = password.password;
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
DocumentPassword.prototype.getCurPassword = function (ctx, docPasswordStr) {
|
|
const docPassword = this.getDocPassword(ctx, docPasswordStr);
|
|
return docPassword.current;
|
|
};
|
|
DocumentPassword.prototype.hasPasswordChanges = function (ctx, docPasswordStr) {
|
|
const docPassword = this.getDocPassword(ctx, docPasswordStr);
|
|
return docPassword.initial !== docPassword.current;
|
|
};
|
|
|
|
function DocumentAdditional() {
|
|
this.data = [];
|
|
}
|
|
DocumentAdditional.prototype.delimiter = constants.CHAR_DELIMITER;
|
|
DocumentAdditional.prototype.toSQLInsert = function () {
|
|
if (this.data.length) {
|
|
const vals = this.data.map(currentValue => {
|
|
return JSON.stringify(currentValue);
|
|
});
|
|
return this.delimiter + vals.join(this.delimiter);
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
DocumentAdditional.prototype.fromString = function (str) {
|
|
if (!str) {
|
|
return;
|
|
}
|
|
const vals = str.split(this.delimiter).slice(1);
|
|
this.data = vals.map(currentValue => {
|
|
return JSON.parse(currentValue);
|
|
});
|
|
};
|
|
DocumentAdditional.prototype.setOpenedAt = function (time, timezoneOffset, headingsColor) {
|
|
const additional = new DocumentAdditional();
|
|
additional.data.push({time, timezoneOffset, headingsColor});
|
|
return additional.toSQLInsert();
|
|
};
|
|
DocumentAdditional.prototype.getOpenedAt = function (str) {
|
|
let res;
|
|
const val = new DocumentAdditional();
|
|
val.fromString(str);
|
|
val.data.forEach(elem => {
|
|
if (undefined !== elem.timezoneOffset) {
|
|
res = elem.time - elem.timezoneOffset * 60 * 1000;
|
|
}
|
|
});
|
|
return res;
|
|
};
|
|
DocumentAdditional.prototype.getDocumentLayout = function (str) {
|
|
let res;
|
|
const val = new DocumentAdditional();
|
|
val.fromString(str);
|
|
val.data.forEach(elem => {
|
|
if (undefined !== elem.timezoneOffset) {
|
|
res = {openedAt: elem.time - elem.timezoneOffset * 60 * 1000, headingsColor: elem.headingsColor};
|
|
}
|
|
});
|
|
return res;
|
|
};
|
|
|
|
DocumentAdditional.prototype.setShardKey = function (shardKey) {
|
|
const additional = new DocumentAdditional();
|
|
additional.data.push({shardKey});
|
|
return additional.toSQLInsert();
|
|
};
|
|
DocumentAdditional.prototype.getShardKey = function (str) {
|
|
let res;
|
|
const val = new DocumentAdditional();
|
|
val.fromString(str);
|
|
val.data.forEach(elem => {
|
|
if (elem.shardKey) {
|
|
res = elem.shardKey;
|
|
}
|
|
});
|
|
return res;
|
|
};
|
|
|
|
DocumentAdditional.prototype.setWopiSrc = function (wopiSrc) {
|
|
const additional = new DocumentAdditional();
|
|
additional.data.push({wopiSrc});
|
|
return additional.toSQLInsert();
|
|
};
|
|
DocumentAdditional.prototype.getWopiSrc = function (str) {
|
|
let res;
|
|
const val = new DocumentAdditional();
|
|
val.fromString(str);
|
|
val.data.forEach(elem => {
|
|
if (elem.wopiSrc) {
|
|
res = elem.wopiSrc;
|
|
}
|
|
});
|
|
return res;
|
|
};
|
|
|
|
module.exports = {
|
|
UserCallback,
|
|
DocumentPassword,
|
|
DocumentAdditional
|
|
};
|