Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

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
};