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 -->
|
||||
<div id="invalidRoom" class="hidden">
|
||||
<h1 data-i18n="error.title">
|
||||
<h1 id="missingRoomTitle" data-i18n="error.title">
|
||||
No meeting specified
|
||||
</h1>
|
||||
|
||||
<div class="error">
|
||||
<div id="missingRoomError" class="error">
|
||||
<span data-i18n="error.description">
|
||||
Please specify a meeting using the
|
||||
</span>
|
||||
@@ -437,6 +437,20 @@
|
||||
</span>
|
||||
</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;">
|
||||
<button id="createNewMeetingButton" class="button primary hidden" type="button" data-i18n="creator.createNewButton">
|
||||
Create New Meeting
|
||||
@@ -592,7 +606,9 @@
|
||||
error: {
|
||||
title: "No meeting specified",
|
||||
description: "Please specify a meeting using the",
|
||||
descriptionSuffix: "parameter."
|
||||
descriptionSuffix: "parameter.",
|
||||
invalidTitle: "Invalid meeting name",
|
||||
invalidDescription: "Only letters, numbers and hyphens are allowed:"
|
||||
},
|
||||
|
||||
creator: {
|
||||
@@ -608,6 +624,7 @@
|
||||
downloadButton: "Download ICS File",
|
||||
createNewButton: "Create New Meeting",
|
||||
meetingNameRequired: "Please enter a meeting name",
|
||||
meetingNameInvalid: "Meeting name may only contain letters, numbers and hyphens",
|
||||
startTimeRequired: "Please select a start time",
|
||||
endTimeRequired: "Please select an end time",
|
||||
endAfterStart: "End time must be after start time",
|
||||
@@ -679,7 +696,9 @@
|
||||
title: "Kein Meeting angegeben",
|
||||
description:
|
||||
"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: {
|
||||
@@ -695,6 +714,7 @@
|
||||
downloadButton: "ICS-Datei herunterladen",
|
||||
createNewButton: "Neues Meeting erstellen",
|
||||
meetingNameRequired: "Bitte gib einen Meeting-Namen ein",
|
||||
meetingNameInvalid: "Der Meeting-Name darf nur Buchstaben, Zahlen und Bindestriche enthalten",
|
||||
startTimeRequired: "Bitte wähle eine Startzeit",
|
||||
endTimeRequired: "Bitte wähle eine Endzeit",
|
||||
endAfterStart: "Die Endzeit muss nach der Startzeit liegen",
|
||||
@@ -765,7 +785,9 @@
|
||||
error: {
|
||||
title: "Aucune réunion spécifiée",
|
||||
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: {
|
||||
@@ -781,6 +803,7 @@
|
||||
downloadButton: "Télécharger le fichier ICS",
|
||||
createNewButton: "Créer une nouvelle 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",
|
||||
endTimeRequired: "Veuillez sélectionner une heure de fin",
|
||||
endAfterStart: "L'heure de fin doit être après l'heure de début",
|
||||
@@ -1010,6 +1033,13 @@
|
||||
const langFlag = document.getElementById("langFlag");
|
||||
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
|
||||
* ============================================================
|
||||
@@ -1030,22 +1060,19 @@
|
||||
window.location.search
|
||||
);
|
||||
|
||||
const room = params.get("room");
|
||||
|
||||
if (!room) {
|
||||
/*
|
||||
* Parameter nicht vorhanden.
|
||||
*/
|
||||
if (!params.has("room")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* Leerzeichen etc. verhindern.
|
||||
*
|
||||
* "?room=" ohne Wert ergibt einen leeren String.
|
||||
*/
|
||||
const trimmed = room.trim();
|
||||
|
||||
if (!trimmed) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return trimmed;
|
||||
return params.get("room").trim();
|
||||
}
|
||||
|
||||
/* ============================================================
|
||||
@@ -1061,29 +1088,17 @@
|
||||
* ============================================================
|
||||
*/
|
||||
|
||||
const ROOM_PATTERN = /^[A-Za-z0-9-]+$/;
|
||||
|
||||
function isValidRoom(room) {
|
||||
if (!room) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Keine Steuerzeichen.
|
||||
* Nur Buchstaben, Zahlen und Bindestriche.
|
||||
*/
|
||||
if (/[\u0000-\u001F\u007F]/.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;
|
||||
return ROOM_PATTERN.test(room);
|
||||
}
|
||||
|
||||
/* ============================================================
|
||||
@@ -1510,6 +1525,11 @@ END:VCALENDAR`;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ROOM_PATTERN.test(meetingName)) {
|
||||
alert(getTranslation('creator.meetingNameInvalid') || 'Meeting name may only contain letters, numbers and hyphens');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!meetingStartInput.value) {
|
||||
alert(getTranslation('creator.startTimeRequired') || 'Please select a start time');
|
||||
return;
|
||||
@@ -1578,20 +1598,45 @@ END:VCALENDAR`;
|
||||
* Kein room-Parameter: Meldungen ausblenden,
|
||||
* nur den Create-Button anzeigen.
|
||||
*/
|
||||
/*
|
||||
* Kein room-Parameter: keine Fehlermeldung,
|
||||
* nur den Create-Button anzeigen.
|
||||
*/
|
||||
if (room === null) {
|
||||
invalidRoom.querySelector("h1").classList.add("hidden");
|
||||
invalidRoom.querySelector(".error").classList.add("hidden");
|
||||
missingRoomTitle.classList.add("hidden");
|
||||
missingRoomError.classList.add("hidden");
|
||||
invalidNameTitle.classList.add("hidden");
|
||||
invalidNameError.classList.add("hidden");
|
||||
invalidRoom.classList.remove("hidden");
|
||||
createNewMeetingButton.classList.remove("hidden");
|
||||
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)) {
|
||||
missingRoomTitle.classList.add("hidden");
|
||||
missingRoomError.classList.add("hidden");
|
||||
invalidNameTitle.classList.remove("hidden");
|
||||
invalidNameError.classList.remove("hidden");
|
||||
invalidRoomName.textContent = room;
|
||||
invalidRoom.classList.remove("hidden");
|
||||
/* Show the create new meeting button when no room is specified */
|
||||
createNewMeetingButton.classList.remove("hidden");
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user