diff --git a/install/package.json b/install/package.json
index f9412af9d3..9c63f58090 100644
--- a/install/package.json
+++ b/install/package.json
@@ -35,7 +35,7 @@
"@isaacs/ttlcache": "1.4.1",
"@nodebb/spider-detector": "2.0.3",
"@popperjs/core": "2.11.8",
- "ace-builds": "1.35.0",
+ "ace-builds": "1.35.1",
"archiver": "7.0.1",
"async": "3.2.5",
"autoprefixer": "10.4.19",
@@ -166,7 +166,7 @@
"husky": "8.0.3",
"jsdom": "24.1.0",
"lint-staged": "15.2.7",
- "mocha": "10.4.0",
+ "mocha": "10.5.2",
"mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5",
"nyc": "17.0.0",
diff --git a/public/language/ar/notifications.json b/public/language/ar/notifications.json
index 2dea48c500..a56bcc44a3 100644
--- a/public/language/ar/notifications.json
+++ b/public/language/ar/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 أنشأ موضوعًا جديدًا: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 صار يتابعك.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json
index 213d72f9d4..e41bbacd1a 100644
--- a/public/language/bg/notifications.json
+++ b/public/language/bg/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 и %3 други публикуваха отговори на: %4",
"user-posted-topic": "%1 публикува нова тема: %2",
"user-edited-post": "%1 редактира публикация в %2",
- "user-posted-topic-with-tag": "%1 публикува нова тема с етикет %2",
- "user-posted-topic-with-tag-dual": "%1 публикува нова тема с етикети %2 и %3",
- "user-posted-topic-with-tag-triple": "%1 публикува нова тема с етикети %2, %3 и %4",
- "user-posted-topic-with-tag-multiple": "%1 публикува нова тема с етикети %2",
+ "user-posted-topic-with-tag": "%1 публикува %2 (с етикет %3)",
+ "user-posted-topic-with-tag-dual": "%1 публикува %2 (с етикети %3 и %4)",
+ "user-posted-topic-with-tag-triple": "%1 публикува %2 (с етикети %3, %4 и %5)",
+ "user-posted-topic-with-tag-multiple": "%1 публикува %2 (с етикет %3)",
"user-posted-topic-in-category": "%1 публикува нова тема в %2",
"user-started-following-you": "%1 започна да Ви следва.",
"user-started-following-you-dual": "%1 и %2 започнаха да Ви следват.",
diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json
index c40359bca7..9e6d6f8e72 100644
--- a/public/language/bn/notifications.json
+++ b/public/language/bn/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 আপনাকে অনুসরন করা শুরু করেছেন।",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json
index dc1f11eaf7..9aefa47f51 100644
--- a/public/language/cs/notifications.json
+++ b/public/language/cs/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 založil nové téma: %2",
"user-edited-post": "Příspěvek %2 byl upraven uživatelem %1",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 vás začal sledovat.",
"user-started-following-you-dual": "%1 a %2 vás začali sledovat.",
diff --git a/public/language/da/notifications.json b/public/language/da/notifications.json
index 68a591ebdd..1891a90f97 100644
--- a/public/language/da/notifications.json
+++ b/public/language/da/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 har oprettet en ny tråd: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 har valgt at følge dig.",
"user-started-following-you-dual": "%1 og %2 har valgt at følge dig.",
diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json
index 6c26f60728..8344a900ae 100644
--- a/public/language/de/notifications.json
+++ b/public/language/de/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 und %3 andere haben geantwortet auf: %4",
"user-posted-topic": "%1 hat ein neues Thema erstellt: %2",
"user-edited-post": "%1 hat einen Post in %2 bearbeitet",
- "user-posted-topic-with-tag": "%1 hat ein neues Thema mit dem Tag %2 erstellt",
- "user-posted-topic-with-tag-dual": "%1 hat ein neues Thema mit den Tags %2 and %3 erstellt",
- "user-posted-topic-with-tag-triple": "%1 hat ein neues Thema mit den Tags %2, %3 und %4 erstellt",
- "user-posted-topic-with-tag-multiple": "%1 hat ein neues Thema mit den Tags %2 erstellt",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 hat ein neues Thema in %2 erstellt",
"user-started-following-you": "%1 folgt dir jetzt.",
"user-started-following-you-dual": "%1 und %2 folgen dir jetzt.",
diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json
index 8043fa57da..5835f48502 100644
--- a/public/language/el/notifications.json
+++ b/public/language/el/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 started following you.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/en-US/notifications.json b/public/language/en-US/notifications.json
index 02125c4009..b2f0490a86 100644
--- a/public/language/en-US/notifications.json
+++ b/public/language/en-US/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 started following you.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/en-x-pirate/notifications.json b/public/language/en-x-pirate/notifications.json
index 975f837cd7..88afee9bc6 100644
--- a/public/language/en-x-pirate/notifications.json
+++ b/public/language/en-x-pirate/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 started following you.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json
index 16d514cb9c..f2beba8a99 100644
--- a/public/language/es/notifications.json
+++ b/public/language/es/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 ha publicado un nuevo tema: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 comenzó a seguirte.",
"user-started-following-you-dual": "%1 y %2 comenzaron a seguirte.",
diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json
index a4dd123e07..218ecb1b7b 100644
--- a/public/language/et/notifications.json
+++ b/public/language/et/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 on postitanud uue teema: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 hakkas sind jälgima.",
"user-started-following-you-dual": "%1 ja %2 hakkasid sind jälgima.",
diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json
index 012fd6cbd2..4a0d331fa1 100644
--- a/public/language/fa-IR/notifications.json
+++ b/public/language/fa-IR/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 یک موضوع جدید ارسال کرده: %2",
"user-edited-post": "%1 پستی را در %2 ویرایش کرد",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 شروع به دنبال کردن شما کرده",
"user-started-following-you-dual": "%1 و %2 شروع به دنبال کردن شما کرده.",
diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json
index 96cc80eb9f..86167b55d2 100644
--- a/public/language/fi/notifications.json
+++ b/public/language/fi/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 on kirjoittanut uuden aiheen: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 aloitti uuden aiheen kategoriassa %2",
"user-started-following-you": "%1 alkoi seurata sinua.",
"user-started-following-you-dual": "%1 ja %2 alkoivat seurata sinua",
diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json
index a165b91046..d64528d2da 100644
--- a/public/language/fr/notifications.json
+++ b/public/language/fr/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 et %3 autres ont posté des réponses dans : %4",
"user-posted-topic": "%1 a posté un nouveau sujet: %2",
"user-edited-post": "%1 a édité un message dans %2",
- "user-posted-topic-with-tag": "%1 a posté un nouveau sujet avec le mot-clé %2",
- "user-posted-topic-with-tag-dual": "%1 a posté un nouveau sujet avec le mot-clé %2 et %3",
- "user-posted-topic-with-tag-triple": "%1 a posté un nouveau sujet avec les mot-clés %2, %3 et %4",
- "user-posted-topic-with-tag-multiple": "%1 a posté un nouveau sujet avec les mot-clés %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 a posté un nouveau sujet: %2",
"user-started-following-you": "%1 vous suit.",
"user-started-following-you-dual": "%1 et %2 se sont abonnés à votre compte.",
diff --git a/public/language/gl/notifications.json b/public/language/gl/notifications.json
index a4511bc9b9..072927cd35 100644
--- a/public/language/gl/notifications.json
+++ b/public/language/gl/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 publicou un novo tema: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 comezou a seguirte.",
"user-started-following-you-dual": "%1 e %2 comezaron a seguirte.",
diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json
index 5ecb4b5aad..48b7b6f88d 100644
--- a/public/language/he/notifications.json
+++ b/public/language/he/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 ו-%3 אחרים הגיבו ל: %4",
"user-posted-topic": "%1 העלה נושא חדש: %2",
"user-edited-post": "%1 ערך פוסט ב: %2",
- "user-posted-topic-with-tag": "%1 פרסם נושא חדש עם התגית %2",
- "user-posted-topic-with-tag-dual": "%1 פרסם נושא חדש עם התגיות %1 ו-%3",
- "user-posted-topic-with-tag-triple": "%1 פרסם נושא חדש עם התגיות %2, %3 ו-%4",
- "user-posted-topic-with-tag-multiple": "%1 פרסם נושא חדש עם התגיות %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 פרסם נושא חדש ב%2",
"user-started-following-you": "%1 התחיל לעקוב אחריך.",
"user-started-following-you-dual": "%1 ו-%2 התחילו לעקוב אחריך.",
diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json
index 8433cb789b..f8dec38951 100644
--- a/public/language/hr/notifications.json
+++ b/public/language/hr/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 je otvorio novu temu: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 Vas sada prati.",
"user-started-following-you-dual": "%1 i %2 vas sada prate.",
diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json
index e1398d636e..3b39e696ae 100644
--- a/public/language/hu/notifications.json
+++ b/public/language/hu/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 új témakört hozott létre: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 új témakört hozott létre: %2",
"user-started-following-you": "%1 elkezdett követni téged.",
"user-started-following-you-dual": "%1 és%2 elkezdett követni téged.",
diff --git a/public/language/hy/notifications.json b/public/language/hy/notifications.json
index 96a515cbd4..15f11819b9 100644
--- a/public/language/hy/notifications.json
+++ b/public/language/hy/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 և %3 ուրիշները պատասխանել են %4 - ին։",
"user-posted-topic": "%1-ը նոր թեմա է տեղադրել՝ %2",
"user-edited-post": "%1-ը խմբագրել է գրառում %2-ում",
- "user-posted-topic-with-tag": "%1 պիտակով նոր թեմա է տեղադրել %2 - ում։",
- "user-posted-topic-with-tag-dual": "%1 պիտակով նոր թեմա է տեղադրել %2 և %3 - ում։",
- "user-posted-topic-with-tag-triple": "%1 պիտակով նոր թեմա է տեղադրել %2, %3 և %4 - ում։",
- "user-posted-topic-with-tag-multiple": "%1 պիտակով նոր թեմա է տեղադրել %2 - ում։",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 նոր թեմա է տեղադրել %2",
"user-started-following-you": "%1 սկսեց հետևել ձեզ",
"user-started-following-you-dual": "%1 և %2 սկսեցին հետևել ձեզ:",
diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json
index 4b6259caba..7744847eaf 100644
--- a/public/language/id/notifications.json
+++ b/public/language/id/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 telah membuat topik baru: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 mulai mengikutimu.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json
index 737dfd0f20..df95618a8c 100644
--- a/public/language/it/notifications.json
+++ b/public/language/it/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 e %3 altri hanno postato risposte a: %4",
"user-posted-topic": "%1 ha postato una nuova discussione: %2",
"user-edited-post": "%1 ha modificato un post in %2",
- "user-posted-topic-with-tag": "%1 ha postato una nuova discussione con tag %2",
- "user-posted-topic-with-tag-dual": "%1 ha postato una nuova discussione con i tag %2 e %3",
- "user-posted-topic-with-tag-triple": "%1 ha postato una nuova discussione con e tag %2, %3 e %4",
- "user-posted-topic-with-tag-multiple": "%1 ha postato una nuova discussione con i tag %2",
+ "user-posted-topic-with-tag": "%1 ha postato %2 (taggato %3)",
+ "user-posted-topic-with-tag-dual": "%1 ha postato %2 (taggato %3 e %4)",
+ "user-posted-topic-with-tag-triple": "%1 ha postato %2 (taggato %3, %4, e %5)",
+ "user-posted-topic-with-tag-multiple": "%1 ha postato %2 (taggato %3)",
"user-posted-topic-in-category": "%1 ha postato una nuova discussione in %2",
"user-started-following-you": "%1 ha iniziato a seguirti.",
"user-started-following-you-dual": "%1 e %2 hanno iniziato a seguirti.",
diff --git a/public/language/it/post-queue.json b/public/language/it/post-queue.json
index bf1d545029..b9ebfe9bfb 100644
--- a/public/language/it/post-queue.json
+++ b/public/language/it/post-queue.json
@@ -39,5 +39,5 @@
"remove-selected-confirm": "Vuoi rimuovere %1 post selezionati?",
"bulk-accept-success": "%1 post accettati",
"bulk-reject-success": "%1 post rifiutati",
- "links-in-this-post": "Links in this post"
+ "links-in-this-post": "Link in questo post"
}
\ No newline at end of file
diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json
index ab09acafd9..3894f8dd0c 100644
--- a/public/language/ja/notifications.json
+++ b/public/language/ja/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 が新しいスレッドを投稿しました。: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1があなたをフォローしました。",
"user-started-following-you-dual": "%1 と %2 があなたをフォローしました。",
diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json
index 1e9b72af2b..68a59e9096 100644
--- a/public/language/ko/notifications.json
+++ b/public/language/ko/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 및 다른 %3명이 답글을 게시했습니다: %4",
"user-posted-topic": "%1님이 새 토픽을 게시했습니다: %2",
"user-edited-post": "%1님이 %2에서 게시물을 편집했습니다.",
- "user-posted-topic-with-tag": "%1님이 태그 %2를 포함한 새 토픽을 게시했습니다.",
- "user-posted-topic-with-tag-dual": "%1님이 태그 %2 및 %3를 포함한 새 토픽을 게시했습니다.",
- "user-posted-topic-with-tag-triple": "%1님이 태그 %2, %3 및 %4를 포함한 새 토픽을 게시했습니다.",
- "user-posted-topic-with-tag-multiple": "%1님이 태그 %2를 포함한 새 토픽을 게시했습니다.",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1님이 카테고리 %2에 새 토픽을 게시했습니다.",
"user-started-following-you": "%1님이 나를 팔로우하기 시작했습니다.",
"user-started-following-you-dual": "%1 및 %2님이 나를 팔로우하기 시작했습니다.",
diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json
index c212e1b3de..ddb3cad7bf 100644
--- a/public/language/lt/notifications.json
+++ b/public/language/lt/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 paskelbė naują temą: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 pradėjo sekti tave",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/lv/notifications.json b/public/language/lv/notifications.json
index ef3573784a..e355f96321 100644
--- a/public/language/lv/notifications.json
+++ b/public/language/lv/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 ir ievietojis jaunu tematu: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 sāka Tev sekot.",
"user-started-following-you-dual": "%1 un %2 sāka Tev sekot.",
diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json
index a852e75ac5..9ff88007db 100644
--- a/public/language/ms/notifications.json
+++ b/public/language/ms/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 membuka topik baru : %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 mula mengikut anda.",
"user-started-following-you-dual": "%1 dan %2 mula mengikuti anda.",
diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json
index 29752bf30d..1c4ad0976b 100644
--- a/public/language/nb/notifications.json
+++ b/public/language/nb/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 har skrevet en ny tråd: %2",
"user-edited-post": "%1 har redigert ett innlegg i %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 har publisert et nytt innlegg i %2",
"user-started-following-you": "%1 begynte å følge deg.",
"user-started-following-you-dual": "%1 og 2% har begynt å følge deg.",
diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json
index 5a103b7489..d7170cc51c 100644
--- a/public/language/nl/notifications.json
+++ b/public/language/nl/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 heeft een nieuw onderwerp geplaatst: %2",
"user-edited-post": "%1 heeft een bericht aangepast in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 volgt jou nu.",
"user-started-following-you-dual": "%1 en %2 volgen jou nu.",
diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json
index 093845b447..bdbf9bc2df 100644
--- a/public/language/pl/notifications.json
+++ b/public/language/pl/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 i %3 innych dodało odpowiedzi do: %4",
"user-posted-topic": "%1 stworzył nowy temat: %2",
"user-edited-post": "%1 edytował post w %2",
- "user-posted-topic-with-tag": "%1 stworzył nowy temat z tagiem %2",
- "user-posted-topic-with-tag-dual": "%1 stworzył nowy temat z tagami %2 i %3",
- "user-posted-topic-with-tag-triple": "%1 stworzył nowy temat z tagami %2, %3 i %4",
- "user-posted-topic-with-tag-multiple": "%1 stworzył nowy temat z tagami %2",
+ "user-posted-topic-with-tag": "%1 dodał(a) %2 (tag %3)",
+ "user-posted-topic-with-tag-dual": "%1 dodał(a) %2 (tagi %3 i %4)",
+ "user-posted-topic-with-tag-triple": "%1 dodał(a) %2 (tagi %3, %4 i %5)",
+ "user-posted-topic-with-tag-multiple": "%1 dodał(a) %2 (tag %3)",
"user-posted-topic-in-category": "%1 stworzył nowy temat w %2",
"user-started-following-you": "%1 zaczął Cię obserwować.",
"user-started-following-you-dual": "%1 oraz %2 zaczęli Cię obserwować.",
diff --git a/public/language/pl/post-queue.json b/public/language/pl/post-queue.json
index 970d6e0b13..2ecc50afbf 100644
--- a/public/language/pl/post-queue.json
+++ b/public/language/pl/post-queue.json
@@ -39,5 +39,5 @@
"remove-selected-confirm": "Czy chcesz usunąć %1 wybranych postów?",
"bulk-accept-success": "%1 postów zaakceptowanych",
"bulk-reject-success": "%1 postów odrzuconych",
- "links-in-this-post": "Links in this post"
+ "links-in-this-post": "Odnośniki w tym wpisie"
}
\ No newline at end of file
diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json
index b310b45bce..a9fcbffb61 100644
--- a/public/language/pt-BR/notifications.json
+++ b/public/language/pt-BR/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 postou um novo tópico: %2",
"user-edited-post": "%1 editou um post em %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 começou a seguir você.",
"user-started-following-you-dual": "%1 e %2 começaram a lhe acompanhar.",
diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json
index 8f4e18c6f2..0568d3abdb 100644
--- a/public/language/pt-PT/notifications.json
+++ b/public/language/pt-PT/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 publicou um novo tópico: %2",
"user-edited-post": "%1 editou uma publicação em %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 começou a seguir-te.",
"user-started-following-you-dual": "%1 e %2 começaram a seguir-te.",
diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json
index daa30b04d8..f30ef3c0d2 100644
--- a/public/language/ro/notifications.json
+++ b/public/language/ro/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 a început să te urmărească.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json
index c24ff5f7ff..86e96bc41d 100644
--- a/public/language/ru/notifications.json
+++ b/public/language/ru/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "Пользователь %1 создал новую тему: %2",
"user-edited-post": " %1 отредактировал сообщение в %2 ",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "Пользователь %1 подписался на вас.",
"user-started-following-you-dual": "Пользователи %1 и %2 подписались на вас.",
diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json
index 94aef14349..0006d69bc2 100644
--- a/public/language/rw/notifications.json
+++ b/public/language/rw/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 yatangije ikiganiro gishya: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 yatangiye kugukurikira.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json
index a1d860076a..3f7e69bd8b 100644
--- a/public/language/sc/notifications.json
+++ b/public/language/sc/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 has posted a new topic: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 started following you.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json
index de66fd4959..8fdb90b05d 100644
--- a/public/language/sk/notifications.json
+++ b/public/language/sk/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 pridal novú tému: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 Vás začal sledovať.",
"user-started-following-you-dual": "%1 a %2 Vás začali sledovať.",
diff --git a/public/language/sl/notifications.json b/public/language/sl/notifications.json
index 2f8f6337f3..d7613d1f5e 100644
--- a/public/language/sl/notifications.json
+++ b/public/language/sl/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 je odprl/-a novo temo: %2.",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 te je začel/-a spremljati.",
"user-started-following-you-dual": "%1 in %2 sta te začela/-i spremljati.",
diff --git a/public/language/sq-AL/notifications.json b/public/language/sq-AL/notifications.json
index 14fe76838b..a208f89f9b 100644
--- a/public/language/sq-AL/notifications.json
+++ b/public/language/sq-AL/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 ka postuar një temë të re: %2",
"user-edited-post": "%1 ka redaktuar një postim në %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 filloi t'ju ndjekë.",
"user-started-following-you-dual": "% 1 dhe %2 filluan t'ju ndjekin.",
diff --git a/public/language/sr/notifications.json b/public/language/sr/notifications.json
index ba93a6346c..968f1d0f4f 100644
--- a/public/language/sr/notifications.json
+++ b/public/language/sr/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 и осталих %3 су објавили одговор: %4",
"user-posted-topic": "%1 је поставио нову тему: %2",
"user-edited-post": "%1 је уредио поруку у %2",
- "user-posted-topic-with-tag": "%1 је објавио нову тему са ознаком %2",
- "user-posted-topic-with-tag-dual": "%1 је објавио нову тему са ознакама %2 и %3",
- "user-posted-topic-with-tag-triple": "%1 је објавио нову тему са ознакама %2, %3 и %4",
- "user-posted-topic-with-tag-multiple": "%1 је објавио нову тему са ознакама %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 је почео да вас прати.",
"user-started-following-you-dual": "%1 и %2 су почели да вас прате.",
diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json
index 9ca90fa226..d7b952e53e 100644
--- a/public/language/sv/notifications.json
+++ b/public/language/sv/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 har skapat ett nytt ämne: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 började följa dig.",
"user-started-following-you-dual": "%1 och %2 började följa dig.",
diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json
index b367a012fb..d2760ba136 100644
--- a/public/language/th/notifications.json
+++ b/public/language/th/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 และอีก %3 คน ได้โพสต์คำตอบไปยัง %4",
"user-posted-topic": "%1ได้โพสต์กระทู้ใหม่ : %2",
"user-edited-post": "%1 ได้แก้ไขโพสต์ใน %2",
- "user-posted-topic-with-tag": "%1 ได้โพสต์กระทู้ใหม่ที่ติดแท็ก %2",
- "user-posted-topic-with-tag-dual": "%1 ได้โพสต์กระทู้ใหม่ที่ติดแท็ก %2 และ %3",
- "user-posted-topic-with-tag-triple": "%1 ได้โพสต์กระทู้ใหม่ที่ติดแท็ก %2, %3 และ %4",
- "user-posted-topic-with-tag-multiple": "%1 ได้โพสต์กระทู้ใหม่ที่ติดแท็ก %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 ได้โพสต์กระทู้ใหม่ใน %2",
"user-started-following-you": "%1 ได้เริ่มติดตามคุณ",
"user-started-following-you-dual": "%1และ%2ได้เริ่มติดตามคุณ",
diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json
index 4b432e2d32..27a95c7046 100644
--- a/public/language/tr/notifications.json
+++ b/public/language/tr/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 ve %3 diğer kullanıcı şu konuya ileti yazdılar: %4",
"user-posted-topic": "%1 şu yeni konuyu oluşturdu: %2",
"user-edited-post": "%1 şu konudaki bir iletiyi değiştirdi: %2",
- "user-posted-topic-with-tag": "%1 şu etiketi kullanarak yeni bir konu oluşturdu: %2",
- "user-posted-topic-with-tag-dual": "%1 şu etiketleri kullanarak yeni bir konu oluşturdu: %2 ve %3",
- "user-posted-topic-with-tag-triple": "%1 şu etiketleri kullanarak yeni bir konu oluşturdu: %2, %3 ve %4",
- "user-posted-topic-with-tag-multiple": "%1 şu etiketleri kullanarak yeni bir konu oluşturdu: %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 şu kategoride yeni bir başlık oluşturdu: %2",
"user-started-following-you": "%1 sizi takip etmeye başladı",
"user-started-following-you-dual": "%1 ve %2 sizi takip etmeye başladı.",
diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json
index 74aeed642d..65e8a7d836 100644
--- a/public/language/uk/notifications.json
+++ b/public/language/uk/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 запостив нову тему: %2",
"user-edited-post": "%1 has edited a post in %2",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1 почав стежити за вами.",
"user-started-following-you-dual": "%1 та %2 почали стежити за вами.",
diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json
index b60e410d8b..8ded5e79dd 100644
--- a/public/language/vi/notifications.json
+++ b/public/language/vi/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 và %3 người khác đã đăng trả lời đến: %4",
"user-posted-topic": "%1 đã đăng một chủ đề mới: %2",
"user-edited-post": "%1 đã chỉnh sửa một bài đăng trong %2",
- "user-posted-topic-with-tag": "%1 đã đăng một chủ đề mới với thẻ %2",
- "user-posted-topic-with-tag-dual": "%1 đã đăng một chủ đề mới với thẻ %2 và %3",
- "user-posted-topic-with-tag-triple": "%1 đã đăng một chủ đề mới với thẻ %2, %3 và %4",
- "user-posted-topic-with-tag-multiple": "%1 đã đăng một chủ đề mới với thẻ %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 đã đăng chủ đề mới trong %2",
"user-started-following-you": "%1 đã theo dõi bạn.",
"user-started-following-you-dual": "%1 và %2 đã bắt đầu theo dõi bạn.",
diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json
index 981482c16c..95432182e8 100644
--- a/public/language/zh-CN/notifications.json
+++ b/public/language/zh-CN/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 发表了新主题:%2",
"user-edited-post": "%1 在 %2 编辑了一个帖子",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 发表了新主题:%2",
"user-started-following-you": "%1关注了您。",
"user-started-following-you-dual": "%1 和 %2 关注了您。",
diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json
index a136577f77..cf26acb01a 100644
--- a/public/language/zh-TW/notifications.json
+++ b/public/language/zh-TW/notifications.json
@@ -52,10 +52,10 @@
"user-posted-to-multiple": "%1, %2 and %3 others have posted replies to: %4",
"user-posted-topic": "%1 發表了新主題:%2",
"user-edited-post": "%1 在 %2編輯了一則貼文",
- "user-posted-topic-with-tag": "%1 has posted a new topic with tag %2",
- "user-posted-topic-with-tag-dual": "%1 has posted a new topic with tags %2 and %3",
- "user-posted-topic-with-tag-triple": "%1 has posted a new topic with tags %2, %3 and %4",
- "user-posted-topic-with-tag-multiple": "%1 has posted a new topic with tags %2",
+ "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
"user-posted-topic-in-category": "%1 has posted a new topic in %2",
"user-started-following-you": "%1追隨了您。",
"user-started-following-you-dual": "%1 和 %2 追隨了您。",
diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js
index b3949905d4..6591459cf2 100644
--- a/src/controllers/authentication.js
+++ b/src/controllers/authentication.js
@@ -342,7 +342,7 @@ authenticationController.doLogin = async function (req, uid) {
await authenticationController.onSuccessfulLogin(req, uid);
};
-authenticationController.onSuccessfulLogin = async function (req, uid) {
+authenticationController.onSuccessfulLogin = async function (req, uid, trackSession = true) {
/*
* Older code required that this method be called from within the SSO plugin.
* That behaviour is no longer required, onSuccessfulLogin is now automatically
@@ -380,7 +380,7 @@ authenticationController.onSuccessfulLogin = async function (req, uid) {
new Promise((resolve) => {
req.session.save(resolve);
}),
- user.auth.addSession(uid, req.sessionID, uuid),
+ trackSession ? user.auth.addSession(uid, req.sessionID) : undefined,
user.updateLastOnlineTime(uid),
user.onUserOnline(uid, Date.now()),
analytics.increment('logins'),
diff --git a/src/meta/tags.js b/src/meta/tags.js
index 121c1c74c2..b59760b167 100644
--- a/src/meta/tags.js
+++ b/src/meta/tags.js
@@ -14,8 +14,10 @@ const relative_path = nconf.get('relative_path');
const upload_url = nconf.get('upload_url');
Tags.parse = async (req, data, meta, link) => {
+ const isAPI = req.res && req.res.locals && req.res.locals.isAPI;
+
// Meta tags
- const defaultTags = [{
+ const defaultTags = isAPI ? [] : [{
name: 'viewport',
content: 'width=device-width, initial-scale=1.0',
}, {
@@ -40,14 +42,14 @@ Tags.parse = async (req, data, meta, link) => {
content: Meta.config.themeColor || '#ffffff',
}];
- if (Meta.config.keywords) {
+ if (Meta.config.keywords && !isAPI) {
defaultTags.push({
name: 'keywords',
content: Meta.config.keywords,
});
}
- if (Meta.config['brand:logo']) {
+ if (Meta.config['brand:logo'] && !isAPI) {
defaultTags.push({
name: 'msapplication-square150x150logo',
content: Meta.config['brand:logo'],
@@ -59,7 +61,7 @@ Tags.parse = async (req, data, meta, link) => {
const cacheBuster = `${Meta.config['cache-buster'] ? `?${Meta.config['cache-buster']}` : ''}`;
// Link Tags
- const defaultLinks = [{
+ const defaultLinks = isAPI ? [] : [{
rel: 'icon',
type: 'image/x-icon',
href: `${faviconPath}${cacheBuster}`,
@@ -69,7 +71,7 @@ Tags.parse = async (req, data, meta, link) => {
crossorigin: `use-credentials`,
}];
- if (plugins.hooks.hasListeners('filter:search.query')) {
+ if (plugins.hooks.hasListeners('filter:search.query') && !isAPI) {
defaultLinks.push({
rel: 'search',
type: 'application/opensearchdescription+xml',
@@ -78,7 +80,59 @@ Tags.parse = async (req, data, meta, link) => {
});
}
- // Touch icons for mobile-devices
+ if (!isAPI) {
+ addTouchIcons(defaultLinks);
+ }
+
+ const results = await utils.promiseParallel({
+ tags: plugins.hooks.fire('filter:meta.getMetaTags', { req: req, data: data, tags: defaultTags }),
+ links: plugins.hooks.fire('filter:meta.getLinkTags', { req: req, data: data, links: defaultLinks }),
+ });
+
+ meta = results.tags.tags.concat(meta || []).map((tag) => {
+ if (!tag || typeof tag.content !== 'string') {
+ winston.warn('Invalid meta tag. ', tag);
+ return tag;
+ }
+
+ if (!tag.noEscape) {
+ const attributes = Object.keys(tag);
+ attributes.forEach((attr) => {
+ tag[attr] = utils.escapeHTML(String(tag[attr]));
+ });
+ }
+
+ return tag;
+ });
+
+ await addSiteOGImage(meta);
+
+ addIfNotExists(meta, 'property', 'og:title', Meta.config.title || 'NodeBB');
+ const ogUrl = url + (req.originalUrl !== '/' ? stripRelativePath(req.originalUrl) : '');
+ addIfNotExists(meta, 'property', 'og:url', ogUrl);
+ addIfNotExists(meta, 'name', 'description', Meta.config.description);
+ addIfNotExists(meta, 'property', 'og:description', Meta.config.description);
+
+ link = results.links.links.concat(link || []);
+ if (isAPI) {
+ const whitelist = ['canonical', 'alternate', 'up'];
+ link = link.filter(link => whitelist.some(val => val === link.rel));
+ }
+ link = link.map((tag) => {
+ if (!tag.noEscape) {
+ const attributes = Object.keys(tag);
+ attributes.forEach((attr) => {
+ tag[attr] = utils.escapeHTML(String(tag[attr]));
+ });
+ }
+
+ return tag;
+ });
+
+ return { meta, link };
+};
+
+function addTouchIcons(defaultLinks) {
if (Meta.config['brand:touchIcon']) {
defaultLinks.push({
rel: 'apple-touch-icon',
@@ -142,64 +196,16 @@ Tags.parse = async (req, data, meta, link) => {
href: `${relative_path}/assets/images/touch/512.png`,
});
}
-
- const results = await utils.promiseParallel({
- tags: plugins.hooks.fire('filter:meta.getMetaTags', { req: req, data: data, tags: defaultTags }),
- links: plugins.hooks.fire('filter:meta.getLinkTags', { req: req, data: data, links: defaultLinks }),
- });
-
- meta = results.tags.tags.concat(meta || []).map((tag) => {
- if (!tag || typeof tag.content !== 'string') {
- winston.warn('Invalid meta tag. ', tag);
- return tag;
- }
-
- if (!tag.noEscape) {
- const attributes = Object.keys(tag);
- attributes.forEach((attr) => {
- tag[attr] = utils.escapeHTML(String(tag[attr]));
- });
- }
-
- return tag;
- });
-
- await addSiteOGImage(meta);
-
- addIfNotExists(meta, 'property', 'og:title', Meta.config.title || 'NodeBB');
- const ogUrl = url + (req.originalUrl !== '/' ? stripRelativePath(req.originalUrl) : '');
- addIfNotExists(meta, 'property', 'og:url', ogUrl);
- addIfNotExists(meta, 'name', 'description', Meta.config.description);
- addIfNotExists(meta, 'property', 'og:description', Meta.config.description);
-
- link = results.links.links.concat(link || []).map((tag) => {
- if (!tag.noEscape) {
- const attributes = Object.keys(tag);
- attributes.forEach((attr) => {
- tag[attr] = utils.escapeHTML(String(tag[attr]));
- });
- }
-
- return tag;
- });
-
- return { meta, link };
-};
+}
function addIfNotExists(meta, keyName, tagName, value) {
- let exists = false;
- meta.forEach((tag) => {
- if (tag[keyName] === tagName) {
- exists = true;
- }
- });
+ const exists = meta.some(tag => tag[keyName] === tagName);
if (!exists && value) {
- const data = {
+ meta.push({
content: utils.escapeHTML(String(value)),
- };
- data[keyName] = tagName;
- meta.push(data);
+ [keyName]: tagName,
+ });
}
}
diff --git a/src/middleware/user.js b/src/middleware/user.js
index 3b7c1168db..ca6afcaf9b 100644
--- a/src/middleware/user.js
+++ b/src/middleware/user.js
@@ -41,7 +41,7 @@ module.exports = function (middleware) {
async function finishLogin(req, user) {
const loginAsync = util.promisify(req.login).bind(req);
await loginAsync(user, { keepSessionInfo: true });
- await controllers.authentication.onSuccessfulLogin(req, user.uid);
+ await controllers.authentication.onSuccessfulLogin(req, user.uid, false);
req.uid = parseInt(user.uid, 10);
req.loggedIn = req.uid > 0;
return true;
diff --git a/src/upgrades/3.8.3/remove-session-uuid.js b/src/upgrades/3.8.3/remove-session-uuid.js
new file mode 100644
index 0000000000..59a975fce2
--- /dev/null
+++ b/src/upgrades/3.8.3/remove-session-uuid.js
@@ -0,0 +1,21 @@
+'use strict';
+
+
+const db = require('../../database');
+const batch = require('../../batch');
+
+module.exports = {
+ name: 'Remove uid::sessionUUID:sessionId object',
+ timestamp: Date.UTC(2024, 5, 26),
+ method: async function () {
+ const { progress } = this;
+
+ await batch.processSortedSet('users:joindate', async (uids) => {
+ progress.incr(uids.length);
+ await db.deleteAll(uids.map(uid => `uid:${uid}:sessionUUID:sessionId`));
+ }, {
+ batch: 500,
+ progress: progress,
+ });
+ },
+};
diff --git a/src/user/auth.js b/src/user/auth.js
index 954d00a0c5..0adf589967 100644
--- a/src/user/auth.js
+++ b/src/user/auth.js
@@ -1,6 +1,5 @@
'use strict';
-const winston = require('winston');
const validator = require('validator');
const _ = require('lodash');
const db = require('../database');
@@ -77,56 +76,53 @@ module.exports = function (User) {
};
async function cleanExpiredSessions(uid) {
- const uuidMapping = await db.getObject(`uid:${uid}:sessionUUID:sessionId`);
- if (!uuidMapping) {
- return;
+ const sids = await db.getSortedSetRange(`uid:${uid}:sessions`, 0, -1);
+ if (!sids.length) {
+ return [];
}
- const expiredUUIDs = [];
+
const expiredSids = [];
- await Promise.all(Object.keys(uuidMapping).map(async (uuid) => {
- const sid = uuidMapping[uuid];
+ const activeSids = [];
+ await Promise.all(sids.map(async (sid) => {
const sessionObj = await db.sessionStoreGet(sid);
const expired = !sessionObj || !sessionObj.hasOwnProperty('passport') ||
!sessionObj.passport.hasOwnProperty('user') ||
parseInt(sessionObj.passport.user, 10) !== parseInt(uid, 10);
if (expired) {
- expiredUUIDs.push(uuid);
expiredSids.push(sid);
+ } else {
+ activeSids.push(sid);
}
}));
- await db.deleteObjectFields(`uid:${uid}:sessionUUID:sessionId`, expiredUUIDs);
+
await db.sortedSetRemove(`uid:${uid}:sessions`, expiredSids);
+ return activeSids;
}
- User.auth.addSession = async function (uid, sessionId, uuid) {
+ User.auth.addSession = async function (uid, sessionId) {
if (!(parseInt(uid, 10) > 0)) {
return;
}
- await cleanExpiredSessions(uid);
- await Promise.all([
- db.sortedSetAdd(`uid:${uid}:sessions`, Date.now(), sessionId),
- db.setObjectField(`uid:${uid}:sessionUUID:sessionId`, uuid, sessionId),
- ]);
- await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
+
+ const activeSids = await cleanExpiredSessions(uid);
+ await db.sortedSetAdd(`uid:${uid}:sessions`, Date.now(), sessionId);
+ await revokeSessionsAboveThreshold(activeSids.push(sessionId), uid);
};
- async function revokeSessionsAboveThreshold(uid, maxUserSessions) {
- const activeSessions = await db.getSortedSetRange(`uid:${uid}:sessions`, 0, -1);
- if (activeSessions.length > maxUserSessions) {
- const sessionsToRevoke = activeSessions.slice(0, activeSessions.length - maxUserSessions);
- await Promise.all(sessionsToRevoke.map(sessionId => User.auth.revokeSession(sessionId, uid)));
+ async function revokeSessionsAboveThreshold(activeSids, uid) {
+ if (meta.config.maxUserSessions > 0 && activeSids.length > meta.config.maxUserSessions) {
+ const sessionsToRevoke = activeSids.slice(0, activeSids.length - meta.config.maxUserSessions);
+ await User.auth.revokeSession(sessionsToRevoke, uid);
}
}
- User.auth.revokeSession = async function (sessionId, uid) {
- winston.verbose(`[user.auth] Revoking session ${sessionId} for user ${uid}`);
- const sessionObj = await db.sessionStoreGet(sessionId);
- if (sessionObj && sessionObj.meta && sessionObj.meta.uuid) {
- await db.deleteObjectField(`uid:${uid}:sessionUUID:sessionId`, sessionObj.meta.uuid);
- }
+ User.auth.revokeSession = async function (sessionIds, uid) {
+ sessionIds = Array.isArray(sessionIds) ? sessionIds : [sessionIds];
+ const destroySids = sids => Promise.all(sids.map(db.sessionStoreDestroy));
+
await Promise.all([
- db.sortedSetRemove(`uid:${uid}:sessions`, sessionId),
- db.sessionStoreDestroy(sessionId),
+ db.sortedSetRemove(`uid:${uid}:sessions`, sessionIds),
+ destroySids(sessionIds),
]);
};
@@ -137,7 +133,7 @@ module.exports = function (User) {
uids.forEach((uid, index) => {
const ids = sids[index].filter(id => id !== except);
if (ids.length) {
- promises.push(ids.map(s => User.auth.revokeSession(s, uid)));
+ promises.push(User.auth.revokeSession(ids, uid));
}
});
await Promise.all(promises);
@@ -146,11 +142,10 @@ module.exports = function (User) {
User.auth.deleteAllSessions = async function () {
await batch.processSortedSet('users:joindate', async (uids) => {
const sessionKeys = uids.map(uid => `uid:${uid}:sessions`);
- const sessionUUIDKeys = uids.map(uid => `uid:${uid}:sessionUUID:sessionId`);
const sids = _.flatten(await db.getSortedSetRange(sessionKeys, 0, -1));
await Promise.all([
- db.deleteAll(sessionKeys.concat(sessionUUIDKeys)),
+ db.deleteAll(sessionKeys),
...sids.map(sid => db.sessionStoreDestroy(sid)),
]);
}, { batch: 1000 });
diff --git a/src/user/delete.js b/src/user/delete.js
index c42d00294f..9329e5150a 100644
--- a/src/user/delete.js
+++ b/src/user/delete.js
@@ -121,7 +121,7 @@ module.exports = function (User) {
`uid:${uid}:chat:rooms:read`,
`uid:${uid}:upvote`, `uid:${uid}:downvote`,
`uid:${uid}:flag:pids`,
- `uid:${uid}:sessions`, `uid:${uid}:sessionUUID:sessionId`,
+ `uid:${uid}:sessions`,
`invitation:uid:${uid}`,
];
diff --git a/test/api.js b/test/api.js
index 7575456863..635ab538a3 100644
--- a/test/api.js
+++ b/test/api.js
@@ -571,8 +571,10 @@ describe('API', async () => {
const reloginPaths = ['GET /api/user/{userslug}/edit/email', 'PUT /users/{uid}/password', 'DELETE /users/{uid}/sessions/{uuid}'];
if (reloginPaths.includes(`${method.toUpperCase()} ${path}`)) {
({ jar } = await helpers.loginUser('admin', '123456'));
- const sessionUUIDs = await db.getObject('uid:1:sessionUUID:sessionId');
- mocks.delete['/users/{uid}/sessions/{uuid}'][1].example = Object.keys(sessionUUIDs).pop();
+ const sessionIds = await db.getSortedSetRange('uid:1:sessions', 0, -1);
+ const sessObj = await db.sessionStoreGet(sessionIds[0]);
+ const { uuid } = sessObj.meta;
+ mocks.delete['/users/{uid}/sessions/{uuid}'][1].example = uuid;
// Retrieve CSRF token using cookie, to test Write API
csrfToken = await helpers.getCsrfToken(jar);
diff --git a/test/authentication.js b/test/authentication.js
index 1dcbe176a8..193d617435 100644
--- a/test/authentication.js
+++ b/test/authentication.js
@@ -195,7 +195,7 @@ describe('authentication', () => {
});
assert(body);
assert.equal(body.username, username);
- const sessions = await db.getObject(`uid:${uid}:sessionUUID:sessionId`);
+ const sessions = await db.getSortedSetRange(`uid:${uid}:sessions`, 0, -1);
assert(sessions);
assert(Object.keys(sessions).length > 0);
});