Merge branch 'develop' into bugfix/login

This commit is contained in:
Viktor Fomin 2022-11-16 19:58:03 +05:00
commit 9cca8532c3
22 changed files with 2213 additions and 130 deletions

View File

@ -29,7 +29,7 @@ namespace ASC.Api.Core.Extensions;
public static class ISetupBuilderExtension
{
public static ISetupBuilder LoadConfiguration(this ISetupBuilder loggingBuilder, IConfiguration configuration, IHostEnvironment hostEnvironment)
{
{
var conf = new XmlLoggingConfiguration(CrossPlatform.PathCombine(configuration["pathToConf"], "nlog.config"));
var settings = new ConfigurationExtension(configuration).GetSetting<NLogSettings>("log");
@ -56,10 +56,18 @@ public static class ISetupBuilderExtension
{
awsTarget.LogGroup = awsTarget.LogGroup.Replace("${var:name}", settings.Name);
}
var awsAccessKeyId = string.IsNullOrEmpty(settings.AWSAccessKeyId) ? configuration["aws:cloudWatch:accessKeyId"] : settings.AWSAccessKeyId;
var awsSecretAccessKey = string.IsNullOrEmpty(settings.AWSSecretAccessKey) ? configuration["aws:cloudWatch:secretAccessKey"] : settings.AWSSecretAccessKey;
if (!string.IsNullOrEmpty(settings.AWSSecretAccessKey))
{
awsTarget.Credentials = new Amazon.Runtime.BasicAWSCredentials(settings.AWSAccessKeyId, settings.AWSSecretAccessKey);
if (!string.IsNullOrEmpty(awsAccessKeyId))
{
awsTarget.LogGroup = String.IsNullOrEmpty(configuration["aws:cloudWatch:logGroupName"]) ? awsTarget.LogGroup : configuration["aws:cloudWatch:logGroupName"];
awsTarget.Region = String.IsNullOrEmpty(configuration["aws:cloudWatch:region"]) ? awsTarget.Region : configuration["aws:cloudWatch:region"];
awsTarget.Credentials = new Amazon.Runtime.BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
}
}

View File

@ -22,7 +22,7 @@ if(logpath != null)
const fileName = logpath ? path.join(logpath, "socket-io.%DATE%.log") : path.join(__dirname, "..", "..", "..", "Logs", "socket-io.%DATE%.log");
const dirName = path.dirname(fileName);
const aws = config.get("aws");
const aws = config.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
@ -65,6 +65,7 @@ var options = {
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName: logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {
@ -76,8 +77,6 @@ var options = {
}
};
//const fileTransport = new winston.transports.DailyRotateFile(options.file);
let transports = [
new winston.transports.Console(options.console),
new winston.transports.DailyRotateFile(options.file)
@ -88,8 +87,6 @@ if (aws != null && aws.accessKeyId !== '')
transports.push(new WinstonCloudWatch(options.cloudWatch));
}
//winston.exceptions.handle(fileTransport);
const customFormat = winston.format(info => {
const now = new Date();
@ -105,7 +102,6 @@ const customFormat = winston.format(info => {
})();
module.exports = new winston.createLogger({
//defaultMeta: { component: "socket.io-server" },
format: winston.format.combine(
customFormat,
winston.format.json()

View File

@ -3,12 +3,5 @@
"port": 9899,
"appsettings": "../../../config",
"environment": "Development"
},
"aws":{
"accessKeyId": "",
"secretAccessKey": "",
"region": "",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
}
}

View File

@ -46,4 +46,8 @@ function getAndSaveAppsettings(){
redis.db = redis.Database;
nconf.set("Redis", redis);
}
}

View File

@ -52,7 +52,7 @@ if(logpath != null)
fs.existsSync(logpath) || fs.mkdirSync(logpath);
}
const aws = config["aws"];
const aws = config["aws"].cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
@ -88,6 +88,7 @@ if (aws != null && aws.accessKeyId !== '')
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName: logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {

View File

@ -63,12 +63,5 @@
"image-path": "images",
"rebranding": "rebranding",
"https":"certs"
},
"aws":{
"accessKeyId": "",
"secretAccessKey": "",
"region": "",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
}
}
}

View File

@ -22,7 +22,7 @@ if(logpath != null)
const fileName = logpath ? path.join(logpath, "web.shorturl.%DATE%.log") : path.join(__dirname, "..", "..", "..", "Logs", "web.shorturl.%DATE%.log");
const dirName = path.dirname(fileName);
const aws = config.get("aws");
const aws = config.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
@ -65,6 +65,7 @@ var options = {
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName: logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {

View File

@ -3,12 +3,5 @@
"port": 9999,
"appsettings": "../../../config",
"environment": "Development"
},
"aws":{
"accessKeyId": "",
"secretAccessKey": "",
"region": "",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
}
}

View File

@ -21,6 +21,7 @@ const winston = require("winston"),
date = require('date-and-time'),
os = require("os");
const { format } = require("winston");
require("winston-daily-rotate-file");
@ -45,7 +46,27 @@ const fileTransport = new (winston.transports.DailyRotateFile)({
maxFiles: "30d"
});
const aws = config["aws"];
const nconf = require("nconf");
nconf.argv()
.env();
var appsettings = config.appsettings;
if(!path.isAbsolute(appsettings)){
appsettings = path.join(__dirname, appsettings);
}
var fileWithEnv = path.join(appsettings, 'appsettings.' + config.environment + '.json');
if(fs.existsSync(fileWithEnv)){
nconf.file("appsettings", fileWithEnv);
}
else{
nconf.file("appsettings", path.join(appsettings, 'appsettings.json'));
}
const aws = nconf.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
@ -75,6 +96,7 @@ if (aws != null && aws.accessKeyId !== '')
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName: logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {

View File

@ -18,6 +18,7 @@
"form-data": "^3.0.0",
"get-byte": "0.0.0",
"help": "^3.0.2",
"nconf": "^0.10.0",
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0",
"request": "^2.88.0",

View File

@ -19,7 +19,9 @@
module.exports = {
// Port listener WebDav Server
port: 1900,
port: 1900,
appsettings: "../../../config",
environment: "Development",
// Path to pfx key
pfxKeyPath: null,
// Pass phrase for pfx key
@ -53,14 +55,6 @@ module.exports = {
// Path to read the file
fileHandlerPath: "/Products/Files/HttpHandlers/filehandler.ashx?action=stream&fileid={0}",
aws: {
"accessKeyId": "",
"secretAccessKey": "",
"region": "",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
},
method: {
// Get root directory in "Root"
pathRootDirectory: "@root",

View File

@ -872,6 +872,13 @@ __metadata:
languageName: node
linkType: hard
"ansi-regex@npm:^2.0.0":
version: 2.1.1
resolution: "ansi-regex@npm:2.1.1"
checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1
languageName: node
linkType: hard
"ansi-styles@npm:^3.2.1":
version: 3.2.1
resolution: "ansi-styles@npm:3.2.1"
@ -922,6 +929,13 @@ __metadata:
languageName: node
linkType: hard
"async@npm:^1.4.0":
version: 1.5.2
resolution: "async@npm:1.5.2"
checksum: fe5d6214d8f15bd51eee5ae8ec5079b228b86d2d595f47b16369dec2e11b3ff75a567bb5f70d12d79006665fbbb7ee0a7ec0e388524eefd454ecbe651c124ebd
languageName: node
linkType: hard
"async@npm:^3.1.0, async@npm:^3.2.3":
version: 3.2.4
resolution: "async@npm:3.2.4"
@ -1045,6 +1059,13 @@ __metadata:
languageName: node
linkType: hard
"camelcase@npm:^2.0.1":
version: 2.1.1
resolution: "camelcase@npm:2.1.1"
checksum: 20a3ef08f348de832631d605362ffe447d883ada89617144a82649363ed5860923b021f8e09681624ef774afb93ff3597cfbcf8aaf0574f65af7648f1aea5e50
languageName: node
linkType: hard
"caseless@npm:~0.12.0":
version: 0.12.0
resolution: "caseless@npm:0.12.0"
@ -1080,6 +1101,24 @@ __metadata:
languageName: node
linkType: hard
"cliui@npm:^3.0.3":
version: 3.2.0
resolution: "cliui@npm:3.2.0"
dependencies:
string-width: ^1.0.1
strip-ansi: ^3.0.1
wrap-ansi: ^2.0.0
checksum: c68d1dbc3e347bfe79ed19cc7f48007d5edd6cd8438342e32073e0b4e311e3c44e1f4f19221462bc6590de56c2df520e427533a9dde95dee25710bec322746ad
languageName: node
linkType: hard
"code-point-at@npm:^1.0.0":
version: 1.1.0
resolution: "code-point-at@npm:1.1.0"
checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681
languageName: node
linkType: hard
"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3":
version: 1.9.3
resolution: "color-convert@npm:1.9.3"
@ -1259,6 +1298,13 @@ __metadata:
languageName: node
linkType: hard
"decamelize@npm:^1.1.1":
version: 1.2.0
resolution: "decamelize@npm:1.2.0"
checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa
languageName: node
linkType: hard
"deep-is@npm:~0.1.3":
version: 0.1.4
resolution: "deep-is@npm:0.1.4"
@ -1842,6 +1888,20 @@ __metadata:
languageName: node
linkType: hard
"ini@npm:^1.3.0":
version: 1.3.8
resolution: "ini@npm:1.3.8"
checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3
languageName: node
linkType: hard
"invert-kv@npm:^1.0.0":
version: 1.0.0
resolution: "invert-kv@npm:1.0.0"
checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e
languageName: node
linkType: hard
"ip@npm:^1.1.5":
version: 1.1.8
resolution: "ip@npm:1.1.8"
@ -1897,6 +1957,15 @@ __metadata:
languageName: node
linkType: hard
"is-fullwidth-code-point@npm:^1.0.0":
version: 1.0.0
resolution: "is-fullwidth-code-point@npm:1.0.0"
dependencies:
number-is-nan: ^1.0.0
checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57
languageName: node
linkType: hard
"is-number@npm:^7.0.0":
version: 7.0.0
resolution: "is-number@npm:7.0.0"
@ -2016,6 +2085,15 @@ __metadata:
languageName: node
linkType: hard
"lcid@npm:^1.0.0":
version: 1.0.0
resolution: "lcid@npm:1.0.0"
dependencies:
invert-kv: ^1.0.0
checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d
languageName: node
linkType: hard
"levn@npm:~0.3.0":
version: 0.3.0
resolution: "levn@npm:0.3.0"
@ -2176,6 +2254,18 @@ __metadata:
languageName: node
linkType: hard
"nconf@npm:^0.10.0":
version: 0.10.0
resolution: "nconf@npm:0.10.0"
dependencies:
async: ^1.4.0
ini: ^1.3.0
secure-keys: ^1.0.0
yargs: ^3.19.0
checksum: 14052553bcde03dbdf11bc3ee95b8cdb7fe776ada550763df75c9683335a937545f62e96972ad2fd4bcc85f928d9880fc74b8c5f93eaddef58d6e0f46c0c836f
languageName: node
linkType: hard
"negotiator@npm:0.6.3":
version: 0.6.3
resolution: "negotiator@npm:0.6.3"
@ -2197,6 +2287,13 @@ __metadata:
languageName: node
linkType: hard
"number-is-nan@npm:^1.0.0":
version: 1.0.1
resolution: "number-is-nan@npm:1.0.1"
checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb
languageName: node
linkType: hard
"oauth-sign@npm:~0.9.0":
version: 0.9.0
resolution: "oauth-sign@npm:0.9.0"
@ -2269,6 +2366,15 @@ __metadata:
languageName: node
linkType: hard
"os-locale@npm:^1.4.0":
version: 1.4.0
resolution: "os-locale@npm:1.4.0"
dependencies:
lcid: ^1.0.0
checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb
languageName: node
linkType: hard
"os-tmpdir@npm:~1.0.2":
version: 1.0.2
resolution: "os-tmpdir@npm:1.0.2"
@ -2555,6 +2661,13 @@ __metadata:
languageName: node
linkType: hard
"secure-keys@npm:^1.0.0":
version: 1.0.0
resolution: "secure-keys@npm:1.0.0"
checksum: 3dd4e64e6717fe6e2dc4c70e172982fcbad87b853e96566ab1cfaec540587f737bac106853ae469cb32d4a6413cfe80a28176cfe7dfcf7ddd35c9f92e58dffed
languageName: node
linkType: hard
"semver@npm:^5.5.0, semver@npm:^5.6.0":
version: 5.7.1
resolution: "semver@npm:5.7.1"
@ -2717,6 +2830,17 @@ __metadata:
languageName: node
linkType: hard
"string-width@npm:^1.0.1":
version: 1.0.2
resolution: "string-width@npm:1.0.2"
dependencies:
code-point-at: ^1.0.0
is-fullwidth-code-point: ^1.0.0
strip-ansi: ^3.0.0
checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e
languageName: node
linkType: hard
"string_decoder@npm:^1.1.1":
version: 1.3.0
resolution: "string_decoder@npm:1.3.0"
@ -2733,6 +2857,15 @@ __metadata:
languageName: node
linkType: hard
"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1":
version: 3.0.1
resolution: "strip-ansi@npm:3.0.1"
dependencies:
ansi-regex: ^2.0.0
checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465
languageName: node
linkType: hard
"strnum@npm:^1.0.5":
version: 1.0.5
resolution: "strnum@npm:1.0.5"
@ -2972,6 +3105,7 @@ __metadata:
form-data: ^3.0.0
get-byte: 0.0.0
help: ^3.0.2
nconf: ^0.10.0
patch-package: ^6.4.7
postinstall-postinstall: ^2.1.0
request: ^2.88.0
@ -2994,6 +3128,15 @@ __metadata:
languageName: node
linkType: hard
"window-size@npm:^0.1.4":
version: 0.1.4
resolution: "window-size@npm:0.1.4"
bin:
window-size: cli.js
checksum: 409accca0b1373c69897400e3cc6a56a2acc8a6ba9009f0cd8e4adda4ebf308e50425d3bd375c0c08efb803c8f0b09d84d7266faa05422b3fadfe6ee422d0aef
languageName: node
linkType: hard
"winston-cloudwatch@npm:^6.1.1":
version: 6.1.1
resolution: "winston-cloudwatch@npm:6.1.1"
@ -3064,6 +3207,16 @@ __metadata:
languageName: node
linkType: hard
"wrap-ansi@npm:^2.0.0":
version: 2.1.0
resolution: "wrap-ansi@npm:2.1.0"
dependencies:
string-width: ^1.0.1
strip-ansi: ^3.0.1
checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3
languageName: node
linkType: hard
"wrappy@npm:1":
version: 1.0.2
resolution: "wrappy@npm:1.0.2"
@ -3098,9 +3251,31 @@ __metadata:
languageName: node
linkType: hard
"y18n@npm:^3.2.0":
version: 3.2.2
resolution: "y18n@npm:3.2.2"
checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a
languageName: node
linkType: hard
"yallist@npm:^3.0.2":
version: 3.1.1
resolution: "yallist@npm:3.1.1"
checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d
languageName: node
linkType: hard
"yargs@npm:^3.19.0":
version: 3.32.0
resolution: "yargs@npm:3.32.0"
dependencies:
camelcase: ^2.0.1
cliui: ^3.0.3
decamelize: ^1.1.1
os-locale: ^1.4.0
string-width: ^1.0.1
window-size: ^0.1.4
y18n: ^3.2.0
checksum: 3e0f7fc1bc2052bcaaa7354cbd33d05a86fc0f236432d107ecd088989fbd175174c562d17e762727acbf25d04e8520d43625f7581b2a6ce55ce10034e80675fc
languageName: node
linkType: hard

View File

@ -3,12 +3,5 @@
"port": 5014,
"appsettings": "../../../../config",
"environment": "Development"
},
"aws":{
"accessKeyId": "",
"secretAccessKey": "",
"region": "",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
}
}
}

View File

@ -26,7 +26,7 @@ if (!fs.existsSync(dirName)) {
fs.mkdirSync(dirName);
}
const aws = config.default.get("aws");
const aws = config.default.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
@ -65,6 +65,7 @@ const options = {
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName:logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {

View File

@ -240,5 +240,14 @@
"plugins": {
"enabled": "false",
"allow": ["upload", "delete"]
}
},
"aws": {
"cloudWatch": {
"accessKeyId": "",
"secretAccessKey": "",
"region": "us-east-1",
"logGroupName": "/asc/docspace/cluster/cluster_name/general",
"logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}"
}
}
}

View File

@ -898,7 +898,10 @@ class FilesStore {
this.setRoomsFilter(filterData);
this.setFolders(data.folders);
runInAction(() => {
this.setFolders(data.folders);
this.setFiles([]);
});
if (clearFilter) {
if (clearSelection) {

View File

@ -64,16 +64,20 @@
"title": "ONLYOFFICE",
"socketPath": "/doceditor/ws",
"dependencies": {
"@aws-sdk/client-cloudwatch-logs": "^3.199.0",
"@onlyoffice/document-editor-react": "1.0.1",
"aws-crt": "^1.14.7",
"bufferutil": "^4.0.6",
"compression": "^1.7.4",
"date-and-time": "^2.4.1",
"express": "^4.18.1",
"i18next-express-middleware": "^2.0.0",
"i18next-fs-backend": "^1.1.4",
"morgan": "^1.10.0",
"nconf": "^0.12.0",
"utf-8-validate": "^5.0.9",
"winston": "^3.8.1",
"winston-daily-rotate-file": "^4.7.1"
"winston": "^3.8.2",
"winston-cloudwatch": "^6.1.1",
"winston-daily-rotate-file": "^4.5.5"
}
}

View File

@ -1,4 +1,8 @@
import winston from "winston";
import WinstonCloudWatch from "winston-cloudwatch";
import date from "date-and-time";
import os from "os";
import { randomUUID } from "crypto";
import "winston-daily-rotate-file";
import path from "path";
import fs from "fs";
@ -17,6 +21,15 @@ const fileName = logPath
: path.join(__dirname, "..", "..", "..", "Logs", "editor.%DATE%.log");
const dirName = path.dirname(fileName);
const aws = config.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
const awsRegion = aws.region;
const logGroupName = aws.logGroupName;
const logStreamName = aws.logStreamName;
if (!fs.existsSync(dirName)) {
fs.mkdirSync(dirName);
}
@ -38,20 +51,61 @@ const options = {
json: false,
colorize: true,
},
cloudWatch: {
name: 'aws',
level: "debug",
logStreamName: () => {
const hostname = os.hostname();
const now = new Date();
const guid = randomUUID();
const dateAsString = date.format(now, 'YYYY/MM/DDTHH.mm.ss');
return logStreamName.replace("${hostname}", hostname)
.replace("${applicationContext}", "Editor")
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName: logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {
credentials: {
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
}
}
}
};
const transports = [
let transports = [
new winston.transports.Console(options.console),
new winston.transports.DailyRotateFile(options.file),
new winston.transports.DailyRotateFile(options.file)
];
if (aws != null && aws.accessKeyId !== '')
{
transports.push(new WinstonCloudWatch(options.cloudWatch));
}
const customFormat = winston.format(info => {
const now = new Date();
info.date = date.format(now, 'YYYY-MM-DD HH:mm:ss');
info.applicationContext = "Editor";
info.level = info.level.toUpperCase();
const hostname = os.hostname();
info["instance-id"] = hostname;
return info;
})();
export default new winston.createLogger({
format: winston.format.combine(
winston.format.timestamp({
format: "YYYY-MM-DD HH:mm:ss",
}),
winston.format.json()
customFormat,
winston.format.json()
),
transports: transports,
exitOnError: false,
});
});

View File

@ -105,10 +105,13 @@
"title": "ONLYOFFICE",
"socketPath": "/login/ws",
"dependencies": {
"@aws-sdk/client-cloudwatch-logs": "^3.199.0",
"@types/ws": "^8.5.3",
"aws-crt": "^1.14.7",
"bufferutil": "^4.0.6",
"compression": "^1.7.4",
"cookie-parser": "^1.4.6",
"date-and-time": "^2.4.1",
"express": "^4.18.1",
"i18next-express-middleware": "^2.0.0",
"i18next-fs-backend": "^1.1.4",
@ -116,7 +119,8 @@
"morgan": "^1.10.0",
"nconf": "^0.12.0",
"utf-8-validate": "^5.0.9",
"winston": "^3.8.1",
"winston-daily-rotate-file": "^4.7.1"
"winston": "^3.8.2",
"winston-cloudwatch": "^6.1.1",
"winston-daily-rotate-file": "^4.5.5"
}
}

View File

@ -1,8 +1,12 @@
import { createLogger, transports, format } from "winston";
import winston from "winston";
import WinstonCloudWatch from "winston-cloudwatch";
import date from "date-and-time";
import os from "os";
import "winston-daily-rotate-file";
import path from "path";
import fs from "fs";
import config from "../config";
import { randomUUID } from "crypto";
let logPath: string = config.get("logPath");
@ -21,6 +25,14 @@ if (!fs.existsSync(dirName)) {
fs.mkdirSync(dirName);
}
const aws = config.get("aws").cloudWatch;
const accessKeyId = aws.accessKeyId;
const secretAccessKey = aws.secretAccessKey;
const awsRegion = aws.region;
const logGroupName = aws.logGroupName;
const logStreamName = aws.logStreamName;
const options = {
file: {
filename: fileName,
@ -38,19 +50,62 @@ const options = {
json: false,
colorize: true,
},
cloudWatch: {
name: 'aws',
level: "debug",
logStreamName: () => {
const hostname = os.hostname();
const now = new Date();
const guid = randomUUID();
const dateAsString = date.format(now, 'YYYY/MM/DDTHH.mm.ss');
return logStreamName.replace("${hostname}", hostname)
.replace("${applicationContext}", "Login")
.replace("${guid}", guid)
.replace("${date}", dateAsString);
},
logGroupName:logGroupName,
awsRegion: awsRegion,
jsonMessage: true,
awsOptions: {
credentials: {
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
}
}
}
};
const logger = createLogger({
format: format.combine(
format.timestamp({
format: "YYYY-MM-DD HH:mm:ss",
}),
format.json()
const transports: winston.transport[] = [
new winston.transports.Console(options.console),
new winston.transports.DailyRotateFile(options.file)
];
if (aws != null && aws.accessKeyId !== '')
{
transports.push(new WinstonCloudWatch(options.cloudWatch));
}
const customFormat = winston.format(info => {
const now = new Date();
info.date = date.format(now, 'YYYY-MM-DD HH:mm:ss');
info.applicationContext = "Login";
info.level = info.level.toUpperCase();
const hostname = os.hostname();
info["instance-id"] = hostname;
return info;
})();
const logger = winston.createLogger({
format: winston.format.combine(
customFormat,
winston.format.json()
),
transports: [
new transports.Console(options.console),
new transports.DailyRotateFile(options.file),
],
transports: transports,
exitOnError: false,
});

View File

@ -408,11 +408,17 @@ public class PortalController : ControllerBase
}
}
[AllowNotPayment]
[HttpPost("suspend")]
public void SendSuspendInstructions()
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
if (_securityContext.CurrentAccount.ID != Tenant.OwnerId)
{
throw new Exception(Resource.ErrorAccessDenied);
}
var owner = _userManager.GetUsers(Tenant.OwnerId);
var suspendUrl = _commonLinkUtility.GetConfirmationEmailUrl(owner.Email, ConfirmType.PortalSuspend);
var continueUrl = _commonLinkUtility.GetConfirmationEmailUrl(owner.Email, ConfirmType.PortalContinue);
@ -422,10 +428,17 @@ public class PortalController : ControllerBase
_messageService.Send(MessageAction.OwnerSentPortalDeactivationInstructions, _messageTarget.Create(owner.Id), owner.DisplayUserName(false, _displayUserSettingsHelper));
}
[AllowNotPayment]
[HttpPost("delete")]
public void SendDeleteInstructions()
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
if (_securityContext.CurrentAccount.ID != Tenant.OwnerId)
{
throw new Exception(Resource.ErrorAccessDenied);
}
var owner = _userManager.GetUsers(Tenant.OwnerId);
var showAutoRenewText = !_coreBaseSettings.Standalone &&
@ -455,10 +468,16 @@ public class PortalController : ControllerBase
_messageService.Send(MessageAction.PortalDeactivated);
}
[AllowNotPayment]
[HttpDelete("delete")]
[Authorize(AuthenticationSchemes = "confirm", Roles = "PortalRemove")]
public async Task<object> DeletePortal()
{
if (_securityContext.CurrentAccount.ID != Tenant.OwnerId)
{
throw new Exception(Resource.ErrorAccessDenied);
}
_tenantManager.RemoveTenant(Tenant.Id);
if (!string.IsNullOrEmpty(_apiSystemHelper.ApiCacheUrl))

1866
yarn.lock

File diff suppressed because it is too large Load Diff