diff --git a/package-lock.json b/package-lock.json
index 840b4ffb..e98d44b8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"jsonwebtoken": "^8.5.1",
"polyfill-library": "^3.107.1",
"serve-static": "^1.14.1",
- "socket.io": "^4",
+ "socket.io": "^4.6.1",
"statsd-client": "^0.4.7"
},
"devDependencies": {
@@ -126,9 +126,12 @@
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"node_modules/@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
+ "version": "2.8.13",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
+ "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+ "dependencies": {
+ "@types/node": "*"
+ }
},
"node_modules/@types/http-cache-semantics": {
"version": "4.0.1",
@@ -924,9 +927,9 @@
}
},
"node_modules/engine.io": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
- "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz",
+ "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==",
"dependencies": {
"@types/cookie": "^0.4.1",
"@types/cors": "^2.8.12",
@@ -937,16 +940,16 @@
"cors": "~2.8.5",
"debug": "~4.3.1",
"engine.io-parser": "~5.0.3",
- "ws": "~8.2.3"
+ "ws": "~8.11.0"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/engine.io-parser": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
- "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
+ "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
"engines": {
"node": ">=10.0.0"
}
@@ -3478,25 +3481,28 @@
}
},
"node_modules/socket.io": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
- "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
+ "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
"dependencies": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~6.2.0",
- "socket.io-adapter": "~2.4.0",
- "socket.io-parser": "~4.2.0"
+ "engine.io": "~6.4.1",
+ "socket.io-adapter": "~2.5.2",
+ "socket.io-parser": "~4.2.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/socket.io-adapter": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
- "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
+ "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+ "dependencies": {
+ "ws": "~8.11.0"
+ }
},
"node_modules/socket.io-parser": {
"version": "4.2.1",
@@ -4097,9 +4103,9 @@
"dev": true
},
"node_modules/ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"engines": {
"node": ">=10.0.0"
},
@@ -4297,9 +4303,12 @@
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
+ "version": "2.8.13",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
+ "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+ "requires": {
+ "@types/node": "*"
+ }
},
"@types/http-cache-semantics": {
"version": "4.0.1",
@@ -4909,9 +4918,9 @@
}
},
"engine.io": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
- "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz",
+ "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==",
"requires": {
"@types/cookie": "^0.4.1",
"@types/cors": "^2.8.12",
@@ -4922,13 +4931,13 @@
"cors": "~2.8.5",
"debug": "~4.3.1",
"engine.io-parser": "~5.0.3",
- "ws": "~8.2.3"
+ "ws": "~8.11.0"
}
},
"engine.io-parser": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
- "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
+ "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw=="
},
"envinfo": {
"version": "7.8.1",
@@ -6902,22 +6911,25 @@
"dev": true
},
"socket.io": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
- "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
+ "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
"requires": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~6.2.0",
- "socket.io-adapter": "~2.4.0",
- "socket.io-parser": "~4.2.0"
+ "engine.io": "~6.4.1",
+ "socket.io-adapter": "~2.5.2",
+ "socket.io-parser": "~4.2.1"
}
},
"socket.io-adapter": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
- "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
+ "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+ "requires": {
+ "ws": "~8.11.0"
+ }
},
"socket.io-parser": {
"version": "4.2.1",
@@ -7398,9 +7410,9 @@
"dev": true
},
"ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"requires": {}
},
"xregexp": {
diff --git a/server/templating.js b/server/templating.js
index 46c82757..21a7543a 100644
--- a/server/templating.js
+++ b/server/templating.js
@@ -70,14 +70,26 @@ class Template {
}
}
+
+const jwtBoardnameAuth = require("./jwtBoardnameAuth"); // have to delete
class BoardTemplate extends Template {
parameters(parsedUrl, request, isModerator) {
const params = super.parameters(parsedUrl, request, isModerator);
const parts = parsedUrl.pathname.split("boards/", 2);
+ console.log(parts[1]);
const boardUriComponent = parts[1];
params["boardUriComponent"] = boardUriComponent;
params["board"] = decodeURIComponent(boardUriComponent);
- params["hideMenu"] = parsedUrl.query.hideMenu == "true" || false;
+ const query = parsedUrl.query;
+ const token = query.token;
+ const boardName = parts[1];
+ const userRole = jwtBoardnameAuth.roleInBoard(token, boardName);
+ if (userRole === "viewer") {
+ params["hideMenu"] = true;
+ } else {
+ params["hideMenu"] = false;
+ }
+ params["moderator"] = isModerator;
return params;
}
}
diff --git a/server/translations.json b/server/translations.json
index e9f2c054..554a7f7c 100644
--- a/server/translations.json
+++ b/server/translations.json
@@ -706,5 +706,45 @@
"view_source": "Kod źródłowy na GitHub",
"white-out": "Korektor",
"zoom": "Lupa"
+ },
+ "ta": {
+ "board_name_placeholder": "Nazwa tablicy",
+ "circle": "Okrąg",
+ "click_to_toggle": "kliknij, aby przełączyć",
+ "collaborative_whiteboard": "Tablica do współpracy online",
+ "color": "Kolor",
+ "configuration": "Ustawienia",
+ "create_private_board": "Utwórz tablicę prywatną",
+ "ellipse": "Elipsa",
+ "eraser": "gumka",
+ "grid": "Siatka",
+ "hand": "Ręka",
+ "download": "Pobierz",
+ "index_title": "Witamy w WBO!",
+ "introduction_paragraph": "WBO to bezpłatna i otwarta wirtualna tablica, która umożliwia rysowanie jednocześnie dla wielu użytkowników. Z WBO możesz rysować, pracować z kolegami nad przyszłymi projektami, organizować spotkania online, wzmacniać swoje materiały do nauki, a nawet próbować swoich sił w projektowaniu. WBO jest dostępne bez rejestracji.",
+ "keyboard_shortcut": "skrót",
+ "loading": "Ładowanie",
+ "menu": "Panel",
+ "mousewheel": "kółko myszy",
+ "mover": "Przenieś obiekt",
+ "named_private_board_description": "Możliwe jest również utworzenie nazwanej tablicy prywatnej, która będzie dostępna dla każdego, komu wysłałeś swoją nazwę tablicy.",
+ "opacity": "Nieprzezroczystość",
+ "open_public_board": "Otwórz anonimową tablicę",
+ "pencil": "Ołówek",
+ "private_board_description": "Prywatna tablica ma taką samą funkcjonalność jak anonimowa tablica. Różnica polega na tym, że tylko ci użytkownicy, którzy mają do niej link, mogą zobaczyć prywatną tablicę. Użyj prywatnej tablicy online w swoim w celach służbowych, udzielać lekcji online, rysować z dziećmi lub przyjaciółmi. Inni użytkownicy nie będą mogli usuwać ani zmieniać Twojej pracy bez Twojej zgody.",
+ "public_board_description": "Anonimowa tablica umożliwia wspólne rysowanie online. Użyj tego formatu, aby wykazać się kreatywnością i mieć mnóstwo różnych pomysłów. Zainspiruj się istniejącymi rysunkami, dodaj do nich i twórz współpracę z innymi odwiedzającymi. Każdy może usuwać istniejące elementy i rysunki.",
+ "recent_boards": "Ostatnie tablice",
+ "rectangle": "Prostokąt",
+ "share_instructions": "Korzystanie z platformy do współtworzenia jest bardzo łatwe. Po prostu udostępnij adres URL każdemu, kto chce z tobą rysować. Po otrzymaniu adresu URL może do ciebie dołączyć.",
+ "size": "Rozmiar",
+ "square": "Kwadrat",
+ "straight_line": "Linia prosta",
+ "tagline": "Bezpłatna i otwarta tablica do współpracy w sieci. Narysuj swoje pomysły razem w WBO!",
+ "text": "Tekst",
+ "tools": "Narzędzia",
+ "view_source": "Kod źródłowy na GitHub",
+ "white-out": "Korektor",
+ "zoom": "Lupa"
}
+
}