Skip to content

Commit eb0e54e

Browse files
author
Koen Deforche
committed
fix relative sessionURL resolution problems
1 parent 50ab558 commit eb0e54e

File tree

4 files changed

+66
-44
lines changed

4 files changed

+66
-44
lines changed

src/web/WebRenderer.C

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@
3434
//#define DEBUG_JS
3535
//#define DEBUG_RENDER
3636

37+
namespace {
38+
bool isAbsoluteUrl(const std::string& url) {
39+
return url.find("://") != std::string::npos;
40+
}
41+
}
42+
3743
namespace skeletons {
3844
extern const char *Boot_html1;
3945
extern const char *Plain_html1;
@@ -466,6 +472,17 @@ void WebRenderer::renderSetServerPush(std::ostream& out)
466472
}
467473
}
468474

475+
std::string WebRenderer::sessionUrl() const
476+
{
477+
std::string result = session_.applicationUrl();
478+
if (isAbsoluteUrl(result))
479+
return result;
480+
else {
481+
// Wt.js will prepand the correct deployment path
482+
return session_.appendSessionQuery(".").substr(1);
483+
}
484+
}
485+
469486
void WebRenderer::serveJavaScriptUpdate(WebResponse& response)
470487
{
471488
setCaching(response, false);
@@ -474,8 +491,7 @@ void WebRenderer::serveJavaScriptUpdate(WebResponse& response)
474491
if (session_.sessionIdChanged_) {
475492
collectedJS1_ << session_.app()->javaScriptClass()
476493
<< "._p_.setSessionUrl("
477-
<< WWebWidget::jsStringLiteral
478-
(session_.bootstrapUrl(response, WebSession::ClearInternalPath))
494+
<< WWebWidget::jsStringLiteral(sessionUrl())
479495
<< ");";
480496
session_.sessionIdChanged_ = false;
481497
}
@@ -710,9 +726,7 @@ void WebRenderer::serveMainscript(WebResponse& response)
710726
script.setCondition("WEB_SOCKETS", conf.webSockets());
711727
script.setVar("INNER_HTML", innerHtml);
712728
script.setVar("ACK_UPDATE_ID", expectedAckId_);
713-
script.setVar("RELATIVE_URL", WWebWidget::jsStringLiteral
714-
(session_.bootstrapUrl(response,
715-
WebSession::ClearInternalPath)));
729+
script.setVar("SESSION_URL", WWebWidget::jsStringLiteral(sessionUrl()));
716730
script.setVar("DEPLOY_PATH", WWebWidget::jsStringLiteral
717731
(session_.deploymentPath()));
718732
script.setVar("PATH_INFO", WWebWidget::jsStringLiteral

src/web/WebRenderer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class WT_API WebRenderer : public Wt::SlotLearnerInterface
133133

134134
std::string headDeclarations() const;
135135
std::string bodyClassRtl() const;
136+
std::string sessionUrl() const;
136137

137138
typedef std::set<WWidget *> UpdateMap;
138139
UpdateMap updateMap_;

src/web/skeleton/Wt.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,7 +2132,7 @@ function encodePendingEvents() {
21322132
return { feedback: feedback, result: result };
21332133
}
21342134

2135-
var sessionUrl = _$_RELATIVE_URL_$_,
2135+
var sessionUrl,
21362136
quited = false,
21372137
norestart = false,
21382138
loaded = false,
@@ -2323,13 +2323,20 @@ _$_$endif_$_();
23232323
}
23242324
};
23252325

2326-
var comm = WT.initAjaxComm(sessionUrl, handleResponse);
2327-
23282326
function setSessionUrl(url) {
2329-
sessionUrl = url;
2330-
comm.setUrl(url);
2327+
if (url.indexOf("://") != -1 || url[0] == '/')
2328+
sessionUrl = url;
2329+
else
2330+
sessionUrl = WT.deployUrl + url;
2331+
2332+
if (comm)
2333+
comm.setUrl(url);
23312334
}
23322335

2336+
setSessionUrl(_$_SESSION_URL_$_);
2337+
2338+
var comm = WT.initAjaxComm(sessionUrl, handleResponse);
2339+
23332340
function doPollTimeout() {
23342341
responsePending.abort();
23352342
responsePending = null;

0 commit comments

Comments
 (0)