better validation of room names
This commit is contained in:
1 parent
ad8cb2b819
commit
5b128f9d50
1 file changed
+80
-35
+80
-35
@@ -423,11 +423,11 @@
|
|||||||
|
|
||||||
<!-- FEHLER -->
|
<!-- FEHLER -->
|
||||||
<div id="invalidRoom" class="hidden">
|
<div id="invalidRoom" class="hidden">
|
||||||
<h1 data-i18n="error.title">
|
<h1 id="missingRoomTitle" data-i18n="error.title">
|
||||||
No meeting specified
|
No meeting specified
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div class="error">
|
<div id="missingRoomError" class="error">
|
||||||
<span data-i18n="error.description">
|
<span data-i18n="error.description">
|
||||||
Please specify a meeting using the
|
Please specify a meeting using the
|
||||||
</span>
|
</span>
|
||||||
@@ -437,6 +437,20 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h1 id="invalidNameTitle" class="hidden" data-i18n="error.invalidTitle">
|
||||||
|
Invalid meeting name
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div id="invalidNameError" class="error hidden">
|
||||||
|
<span data-i18n="error.invalidDescription">
|
||||||
|
Only letters, numbers and hyphens are allowed:
|
||||||
|
</span>
|
||||||
|
<br>
|
||||||
|
<span class="room">
|
||||||
|
<strong id="invalidRoomName"></strong>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div style="margin-top: 24px;">
|
<div style="margin-top: 24px;">
|
||||||
<button id="createNewMeetingButton" class="button primary hidden" type="button" data-i18n="creator.createNewButton">
|
<button id="createNewMeetingButton" class="button primary hidden" type="button" data-i18n="creator.createNewButton">
|
||||||
Create New Meeting
|
Create New Meeting
|
||||||
@@ -592,7 +606,9 @@
|
|||||||
error: {
|
error: {
|
||||||
title: "No meeting specified",
|
title: "No meeting specified",
|
||||||
description: "Please specify a meeting using the",
|
description: "Please specify a meeting using the",
|
||||||
descriptionSuffix: "parameter."
|
descriptionSuffix: "parameter.",
|
||||||
|
invalidTitle: "Invalid meeting name",
|
||||||
|
invalidDescription: "Only letters, numbers and hyphens are allowed:"
|
||||||
},
|
},
|
||||||
|
|
||||||
creator: {
|
creator: {
|
||||||
@@ -608,6 +624,7 @@
|
|||||||
downloadButton: "Download ICS File",
|
downloadButton: "Download ICS File",
|
||||||
createNewButton: "Create New Meeting",
|
createNewButton: "Create New Meeting",
|
||||||
meetingNameRequired: "Please enter a meeting name",
|
meetingNameRequired: "Please enter a meeting name",
|
||||||
|
meetingNameInvalid: "Meeting name may only contain letters, numbers and hyphens",
|
||||||
startTimeRequired: "Please select a start time",
|
startTimeRequired: "Please select a start time",
|
||||||
endTimeRequired: "Please select an end time",
|
endTimeRequired: "Please select an end time",
|
||||||
endAfterStart: "End time must be after start time",
|
endAfterStart: "End time must be after start time",
|
||||||
@@ -679,7 +696,9 @@
|
|||||||
title: "Kein Meeting angegeben",
|
title: "Kein Meeting angegeben",
|
||||||
description:
|
description:
|
||||||
"Bitte gib ein Meeting über den Parameter",
|
"Bitte gib ein Meeting über den Parameter",
|
||||||
descriptionSuffix: "an."
|
descriptionSuffix: "an.",
|
||||||
|
invalidTitle: "Ungültiger Meeting-Name",
|
||||||
|
invalidDescription: "Erlaubt sind nur Buchstaben, Zahlen und Bindestriche:"
|
||||||
},
|
},
|
||||||
|
|
||||||
creator: {
|
creator: {
|
||||||
@@ -695,6 +714,7 @@
|
|||||||
downloadButton: "ICS-Datei herunterladen",
|
downloadButton: "ICS-Datei herunterladen",
|
||||||
createNewButton: "Neues Meeting erstellen",
|
createNewButton: "Neues Meeting erstellen",
|
||||||
meetingNameRequired: "Bitte gib einen Meeting-Namen ein",
|
meetingNameRequired: "Bitte gib einen Meeting-Namen ein",
|
||||||
|
meetingNameInvalid: "Der Meeting-Name darf nur Buchstaben, Zahlen und Bindestriche enthalten",
|
||||||
startTimeRequired: "Bitte wähle eine Startzeit",
|
startTimeRequired: "Bitte wähle eine Startzeit",
|
||||||
endTimeRequired: "Bitte wähle eine Endzeit",
|
endTimeRequired: "Bitte wähle eine Endzeit",
|
||||||
endAfterStart: "Die Endzeit muss nach der Startzeit liegen",
|
endAfterStart: "Die Endzeit muss nach der Startzeit liegen",
|
||||||
@@ -765,7 +785,9 @@
|
|||||||
error: {
|
error: {
|
||||||
title: "Aucune réunion spécifiée",
|
title: "Aucune réunion spécifiée",
|
||||||
description: "Veuillez spécifier une réunion à l'aide du paramètre",
|
description: "Veuillez spécifier une réunion à l'aide du paramètre",
|
||||||
descriptionSuffix: "."
|
descriptionSuffix: ".",
|
||||||
|
invalidTitle: "Nom de réunion invalide",
|
||||||
|
invalidDescription: "Seuls les lettres, les chiffres et les tirets sont autorisés :"
|
||||||
},
|
},
|
||||||
|
|
||||||
creator: {
|
creator: {
|
||||||
@@ -781,6 +803,7 @@
|
|||||||
downloadButton: "Télécharger le fichier ICS",
|
downloadButton: "Télécharger le fichier ICS",
|
||||||
createNewButton: "Créer une nouvelle réunion",
|
createNewButton: "Créer une nouvelle réunion",
|
||||||
meetingNameRequired: "Veuillez entrer un nom de réunion",
|
meetingNameRequired: "Veuillez entrer un nom de réunion",
|
||||||
|
meetingNameInvalid: "Le nom de la réunion ne peut contenir que des lettres, des chiffres et des tirets",
|
||||||
startTimeRequired: "Veuillez sélectionner une heure de début",
|
startTimeRequired: "Veuillez sélectionner une heure de début",
|
||||||
endTimeRequired: "Veuillez sélectionner une heure de fin",
|
endTimeRequired: "Veuillez sélectionner une heure de fin",
|
||||||
endAfterStart: "L'heure de fin doit être après l'heure de début",
|
endAfterStart: "L'heure de fin doit être après l'heure de début",
|
||||||
@@ -1010,6 +1033,13 @@
|
|||||||
const langFlag = document.getElementById("langFlag");
|
const langFlag = document.getElementById("langFlag");
|
||||||
const langLabel = document.getElementById("langLabel");
|
const langLabel = document.getElementById("langLabel");
|
||||||
|
|
||||||
|
/* Invalid room view DOM elements */
|
||||||
|
const missingRoomTitle = document.getElementById("missingRoomTitle");
|
||||||
|
const missingRoomError = document.getElementById("missingRoomError");
|
||||||
|
const invalidNameTitle = document.getElementById("invalidNameTitle");
|
||||||
|
const invalidNameError = document.getElementById("invalidNameError");
|
||||||
|
const invalidRoomName = document.getElementById("invalidRoomName");
|
||||||
|
|
||||||
/* ============================================================
|
/* ============================================================
|
||||||
* GET ROOM FROM QUERY-PARAMETER
|
* GET ROOM FROM QUERY-PARAMETER
|
||||||
* ============================================================
|
* ============================================================
|
||||||
@@ -1030,22 +1060,19 @@
|
|||||||
window.location.search
|
window.location.search
|
||||||
);
|
);
|
||||||
|
|
||||||
const room = params.get("room");
|
/*
|
||||||
|
* Parameter nicht vorhanden.
|
||||||
if (!room) {
|
*/
|
||||||
|
if (!params.has("room")) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Leerzeichen etc. verhindern.
|
* Leerzeichen etc. verhindern.
|
||||||
|
*
|
||||||
|
* "?room=" ohne Wert ergibt einen leeren String.
|
||||||
*/
|
*/
|
||||||
const trimmed = room.trim();
|
return params.get("room").trim();
|
||||||
|
|
||||||
if (!trimmed) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return trimmed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================================
|
/* ============================================================
|
||||||
@@ -1061,29 +1088,17 @@
|
|||||||
* ============================================================
|
* ============================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const ROOM_PATTERN = /^[A-Za-z0-9-]+$/;
|
||||||
|
|
||||||
function isValidRoom(room) {
|
function isValidRoom(room) {
|
||||||
if (!room) {
|
if (!room) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keine Steuerzeichen.
|
* Nur Buchstaben, Zahlen und Bindestriche.
|
||||||
*/
|
*/
|
||||||
if (/[\u0000-\u001F\u007F]/.test(room)) {
|
return ROOM_PATTERN.test(room);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Keine Slash-Zeichen.
|
|
||||||
*
|
|
||||||
* Falls deine Jitsi-Konfiguration Räume mit Slashes
|
|
||||||
* unterstützt, diese Prüfung entsprechend entfernen.
|
|
||||||
*/
|
|
||||||
if (room.includes("/")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================================
|
/* ============================================================
|
||||||
@@ -1510,6 +1525,11 @@ END:VCALENDAR`;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ROOM_PATTERN.test(meetingName)) {
|
||||||
|
alert(getTranslation('creator.meetingNameInvalid') || 'Meeting name may only contain letters, numbers and hyphens');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!meetingStartInput.value) {
|
if (!meetingStartInput.value) {
|
||||||
alert(getTranslation('creator.startTimeRequired') || 'Please select a start time');
|
alert(getTranslation('creator.startTimeRequired') || 'Please select a start time');
|
||||||
return;
|
return;
|
||||||
@@ -1578,20 +1598,45 @@ END:VCALENDAR`;
|
|||||||
* Kein room-Parameter: Meldungen ausblenden,
|
* Kein room-Parameter: Meldungen ausblenden,
|
||||||
* nur den Create-Button anzeigen.
|
* nur den Create-Button anzeigen.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Kein room-Parameter: keine Fehlermeldung,
|
||||||
|
* nur den Create-Button anzeigen.
|
||||||
|
*/
|
||||||
if (room === null) {
|
if (room === null) {
|
||||||
invalidRoom.querySelector("h1").classList.add("hidden");
|
missingRoomTitle.classList.add("hidden");
|
||||||
invalidRoom.querySelector(".error").classList.add("hidden");
|
missingRoomError.classList.add("hidden");
|
||||||
|
invalidNameTitle.classList.add("hidden");
|
||||||
|
invalidNameError.classList.add("hidden");
|
||||||
invalidRoom.classList.remove("hidden");
|
invalidRoom.classList.remove("hidden");
|
||||||
createNewMeetingButton.classList.remove("hidden");
|
createNewMeetingButton.classList.remove("hidden");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ungültiger room-Parameter.
|
* Leerer room-Parameter ("?room="):
|
||||||
|
* "No meeting specified" anzeigen.
|
||||||
|
*/
|
||||||
|
if (room === "") {
|
||||||
|
missingRoomTitle.classList.remove("hidden");
|
||||||
|
missingRoomError.classList.remove("hidden");
|
||||||
|
invalidNameTitle.classList.add("hidden");
|
||||||
|
invalidNameError.classList.add("hidden");
|
||||||
|
invalidRoom.classList.remove("hidden");
|
||||||
|
createNewMeetingButton.classList.remove("hidden");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ungültiger room-Parameter: nur die
|
||||||
|
* Invalid-Name-Meldung anzeigen.
|
||||||
*/
|
*/
|
||||||
if (!isValidRoom(room)) {
|
if (!isValidRoom(room)) {
|
||||||
|
missingRoomTitle.classList.add("hidden");
|
||||||
|
missingRoomError.classList.add("hidden");
|
||||||
|
invalidNameTitle.classList.remove("hidden");
|
||||||
|
invalidNameError.classList.remove("hidden");
|
||||||
|
invalidRoomName.textContent = room;
|
||||||
invalidRoom.classList.remove("hidden");
|
invalidRoom.classList.remove("hidden");
|
||||||
/* Show the create new meeting button when no room is specified */
|
|
||||||
createNewMeetingButton.classList.remove("hidden");
|
createNewMeetingButton.classList.remove("hidden");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user