diff --git a/Common/sources/utils.js b/Common/sources/utils.js index 09aacdd1..2568e7fb 100644 --- a/Common/sources/utils.js +++ b/Common/sources/utils.js @@ -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; diff --git a/DocService/sources/DocsCoServer.js b/DocService/sources/DocsCoServer.js index f0ccb8e6..33ad13c6 100644 --- a/DocService/sources/DocsCoServer.js +++ b/DocService/sources/DocsCoServer.js @@ -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': diff --git a/DocService/sources/canvasservice.js b/DocService/sources/canvasservice.js index 0e643bc9..5095d037 100644 --- a/DocService/sources/canvasservice.js +++ b/DocService/sources/canvasservice.js @@ -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'); diff --git a/DocService/sources/converterservice.js b/DocService/sources/converterservice.js index a0645878..d84a39dd 100644 --- a/DocService/sources/converterservice.js +++ b/DocService/sources/converterservice.js @@ -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) { diff --git a/DocService/sources/fileuploaderservice.js b/DocService/sources/fileuploaderservice.js index 6cc610fb..951b3d4e 100644 --- a/DocService/sources/fileuploaderservice.js +++ b/DocService/sources/fileuploaderservice.js @@ -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 = '