[log] Add log for getBaseUrlByConnection

This commit is contained in:
Sergey Konovalov
2023-04-14 23:22:49 +03:00
parent bf050a7115
commit 290a23a3b5
7 changed files with 43 additions and 22 deletions

View File

@ -687,16 +687,31 @@ function getBaseUrl(protocol, hostHeader, forwardedProtoHeader, forwardedHostHea
}
return url;
}
function getBaseUrlByConnection(conn) {
function getBaseUrlByConnection(ctx, conn) {
conn = conn.request;
//Header names are lower-cased. https://nodejs.org/api/http.html#messageheaders
let proto = conn.headers['cloudfront-forwarded-proto'] || conn.headers['x-forwarded-proto'];
return getBaseUrl('', conn.headers['host'], proto, conn.headers['x-forwarded-host'], conn.headers['x-forwarded-prefix']);
let cloudfrontForwardedProto = conn.headers['cloudfront-forwarded-proto'];
let forwardedProto = conn.headers['x-forwarded-proto'];
let forwardedHost = conn.headers['x-forwarded-host'];
let forwardedPrefix = conn.headers['x-forwarded-prefix'];
let host = conn.headers['host'];
let proto = cloudfrontForwardedProto || forwardedProto;
ctx.logger.debug(`getBaseUrlByConnection host=%s x-forwarded-host=%s x-forwarded-proto=%s x-forwarded-prefix=%s cloudfront-forwarded-proto=%s `,
host, forwardedHost, forwardedProto, forwardedPrefix, cloudfrontForwardedProto);
return getBaseUrl('', host, proto, forwardedHost, forwardedPrefix);
}
function getBaseUrlByRequest(req) {
function getBaseUrlByRequest(ctx, req) {
//case-insensitive match. https://expressjs.com/en/api.html#req.get
let proto = req.get('cloudfront-forwarded-proto') || req.get('x-forwarded-proto');
return getBaseUrl(req.protocol, req.get('host'), proto, req.get('x-forwarded-host'), req.get('x-forwarded-prefix'));
let cloudfrontForwardedProto = req.get('cloudfront-forwarded-proto');
let forwardedProto = req.get('x-forwarded-proto');
let forwardedHost = req.get('x-forwarded-host');
let forwardedPrefix = req.get('x-forwarded-prefix');
let host = req.get('host');
let protocol = req.protocol;
let proto = cloudfrontForwardedProto || forwardedProto;
ctx.logger.debug(`getBaseUrlByRequest protocol=%s host=%s x-forwarded-host=%s x-forwarded-proto=%s x-forwarded-prefix=%s cloudfront-forwarded-proto=%s `,
protocol, host, forwardedHost, forwardedProto, forwardedPrefix, cloudfrontForwardedProto);
return getBaseUrl(protocol, host, proto, forwardedHost, forwardedPrefix);
}
exports.getBaseUrlByConnection = getBaseUrlByConnection;
exports.getBaseUrlByRequest = getBaseUrlByRequest;

View File

@ -1351,7 +1351,7 @@ exports.install = function(server, callbackFunction) {
sendFileError(ctx, conn, 'Server shutdow');
return;
}
conn.baseUrl = utils.getBaseUrlByConnection(conn);
conn.baseUrl = utils.getBaseUrlByConnection(ctx, conn);
conn.sessionIsSendWarning = false;
conn.sessionTimeConnect = conn.sessionTimeLastAction = new Date().getTime();
@ -2257,7 +2257,7 @@ exports.install = function(server, callbackFunction) {
}
}
let format = data.openCmd && data.openCmd.format;
upsertRes = yield canvasService.commandOpenStartPromise(ctx, docId, utils.getBaseUrlByConnection(conn), true, data.documentCallbackUrl, format);
upsertRes = yield canvasService.commandOpenStartPromise(ctx, docId, utils.getBaseUrlByConnection(ctx, conn), true, data.documentCallbackUrl, format);
let isInserted = upsertRes.affectedRows == 1;
curIndexUser = isInserted ? 1 : upsertRes.insertId;
if (isInserted && undefined !== data.timezoneOffset) {
@ -2913,7 +2913,7 @@ exports.install = function(server, callbackFunction) {
yield* unSaveLock(ctx, conn, changesIndex, newChangesLastTime);
//last save
let changeInfo = getExternalChangeInfo(conn.user, newChangesLastTime);
yield resetForceSaveAfterChanges(ctx, docId, newChangesLastTime, puckerIndex, utils.getBaseUrlByConnection(conn), changeInfo);
yield resetForceSaveAfterChanges(ctx, docId, newChangesLastTime, puckerIndex, utils.getBaseUrlByConnection(ctx, conn), changeInfo);
} else {
let changesToSend = arrNewDocumentChanges;
if(changesToSend.length > cfgPubSubMaxChanges) {
@ -3843,7 +3843,7 @@ exports.commandFromServer = function (req, res) {
//If no files in the database means they have not been edited.
const selectRes = yield taskResult.select(ctx, docId);
if (selectRes.length > 0) {
result = yield* bindEvents(ctx, docId, params.callback, utils.getBaseUrlByRequest(req), undefined, params.userdata);
result = yield* bindEvents(ctx, docId, params.callback, utils.getBaseUrlByRequest(ctx, req), undefined, params.userdata);
} else {
result = commonDefines.c_oAscServerCommandErrors.DocumentIdError;
}
@ -3869,7 +3869,7 @@ exports.commandFromServer = function (req, res) {
}
break;
case 'forcesave':
let forceSaveRes = yield startForceSave(ctx, docId, commonDefines.c_oAscForceSaveTypes.Command, params.userdata, undefined, undefined, undefined, undefined, utils.getBaseUrlByRequest(req));
let forceSaveRes = yield startForceSave(ctx, docId, commonDefines.c_oAscForceSaveTypes.Command, params.userdata, undefined, undefined, undefined, undefined, utils.getBaseUrlByRequest(ctx, req));
result = forceSaveRes.code;
break;
case 'meta':

View File

@ -459,7 +459,7 @@ function* commandOpen(ctx, conn, cmd, outputData, opt_upsertRes, opt_bIsRestore)
if (opt_upsertRes) {
upsertRes = opt_upsertRes;
} else {
upsertRes = yield commandOpenStartPromise(ctx, cmd.getDocId(), utils.getBaseUrlByConnection(conn));
upsertRes = yield commandOpenStartPromise(ctx, cmd.getDocId(), utils.getBaseUrlByConnection(ctx, conn));
}
//if CLIENT_FOUND_ROWS don't specify 1 row is inserted , 2 row is updated, and 0 row is set to its current values
//http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
@ -848,7 +848,7 @@ function* commandSetPassword(ctx, conn, cmd, outputData) {
if (!conn.isEnterCorrectPassword) {
yield docsCoServer.modifyConnectionForPassword(ctx, conn, true);
}
yield docsCoServer.resetForceSaveAfterChanges(ctx, cmd.getDocId(), newChangesLastDate.getTime(), 0, utils.getBaseUrlByConnection(conn), changeInfo);
yield docsCoServer.resetForceSaveAfterChanges(ctx, cmd.getDocId(), newChangesLastDate.getTime(), 0, utils.getBaseUrlByConnection(ctx, conn), changeInfo);
} else {
ctx.logger.debug('commandSetPassword sql update error');
outputData.setStatus('err');

View File

@ -354,7 +354,7 @@ function convertRequest(req, res, isJson) {
if (status.end) {
let fileToPath = yield* getConvertPath(ctx, docId, fileTo, cmd.getOutputFormat());
status.setExtName(path.extname(fileToPath));
status.setUrl(yield* getConvertUrl(ctx, utils.getBaseUrlByRequest(req), fileToPath, cmd.getTitle()));
status.setUrl(yield* getConvertUrl(ctx, utils.getBaseUrlByRequest(ctx, req), fileToPath, cmd.getTitle()));
ctx.logger.debug('convertRequest: url = %s', status.url);
}
utils.fillResponse(req, res, status, isJson);
@ -428,7 +428,7 @@ function builderRequest(req, res) {
end = status.end;
error = status.err;
if (end) {
urls = yield storageBase.getSignedUrls(ctx, utils.getBaseUrlByRequest(req), docId + '/output',
urls = yield storageBase.getSignedUrls(ctx, utils.getBaseUrlByRequest(ctx, req), docId + '/output',
commonDefines.c_oAscUrlTypes.Temporary);
}
} else if (error === constants.NO_ERROR) {

View File

@ -76,7 +76,7 @@ exports.uploadTempFile = function(req, res) {
var task = yield* taskResult.addRandomKeyTask(ctx, docId);
var strPath = task.key + '/' + docId + '.tmp';
yield storageBase.putObject(ctx, strPath, req.body, req.body.length);
var url = yield storageBase.getSignedUrl(ctx, utils.getBaseUrlByRequest(req), strPath,
var url = yield storageBase.getSignedUrl(ctx, utils.getBaseUrlByRequest(ctx, req), strPath,
commonDefines.c_oAscUrlTypes.Temporary);
utils.fillResponse(req, res, new commonDefines.ConvertStatus(constants.NO_ERROR, url), false);
} else {
@ -178,7 +178,7 @@ exports.uploadImageFileOld = function(req, res) {
if (isError) {
res.sendStatus(400);
} else {
storageBase.getSignedUrlsByArray(ctx, utils.getBaseUrlByRequest(req), listImages, docId,
storageBase.getSignedUrlsByArray(ctx, utils.getBaseUrlByRequest(ctx, req), listImages, docId,
commonDefines.c_oAscUrlTypes.Session).then(function(urls) {
var outputData = {'type': 0, 'error': constants.NO_ERROR, 'urls': urls, 'input': req.query};
var output = '<html><head><script type="text/javascript">function load(){ parent.postMessage("';
@ -250,7 +250,7 @@ exports.uploadImageFile = function(req, res) {
var strPathRel = 'media/' + strImageName + '.' + formatStr;
var strPath = docId + '/' + strPathRel;
yield storageBase.putObject(ctx, strPath, buffer, buffer.length);
output[strPathRel] = yield storageBase.getSignedUrl(ctx, utils.getBaseUrlByRequest(req), strPath,
output[strPathRel] = yield storageBase.getSignedUrl(ctx, utils.getBaseUrlByRequest(ctx, req), strPath,
commonDefines.c_oAscUrlTypes.Session);
isError = false;
} else {

View File

@ -235,7 +235,13 @@ docsCoServer.install(server, () => {
app.get('/healthcheck', utils.checkClientIp, docsCoServer.healthCheck);
app.get('/baseurl', (req, res) => {
res.send(utils.getBaseUrlByRequest(req));
let ctx = new operationContext.Context();
try {
ctx.initFromRequest(req);
res.send(utils.getBaseUrlByRequest(ctx, req));
} catch (err) {
ctx.logger.error('baseurl error: %s', err.stack);
}
});
app.get('/robots.txt', (req, res) => {

View File

@ -106,7 +106,7 @@ function discovery(req, res) {
try {
ctx.initFromRequest(req);
ctx.logger.info('wopiDiscovery start');
let baseUrl = cfgWopiHost || utils.getBaseUrlByRequest(req);
let baseUrl = cfgWopiHost || utils.getBaseUrlByRequest(ctx, req);
let names = ['Word','Excel','PowerPoint'];
let favIconUrls = [cfgWopiFavIconUrlWord, cfgWopiFavIconUrlCell, cfgWopiFavIconUrlSlide];
let exts = [
@ -406,7 +406,7 @@ function getEditorHtml(req, res) {
fileType = fileInfo.FileExtension ? fileInfo.FileExtension.substr(1) : fileType;
lockId = crypto.randomBytes(16).toString('base64');
let commonInfo = JSON.stringify({lockId: lockId, fileInfo: fileInfo});
yield canvasService.commandOpenStartPromise(ctx, docId, utils.getBaseUrlByRequest(req), 1, commonInfo, fileType);
yield canvasService.commandOpenStartPromise(ctx, docId, utils.getBaseUrlByRequest(ctx, req), 1, commonInfo, fileType);
}
//Lock
@ -475,7 +475,7 @@ function getConverterHtml(req, res) {
let docId = yield converterService.convertAndEdit(ctx, wopiParams, ext, targetext);
if (docId) {
let baseUrl = cfgWopiHost || utils.getBaseUrlByRequest(req);
let baseUrl = cfgWopiHost || utils.getBaseUrlByRequest(ctx, req);
params.statusHandler = `${baseUrl}/hosting/wopi/convert-and-edit-handler`;
params.statusHandler += `?wopiSrc=${encodeURI(wopiSrc)}&access_token=${encodeURI(access_token)}`;
params.statusHandler += `&targetext=${encodeURI(targetext)}&docId=${encodeURI(docId)}`;