163 lines
5.8 KiB
JavaScript
163 lines
5.8 KiB
JavaScript
|
*
|
||
|
* (c) Copyright Ascensio System SIA 2010-2019
|
||
|
*
|
||
|
* 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-12 Ernesta Birznieka-Upisha
|
||
|
* 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
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const config = require('config');
|
||
|
const co = require('co');
|
||
|
const NodeCache = require( "node-cache" );
|
||
|
const license = require('./../../Common/sources/license');
|
||
|
const constants = require('./../../Common/sources/constants');
|
||
|
const commonDefines = require('./../../Common/sources/commondefines');
|
||
|
const utils = require('./../../Common/sources/utils');
|
||
|
const { readFile } = require('fs/promises');
|
||
|
const path = require('path');
|
||
|
|
||
|
const oPackageType = config.get('license.packageType');
|
||
|
const cfgTenantsBaseDomain = config.get('tenants.baseDomain');
|
||
|
const cfgTenantsBaseDir = config.get('tenants.baseDir');
|
||
|
const cfgTenantsFilenameSecret = config.get('tenants.filenameSecret');
|
||
|
const cfgTenantsFilenameLicense = config.get('tenants.filenameLicense');
|
||
|
const cfgTenantsDefaultTenant = config.get('tenants.defaultTenant');
|
||
|
const cfgTenantsCache = config.get('tenants.cache');
|
||
|
const cfgSecretInbox = config.get('services.CoAuthoring.secret.inbox');
|
||
|
const cfgSecretOutbox = config.get('services.CoAuthoring.secret.outbox');
|
||
|
const cfgSecretSession = config.get('services.CoAuthoring.secret.session');
|
||
|
|
||
|
let licenseInfo;
|
||
|
let licenseOriginal;
|
||
|
|
||
|
const nodeCache = new NodeCache(cfgTenantsCache);
|
||
|
|
||
|
function getDefautTenant() {
|
||
|
return cfgTenantsDefaultTenant;
|
||
|
}
|
||
|
function getTenant(ctx, domain) {
|
||
|
let tenant = getDefautTenant();
|
||
|
if (domain) {
|
||
|
//remove port
|
||
|
domain = domain.replace(/\:.*$/, '');
|
||
|
tenant = domain;
|
||
|
if (cfgTenantsBaseDomain) {
|
||
|
let index = domain.indexOf('.' + cfgTenantsBaseDomain);
|
||
|
if (-1 !== index) {
|
||
|
tenant = domain.substring(0, index);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return tenant;
|
||
|
}
|
||
|
function getTenantByConnection(ctx, conn) {
|
||
|
return isMultitenantMode() ? getTenant(ctx, utils.getDomainByConnection(ctx, conn)) : getDefautTenant();
|
||
|
}
|
||
|
function getTenantByRequest(ctx, req) {
|
||
|
return isMultitenantMode() ? getTenant(ctx, utils.getDomainByRequest(ctx, req)) : getDefautTenant();
|
||
|
}
|
||
|
function getTenantPathPrefix(ctx) {
|
||
|
return isMultitenantMode() ? utils.removeIllegalCharacters(ctx.tenant) + '/' : '';
|
||
|
}
|
||
|
function getTenantSecret(ctx, type) {
|
||
|
return co(function*() {
|
||
|
let res = undefined;
|
||
|
if (isMultitenantMode()) {
|
||
|
let tenantPath = utils.removeIllegalCharacters(ctx.tenant);
|
||
|
let secretPath = path.join(cfgTenantsBaseDir, tenantPath, cfgTenantsFilenameSecret);
|
||
|
res = nodeCache.get(secretPath);
|
||
|
if (res) {
|
||
|
ctx.logger.debug('getTenantSecret from cache');
|
||
|
} else {
|
||
|
res = yield readFile(secretPath, {encoding: 'utf8'});
|
||
|
nodeCache.set(secretPath, res);
|
||
|
ctx.logger.debug('getTenantSecret from %s', secretPath);
|
||
|
}
|
||
|
} else {
|
||
|
switch (type) {
|
||
|
case commonDefines.c_oAscSecretType.Browser:
|
||
|
case commonDefines.c_oAscSecretType.Inbox:
|
||
|
res = utils.getSecretByElem(cfgSecretInbox);
|
||
|
break;
|
||
|
case commonDefines.c_oAscSecretType.Outbox:
|
||
|
res = utils.getSecretByElem(cfgSecretOutbox);
|
||
|
break;
|
||
|
case commonDefines.c_oAscSecretType.Session:
|
||
|
res = utils.getSecretByElem(cfgSecretSession);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return res;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function setDefLicense(data, original) {
|
||
|
licenseInfo = data;
|
||
|
licenseOriginal = original;
|
||
|
}
|
||
|
function getTenantLicense(ctx) {
|
||
|
return co(function*() {
|
||
|
let res = {
|
||
|
count: 1,
|
||
|
type: c_LR.Success,
|
||
|
light: true,
|
||
|
packageType: constants.PACKAGE_TYPE_I,
|
||
|
mode: constants.LICENSE_MODE.None,
|
||
|
branding: true,
|
||
|
connections: constants.LICENSE_CONNECTIONS,
|
||
|
connectionsView: constants.LICENSE_CONNECTIONS,
|
||
|
customization: true,
|
||
|
advancedApi: true,
|
||
|
usersCount: constants.LICENSE_CONNECTIONS,
|
||
|
usersViewCount: constants.LICENSE_CONNECTIONS,
|
||
|
usersExpire: constants.LICENSE_EXPIRE_USERS_ONE_DAY,
|
||
|
hasLicense: true,
|
||
|
plugins: true,
|
||
|
buildDate: oBuildDate,
|
||
|
startDate: startDate,
|
||
|
endDate: new Date("2099-01-01T23:59:59.000Z"),
|
||
|
customerId: "",
|
||
|
alias: "community"
|
||
|
};
|
||
|
|
||
|
return res;
|
||
|
});
|
||
|
}
|
||
|
function isMultitenantMode() {
|
||
|
return !!cfgTenantsBaseDir;
|
||
|
}
|
||
|
|
||
|
exports.getDefautTenant = getDefautTenant;
|
||
|
exports.getTenantByConnection = getTenantByConnection;
|
||
|
exports.getTenantByRequest = getTenantByRequest;
|
||
|
exports.getTenantPathPrefix = getTenantPathPrefix;
|
||
|
exports.getTenantSecret = getTenantSecret;
|
||
|
exports.getTenantLicense = getTenantLicense;
|
||
|
exports.setDefLicense = setDefLicense;
|
||
|
exports.isMultitenantMode = isMultitenantMode;
|