Skip to content

Commit 6b8c1dc

Browse files
committed
Display back button warning in app installation
1 parent aab0b32 commit 6b8c1dc

6 files changed

Lines changed: 69 additions & 5 deletions

File tree

account-gui/src/locale/en.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,10 @@ const en = {
261261
finalizedRegistration: "Existing recovery method",
262262
finalizedRegistrationExplanation: "You are not allowed to register a phone number, as you already have an existing backup code as recovery method.",
263263
finalizedRegistrationBackupCode: "Your recovery code is: ",
264-
next: "Proceed"
264+
next: "Proceed",
265+
backButtonWarning: "Your eduID app is successfully added to your account. You are not allowed to change your recovery code using the back button.",
266+
backButtonWarningTitle: "Back button not recommended",
267+
backButtonWarningConfirmation: "Ok",
265268
},
266269
phoneVerification: {
267270
header: "Add a recovery phone number",

account-gui/src/locale/nl.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,10 @@ const nl = {
260260
finalizedRegistration: "Bestaande herstelmethode",
261261
finalizedRegistrationExplanation: "Je mag geen telefoonnummer registreren, omdat je al een bestaande back-upcode als herstelmethode hebt.",
262262
finalizedRegistrationBackupCode: "Je herstelcode is: ",
263-
next: "Doorgaan"
263+
next: "Doorgaan",
264+
backButtonWarning: "Je eduID-app is succesvol toegevoegd aan je account. Je kunt je herstelcode niet wijzigen met de terugknop.",
265+
backButtonWarningTitle: "Terugknop niet aanbevolen",
266+
backButtonWarningConfirmation: "Ok",
264267
},
265268
phoneVerification: {
266269
header: "Voeg een hersteltelefoonnummer toe",

account-gui/src/routes/RecoveryCode.svelte

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import {generateBackupCode} from "../api";
77
import Spinner from "../components/Spinner.svelte";
88
import {navigate} from "svelte-routing";
9+
import Modal from "../components/Modal.svelte";
910
1011
const RECOVERY_CODE = "recovery-code";
1112
const REDIRECT = "redirect";
@@ -15,13 +16,20 @@
1516
let recoveryCode;
1617
let redirect;
1718
let copied = false;
19+
let showModalBackButton = false;
1820
1921
const onConfirmRefresh = e => {
2022
e.preventDefault();
2123
window.removeEventListener("beforeunload", onConfirmRefresh, {capture: true});
2224
return e.returnValue = I18n.t("Recovery.LeaveConfirmation.COPY");
2325
}
2426
27+
const handlePopState = (event) => {
28+
event.preventDefault();
29+
showModalBackButton = true;
30+
window.history.pushState(null, null, window.location.pathname); // Prevent navigation
31+
};
32+
2533
onMount(() => {
2634
$links.displayBackArrow = false;
2735
@@ -37,6 +45,10 @@
3745
sessionStorage.setItem(RECOVERY_CODE, recoveryCode);
3846
sessionStorage.setItem(REDIRECT, redirect);
3947
showSpinner = false;
48+
49+
window.addEventListener('popstate', handlePopState);
50+
// Push a state so the first "back" triggers popstate
51+
window.history.pushState(null, null, window.location.pathname);
4052
}).catch(() => {
4153
showSpinner = false;
4254
recoveryCode = sessionStorage.getItem(RECOVERY_CODE);
@@ -46,6 +58,7 @@
4658
4759
onDestroy(() => {
4860
window.removeEventListener("beforeunload", onConfirmRefresh, {capture: true});
61+
window.removeEventListener('popstate', handlePopState);
4962
});
5063
5164
const copyToClipboard = () => {
@@ -106,3 +119,15 @@
106119
href={"/next"}
107120
label={I18n.t("Recovery.Continue.COPY")}/>
108121
</div>
122+
{#if showModalBackButton}
123+
<Modal submit={() => {
124+
showModalBackButton = false;
125+
window.removeEventListener('popstate', handlePopState);
126+
}}
127+
cancel={null}
128+
warning={false}
129+
question={I18n.t("recovery.backButtonWarning")}
130+
confirmTitle={I18n.t("recovery.backButtonWarningConfirmation")}
131+
title={I18n.t("recovery.backButtonWarningTitle")}>
132+
</Modal>
133+
{/if}

myconext-gui/src/locale/en.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,10 @@ const en = {
441441
finalizedRegistration: "Existing recovery method",
442442
finalizedRegistrationExplanation: "You are not allowed to register a phone number, as you already have an existing backup code as recovery method. You can change your recovery-method ",
443443
finalizedRegistrationHere: "here.",
444-
finalizedRegistrationBackupCode: "Your recovery code is: "
444+
finalizedRegistrationBackupCode: "Your recovery code is: ",
445+
backButtonWarning: "Your eduID app is successfully added to your account. You are not allowed to change your recovery code using the back button.",
446+
backButtonWarningTitle: "Back button not recommended",
447+
backButtonWarningConfirmation: "Ok",
445448
},
446449
phoneVerification: {
447450
header: "Add a recovery phone number",

myconext-gui/src/locale/nl.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,10 @@ const nl = {
441441
finalizedRegistration: "Bestaande herstelmethode",
442442
finalizedRegistrationExplanation: "Je mag geen telefoonnummer registreren, omdat je al een bestaande back-upcode als herstelmethode hebt. Wijzig je herstelmethode ",
443443
finalizedRegistrationHere: "hier.",
444-
finalizedRegistrationBackupCode: "Je herstelcode is: "
444+
finalizedRegistrationBackupCode: "Je herstelcode is: ",
445+
backButtonWarning: "Je eduID-app is succesvol toegevoegd aan je account. Je kunt je herstelcode niet wijzigen met de terugknop.",
446+
backButtonWarningTitle: "Terugknop niet aanbevolen",
447+
backButtonWarningConfirmation: "Ok",
445448
},
446449
phoneVerification: {
447450
header: "Voeg een hersteltelefoonnummer toe",

myconext-gui/src/routes/tiqr/RecoveryCode.svelte

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import {generateBackupCode, regenerateBackupCode} from "../../api";
66
import Spinner from "../../components/Spinner.svelte";
77
import {navigate} from "svelte-routing";
8+
import Modal from "../../components/Modal.svelte";
89
910
export let change = false;
1011
@@ -13,13 +14,21 @@
1314
let showSpinner = true;
1415
let recoveryCode = "";
1516
let copied = false;
17+
let showModalBackButton = false;
18+
1619
1720
const onConfirmRefresh = e => {
1821
e.preventDefault();
1922
window.removeEventListener("beforeunload", onConfirmRefresh, {capture: true});
2023
return e.returnValue = I18n.t("Recovery.LeaveConfirmation.COPY");
2124
}
2225
26+
const handlePopState = (event) => {
27+
event.preventDefault();
28+
showModalBackButton = true;
29+
window.history.pushState(null, null, window.location.pathname); // Prevent navigation
30+
};
31+
2332
onMount(() => {
2433
const promise = change ? regenerateBackupCode : generateBackupCode;
2534
promise()
@@ -29,6 +38,10 @@
2938
sessionStorage.setItem(RECOVERY_CODE, recoveryCode);
3039
showSpinner = false;
3140
window.addEventListener("beforeunload", onConfirmRefresh, {capture: true});
41+
42+
window.addEventListener('popstate', handlePopState);
43+
// Push a state so the first "back" triggers popstate
44+
window.history.pushState(null, null, window.location.pathname);
3245
}).catch(() => {
3346
showSpinner = false;
3447
recoveryCode = sessionStorage.getItem(RECOVERY_CODE);
@@ -37,6 +50,7 @@
3750
3851
onDestroy(() => {
3952
window.removeEventListener("beforeunload", onConfirmRefresh, {capture: true});
53+
window.removeEventListener('popstate', handlePopState);
4054
});
4155
4256
const copyToClipboard = () => {
@@ -47,6 +61,7 @@
4761
4862
const next = () => {
4963
window.removeEventListener("beforeunload", onConfirmRefresh, {capture: true});
64+
window.removeEventListener('popstate', handlePopState);
5065
navigate(change ? `/change-congrats` : `/congrats`);
5166
}
5267
@@ -118,4 +133,16 @@
118133
label={I18n.t("Recovery.Continue.COPY")}/>
119134
</div>
120135
</div>
121-
</div>
136+
</div>
137+
{#if showModalBackButton}
138+
<Modal submit={() => {
139+
showModalBackButton = false;
140+
window.removeEventListener('popstate', handlePopState);
141+
}}
142+
cancel={null}
143+
warning={false}
144+
question={I18n.t("recovery.backButtonWarning")}
145+
confirmTitle={I18n.t("recovery.backButtonWarningConfirmation")}
146+
title={I18n.t("recovery.backButtonWarningTitle")}>
147+
</Modal>
148+
{/if}

0 commit comments

Comments
 (0)