Skip to content

Commit

Permalink
HPCC-28452 ECL Watch fix "Session is locked" messages
Browse files Browse the repository at this point in the history
Remove any client code that would write a "Status" cookie when either
the session timeout monitor fires, or the user manually clicks the
"Lock" link.

Also, though not strictly related, this PR includes a fix for one
of the rewrite rules for the lightweight web server config
(used for local dev of ecl watch).

Signed-off-by: Jeremy Clements <[email protected]>
  • Loading branch information
jeclrsg committed Apr 4, 2024
1 parent a8247d7 commit 9b75b64
Show file tree
Hide file tree
Showing 13 changed files with 13 additions and 28 deletions.
2 changes: 1 addition & 1 deletion esp/src/Login.html
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
var d = new Date();
d.setTime(d.getTime() + (exMins * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
document.cookie = cname + "=" + cvalue + ";" + expires + ";";
}

if (document.cookie.indexOf("ESPAuthenticationMSG") > -1) {
Expand Down
4 changes: 2 additions & 2 deletions esp/src/eclwatch/HPCCPlatformWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ define([
context.checkIfAdmin(context.userName);
context.refreshUserName();
if (!cookie("PasswordExpiredCheck")) {
cookie("PasswordExpiredCheck", "true", { expires: 1 });
cookie("PasswordExpiredCheck", "true", { expires: 1, path: "/" });
if (lang.exists("MyAccountResponse.passwordDaysRemaining", response)) {
switch (response.MyAccountResponse.passwordDaysRemaining) {
case null:
Expand Down Expand Up @@ -462,7 +462,7 @@ define([
},

_ondebugLanguageFiles: function () {
/* DEBUG_ONLY
/* DEBUG_ONLY
var context = this;
require(["src/nls/hpcc"], function (lang) {
var languageID = [];
Expand Down
10 changes: 2 additions & 8 deletions esp/src/eclwatch/LockDialogWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ define([
show: function (event) {
var context = this;
if (!dojoConfig.username) {
cookie("Status", "Unlocked");
context.storage.setItem("Status", "Unlocked");
topic.publish("hpcc/session_management_status", {
status: "Unlocked"
Expand Down Expand Up @@ -96,7 +95,6 @@ define([
var context = this;

if (this.unlockForm.validate()) {
cookie("Status", "login_attempt");
WsAccount.Unlock({
request: {
username: this.unlockUserName.get("value"),
Expand All @@ -113,7 +111,6 @@ define([
topic.publish("hpcc/session_management_status", {
status: "Unlocked"
});
cookie("Status", "Unlocked");
context.storage.setItem("Status", "Unlocked");
if (context.idleFired) {
dojo.publish("hpcc/brToaster", {
Expand All @@ -127,7 +124,6 @@ define([
}
} else {
context.unlockStatus.innerHTML = response.UnlockResponse.Message;
cookie("Status", "Locked");
}
});
}
Expand All @@ -150,10 +146,9 @@ define([
topic.publish("hpcc/session_management_status", {
status: "Locked"
});
cookie("Status", "Locked");
context.storage.setItem("Status", "Locked");
} else if (cookie("Status") === "Unlocked") {
xhr("esp/lock", {
} else {
xhr("/esp/lock", {
method: "post"
}).then(function (response) {
if (response) {
Expand All @@ -163,7 +158,6 @@ define([
topic.publish("hpcc/session_management_status", {
status: "Locked"
});
cookie("Status", "Locked");
context.storage.setItem("Status", "Locked");
}
});
Expand Down
2 changes: 1 addition & 1 deletion esp/src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
}

function checkCookie() {
document.cookie.indexOf("ESPAuthenticated=true") > -1 ? window.location.href : window.location.href = location.origin + "#/login";
document.cookie.indexOf("ESPAuthenticated=true") > -1 ? window.location.href : window.location.href = location.origin + "/esp/files/Login.html";
}

function sendAuthRequest() {
Expand Down
2 changes: 1 addition & 1 deletion esp/src/lws.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ let rewrite = [
{ from: "/esp/files/esp/logout", to: protocol + "://" + ip + ":" + port + "/esp/logout" },
{ from: "/esp/files/esp/reset_session_timeout", to: protocol + "://" + ip + ":" + port + "/esp/reset_session_timeout" },
{ from: "/esp/files/node_modules/@hpcc-js/(.*)/dist/index.min.js", to: "/node_modules/@hpcc-js/$1/dist/index.js" },
{ from: "/esp/files/(.*)", to: "/build/$1" },
{ from: "/esp/files/dist/(.*)", to: "/build/dist/$1" },
{ from: "/esp/files/img/(.*)", to: "build/esp/files/img/$1" },
{ from: "/esp/files/(.*/*.css)", to: "/build/esp/files/$1" },
{ from: "/esp/files/(.*)", to: "/$1" },
{ from: "/main", to: protocol + "://" + ip + ":" + port + "/main" },
{ from: "/FileSpray/(.*)", to: protocol + "://" + ip + ":" + port + "/FileSpray/$1" },
{ from: "/WsCloud/(.*)", to: protocol + "://" + ip + ":" + port + "/WsCloud/$1" },
Expand Down
2 changes: 1 addition & 1 deletion esp/src/src-react/components/Frame.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export const Frame: React.FunctionComponent<FrameProps> = () => {
fireIdle();
} else if (publishedMessage.status === "Idle") {
window.localStorage.setItem("pageOnLock", window.location.hash.substring(1));
setUserSession({ ...userSession, Status: "Locked" });
setUserSession({ ...userSession });
window.location.reload();
}
});
Expand Down
2 changes: 1 addition & 1 deletion esp/src/src-react/components/Title.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export const DevTitle: React.FunctionComponent<DevTitleProps> = ({
fetch("esp/lock", {
method: "post"
}).then(() => {
setUserSession({ ...userSession, Status: "Locked" });
setUserSession({ ...userSession });
replaceUrl("/login", null, true);
});
}
Expand Down
1 change: 0 additions & 1 deletion esp/src/src-react/components/forms/Login.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ export const Login: React.FunctionComponent<LoginProps> = ({
setErrorMessage(cookies.ESPAuthenticationMSG);
setShowError(true);
} else {
cookies["Status"] = "Unlocked";
cookies["ESPAuthenticated"] = "true";
createUserSession(cookies).then(() => {
setErrorMessage("");
Expand Down
4 changes: 1 addition & 3 deletions esp/src/src-react/hooks/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ const defaults = {
ESPSessionTimeout: 7200,
ESPAuthenticated: false,
ECLWatchUser: false,
Status: "Unlocked",
ESPSessionState: false
};

Expand All @@ -17,7 +16,6 @@ export interface UserSession {
ESPSessionTimeout: number;
ESPAuthenticated: boolean;
ECLWatchUser: boolean;
Status: string;
ESPAuthenticationMSG?: string;
ESPSessionState: boolean;
}
Expand Down Expand Up @@ -47,6 +45,7 @@ export function useUserSession(): {
case "Mixed":
case "PerSessionOnly":
store.set("ESPSessionState", "true");
store.set("ESPAuthenticated", "true");
break;
case "PerRequestOnly":
case "UserNameOnly":
Expand All @@ -56,7 +55,6 @@ export function useUserSession(): {
default:
store.set("ESPSessionState", "false");
}
store.set("Status", "Unlocked");
store.set("ECLWatchUser", "true");
}).catch(err => console.log("Unable to create user session."));
}, [store]);
Expand Down
2 changes: 1 addition & 1 deletion esp/src/src-react/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ store.getEx(ModernMode, { defaultValue: String(containerized) }).then(async mode
const authType = await authTypeResp?.text() ?? "None";
const userStore = cookieKeyValStore();
const userSession = await userStore.getAll();
if (authType.indexOf("None") < 0 && (userSession["ESPSessionState"] === "false" || userSession["ECLWatchUser"] === "false" || (!userSession["Status"] || userSession["Status"] === "Locked"))) {
if (authType.indexOf("None") < 0 && (userSession["ESPSessionState"] === "false" || userSession["ECLWatchUser"] === "false")) {
if (window.location.hash.indexOf("login") < 0) {
replaceUrl("/login");
}
Expand Down
1 change: 0 additions & 1 deletion esp/src/src/ESPRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ class RequestHelper {
status: "DoIdle"
});
}
cookie("Status", "Locked");
ESPUtil.LocalStorage.removeItem("Status");
}
}
Expand Down
7 changes: 1 addition & 6 deletions esp/src/src/Session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import * as xhr from "dojo/request/xhr";
import * as topic from "dojo/topic";
import { format as d3Format } from "@hpcc-js/common";
import { SMCService } from "@hpcc-js/comms";
import { scopedLogger } from "@hpcc-js/util";
import { cookieKeyValStore } from "src/KeyValStore";
import { singletonDebounce } from "../src-react/util/throttle";
import * as ESPUtil from "./ESPUtil";
import { scopedLogger } from "@hpcc-js/util";

const logger = scopedLogger("src/Session.ts");

Expand Down Expand Up @@ -72,21 +72,16 @@ export function initSession() {
});

idleWatcher.start();
if (!cookie("Status")) {
document.cookie = "Status=Unlocked;Path=/";
}
} else if (cookie("ECLWatchUser")) {
window.location.replace(dojoConfig.urlInfo.basePath + "/Login.html");
}
}

export function lock() {
cookie("Status", "Locked");
idleWatcher.stop();
}

export function unlock() {
cookie("Status", "Unlocked");
idleWatcher.start();
}

Expand Down
2 changes: 1 addition & 1 deletion esp/src/src/Utility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1058,7 +1058,7 @@ export function parseCookies(): Record<string, any> {
export function deleteCookie(name: string) {
const expireDate = new Date();
expireDate.setSeconds(expireDate.getSeconds() + 1);
document.cookie = `${name}=; domain=${window.location.hostname}; path=/; expires=${expireDate.toUTCString()}`;
document.cookie = `${name}=; domain=${window.location.hostname}; expires=${expireDate.toUTCString()}`;
}

const d3FormatDecimal = d3Format(",.2f");
Expand Down

0 comments on commit 9b75b64

Please sign in to comment.