You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tooling.apache.org by sb...@apache.org on 2026/04/23 18:37:33 UTC
(tooling-trusted-releases) branch sbp updated: Clear JWTs when the page display status changes
This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/sbp by this push:
new 33411c46 Clear JWTs when the page display status changes
33411c46 is described below
commit 33411c4613b976ea78de6e1451a7051eb5b7ef29
Author: Sean B. Palmer <se...@miscoranda.com>
AuthorDate: Thu Apr 23 19:35:49 2026 +0100
Clear JWTs when the page display status changes
---
atr/static/js/ts/create-a-jwt.js | 47 +++++++++++++++++++++------
atr/static/js/ts/create-a-jwt.js.map | 2 +-
atr/static/ts/create-a-jwt.ts | 63 +++++++++++++++++++++++++++---------
3 files changed, 86 insertions(+), 26 deletions(-)
diff --git a/atr/static/js/ts/create-a-jwt.js b/atr/static/js/ts/create-a-jwt.js
index 8f9b6bfb..8451213d 100644
--- a/atr/static/js/ts/create-a-jwt.js
+++ b/atr/static/js/ts/create-a-jwt.js
@@ -22,10 +22,40 @@ document.addEventListener("DOMContentLoaded", () => {
const outputContainer = document.getElementById("jwt-container");
const output = document.getElementById("jwt-output");
const timeField = document.getElementById("time-remaining");
- let timeoutObj, intervalObj;
+ let timeoutObj = null;
+ let intervalObj = null;
if (!form || !output || !outputContainer || !timeField) {
return;
}
+ const jwtOutput = output;
+ const jwtOutputContainer = outputContainer;
+ const jwtTimeField = timeField;
+ function clearJwtDisplay() {
+ if (timeoutObj !== null) {
+ clearTimeout(timeoutObj);
+ timeoutObj = null;
+ }
+ if (intervalObj !== null) {
+ clearInterval(intervalObj);
+ intervalObj = null;
+ }
+ jwtOutput.textContent = "";
+ jwtTimeField.textContent = "";
+ jwtOutputContainer.classList.add("d-none");
+ }
+ document.addEventListener("visibilitychange", () => {
+ if (document.visibilityState === "hidden") {
+ clearJwtDisplay();
+ }
+ });
+ window.addEventListener("pagehide", () => {
+ clearJwtDisplay();
+ });
+ window.addEventListener("pageshow", (event) => {
+ if (event.persisted) {
+ clearJwtDisplay();
+ }
+ });
form.addEventListener("submit", async (e) => {
e.preventDefault();
const resp = await fetch(form.action, {
@@ -35,19 +65,16 @@ document.addEventListener("DOMContentLoaded", () => {
if (resp.ok) {
const token = await resp.text();
let time = 60;
- clearTimeout(timeoutObj);
- clearInterval(intervalObj);
- timeField.textContent = time + "s";
- outputContainer.classList.remove("d-none");
- output.textContent = token;
+ clearJwtDisplay();
+ jwtOutputContainer.classList.remove("d-none");
+ jwtOutput.textContent = token;
+ jwtTimeField.textContent = time + "s";
timeoutObj = setTimeout(() => {
- output.textContent = "";
- outputContainer.classList.add("d-none");
- clearInterval(intervalObj);
+ clearJwtDisplay();
}, 60000);
intervalObj = setInterval(() => {
time = time - 1;
- timeField.textContent = time + "s";
+ jwtTimeField.textContent = time + "s";
}, 1000);
}
else {
diff --git a/atr/static/js/ts/create-a-jwt.js.map b/atr/static/js/ts/create-a-jwt.js.map
index 72e5e216..8bfb7f28 100644
--- a/atr/static/js/ts/create-a-jwt.js.map
+++ b/atr/static/js/ts/create-a-jwt.js.map
@@ -1 +1 @@
-{"version":3,"file":"create-a-jwt.js","sourceRoot":"","sources":["../../ts/create-a-jwt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAS,EAAE;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAA2B,CAAC;IACjF,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,UAAkB,EAAE,WAAmB,CAAC;IAE5C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,I [...]
\ No newline at end of file
+{"version":3,"file":"create-a-jwt.js","sourceRoot":"","sources":["../../ts/create-a-jwt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAS,EAAE;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAA2B,CAAC;IACjF,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC, [...]
\ No newline at end of file
diff --git a/atr/static/ts/create-a-jwt.ts b/atr/static/ts/create-a-jwt.ts
index e6c5bddd..f653342b 100644
--- a/atr/static/ts/create-a-jwt.ts
+++ b/atr/static/ts/create-a-jwt.ts
@@ -19,15 +19,50 @@
document.addEventListener("DOMContentLoaded", (): void => {
const form = document.getElementById("issue-jwt-form") as HTMLFormElement | null;
- const outputContainer = document.getElementById("jwt-container")
+ const outputContainer = document.getElementById("jwt-container");
const output = document.getElementById("jwt-output");
const timeField = document.getElementById("time-remaining");
- let timeoutObj: number, intervalObj: number;
+ let timeoutObj: number | null = null;
+ let intervalObj: number | null = null;
if (!form || !output || !outputContainer || !timeField) {
return;
}
+ const jwtOutput = output;
+ const jwtOutputContainer = outputContainer;
+ const jwtTimeField = timeField;
+
+ function clearJwtDisplay(): void {
+ if (timeoutObj !== null) {
+ clearTimeout(timeoutObj);
+ timeoutObj = null;
+ }
+ if (intervalObj !== null) {
+ clearInterval(intervalObj);
+ intervalObj = null;
+ }
+ jwtOutput.textContent = "";
+ jwtTimeField.textContent = "";
+ jwtOutputContainer.classList.add("d-none");
+ }
+
+ document.addEventListener("visibilitychange", (): void => {
+ if (document.visibilityState === "hidden") {
+ clearJwtDisplay();
+ }
+ });
+
+ window.addEventListener("pagehide", (): void => {
+ clearJwtDisplay();
+ });
+
+ window.addEventListener("pageshow", (event: PageTransitionEvent): void => {
+ if (event.persisted) {
+ clearJwtDisplay();
+ }
+ });
+
form.addEventListener("submit", async (e: Event): Promise<void> => {
e.preventDefault();
@@ -38,21 +73,19 @@ document.addEventListener("DOMContentLoaded", (): void => {
if (resp.ok) {
const token = await resp.text();
- let time = 60
- clearTimeout(timeoutObj)
- clearInterval(intervalObj)
- timeField.textContent = time + "s"
- outputContainer.classList.remove("d-none");
- output.textContent = token;
+ let time = 60;
+
+ clearJwtDisplay();
+ jwtOutputContainer.classList.remove("d-none");
+ jwtOutput.textContent = token;
+ jwtTimeField.textContent = time + "s";
timeoutObj = setTimeout(() => {
- output.textContent = ""
- outputContainer.classList.add("d-none");
- clearInterval(intervalObj)
- }, 60000)
+ clearJwtDisplay();
+ }, 60000);
intervalObj = setInterval(() => {
- time = time - 1
- timeField.textContent = time + "s"
- }, 1000)
+ time = time - 1;
+ jwtTimeField.textContent = time + "s";
+ }, 1000);
} else {
alert("Failed to fetch JWT");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tooling.apache.org
For additional commands, e-mail: commits-help@tooling.apache.org