diff --git a/frontend/src/pages/GestionGroupes.jsx b/frontend/src/pages/GestionGroupes.jsx
index fca9463..fc90522 100644
--- a/frontend/src/pages/GestionGroupes.jsx
+++ b/frontend/src/pages/GestionGroupes.jsx
@@ -18,6 +18,8 @@ export default function GestionGroupes() {
const [busy, setBusy] = useState(false);
const [msg, setMsg] = useState('');
const [error, setError] = useState('');
+ const [pinFormOuvert, setPinFormOuvert] = useState(false);
+ const [pinForm, setPinForm] = useState({ actuel: '', nouveau: '', confirmation: '' });
const charger = async () => {
setLoading(true);
@@ -167,17 +169,17 @@ export default function GestionGroupes() {
}
};
- const changerPinSysadmin = async () => {
- const pinActuel = window.prompt('PIN actuel');
- if (!pinActuel) return;
- const nouveauPin = window.prompt('Nouveau PIN sysadmin (4 chiffres)');
- if (!nouveauPin) return;
- if (!/^[0-9]{4}$/.test(nouveauPin)) {
+ const changerPinSysadmin = async (e) => {
+ e.preventDefault();
+ if (!/^[0-9]{4}$/.test(pinForm.actuel)) {
+ setError('Le PIN actuel doit contenir 4 chiffres');
+ return;
+ }
+ if (!/^[0-9]{4}$/.test(pinForm.nouveau)) {
setError('Le nouveau PIN doit contenir 4 chiffres');
return;
}
- const confirmation = window.prompt('Confirmer le nouveau PIN');
- if (confirmation !== nouveauPin) {
+ if (pinForm.confirmation !== pinForm.nouveau) {
setError('La confirmation ne correspond pas');
return;
}
@@ -186,10 +188,12 @@ export default function GestionGroupes() {
setMsg('');
try {
const res = await api.post('/admin/sysadmin-pin', {
- pin_actuel: pinActuel,
- nouveau_pin: nouveauPin,
+ pin_actuel: pinForm.actuel,
+ nouveau_pin: pinForm.nouveau,
});
setMsg(res.message || 'PIN sysadmin mis à jour');
+ setPinForm({ actuel: '', nouveau: '', confirmation: '' });
+ setPinFormOuvert(false);
} catch (e) {
setError(e.message);
} finally {
@@ -214,7 +218,11 @@ export default function GestionGroupes() {
Créer un groupe
+ {pinFormOuvert && (
+
+ )}
+
{form && (
{editionId === 'nouveau' ? 'Nouveau groupe' : 'Modifier le groupe'}
diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx
index dd2168d..a71b143 100644
--- a/frontend/src/pages/Login.jsx
+++ b/frontend/src/pages/Login.jsx
@@ -14,6 +14,8 @@ export default function Login() {
const [groupeId, setGroupeId] = useState(localStorage.getItem('gm_groupe_id') || '');
const [groupeOuvert, setGroupeOuvert] = useState('');
const [seSouvenir, setSeSouvenir] = useState(!!localStorage.getItem('gm_courriel'));
+ const [sysadminOuvert, setSysadminOuvert] = useState(false);
+ const [sysadminPin, setSysadminPin] = useState('');
useEffect(() => {
if (groupes.length === 0) loadGroupes();
@@ -47,11 +49,11 @@ export default function Login() {
} catch {}
};
- const ouvrirSysadmin = async () => {
- const pin = window.prompt('PIN Sysadmin');
- if (!pin) return;
+ const ouvrirSysadmin = async (e) => {
+ e.preventDefault();
+ if (sysadminPin.length !== 4) return;
try {
- const data = await api.post('/admin/sysadmin-login', { pin });
+ const data = await api.post('/admin/sysadmin-login', { pin: sysadminPin });
api.setToken(data.access_token, false);
localStorage.setItem('gm_sysadmin_instance', '1');
localStorage.removeItem('gm_groupe_id');
@@ -72,6 +74,8 @@ export default function Login() {
setPage('G14');
} catch (e) {
useStore.setState({ error: e.message });
+ } finally {
+ setSysadminPin('');
}
};
@@ -186,13 +190,39 @@ export default function Login() {
Découvrir l'application
-
+ {sysadminOuvert && (
+
+ )}
+
+ {!sysadminOuvert && (
+
+ )}
100% logiciel libre · Hébergé au Québec