Compare commits

...

32 Commits

Author SHA1 Message Date
Julian Lam
98be042012 fix: broken flag history on flag update 2022-09-23 13:15:11 -04:00
Barış Soner Uşaklı
175d53421b feat: store topic title and tags in diffs (#10900)
* feat: store topic title and tags in diffs

allow restoring post diff if tags didn't change

* test: fix tests, fast computer problems
2022-09-20 10:08:28 -04:00
Barış Soner Uşaklı
a06c05c224 chore: up version, closes #10812 2022-08-16 15:55:42 -04:00
Barış Soner Uşaklı
9fffce8741 chore: update composer-default 2022-08-10 09:57:04 -04:00
Barış Soner Uşaklı
1e541de7db fix: don't crash if req.body.username is not string
Error: req.body.username.trim is not a function
File: authenticationController.login (/usr/src/app/src/controllers/authentication.js:247:40)
2022-08-05 08:19:44 -04:00
Barış Soner Uşaklı
b2bbc207a9 fix: don't crash if target/user is undefined
Error: TypeError: Cannot read properties of undefined (reading 'displayname')
File: Flags.notify (/usr/src/app/src/flags.js:812:89)
2022-08-05 08:19:37 -04:00
Barış Soner Uşaklı
5061bf36c0 Merge branch 'v1.19.x' of https://github.com/NodeBB/NodeBB into v1.19.x 2022-06-19 15:15:28 -04:00
Barış Soner Uşaklı
37c1fa17a9 fix: remove ev, hooks don't pass event, closes #10611 2022-06-19 15:15:00 -04:00
Julian Lam
fdf8cf5842 chore: fix version number in package.json 2022-06-17 11:18:50 -04:00
Misty Release Bot
28c820a9ab chore(i18n): fallback strings for new resources: nodebb.admin-settings-advanced 2022-06-17 09:44:51 -04:00
Barış Soner Uşaklı
9bcd66e52e feat: cross origin opener policy options (#10710) 2022-06-17 09:44:44 -04:00
Barış Soner Uşaklı
81e3c1ba48 fix: get rid of math.random in generateUUID 2022-05-26 12:25:49 -04:00
Misty Release Bot
e0080d9005 chore: incrementing version number - v1.19.7
(cherry picked from commit 0c4850e287)
Signed-off-by: Misty Release Bot <deploy@nodebb.org>
2022-04-28 13:40:05 +00:00
Misty Release Bot
addd701de2 Merge commit '0d9179f7a1423af1934099a6e4bc6d6990bee9c1' into v1.19.x 2022-04-28 13:39:59 +00:00
Misty Release Bot
24ba3e84cb chore: incrementing version number - v1.19.6
(cherry picked from commit 283a0072a8)
Signed-off-by: Misty Release Bot <deploy@nodebb.org>
2022-04-13 21:25:10 +00:00
Misty Release Bot
70a0135209 Merge commit '5316029f91308f225de65444e59f1fe846c07525' into v1.19.x 2022-04-13 21:25:05 +00:00
Misty (Bot)
a3ae8c48ce chore: incrementing version number - v1.19.5
(cherry picked from commit 48d6eb4f14)
Signed-off-by: Misty (Bot) <deploy@nodebb.org>
2022-03-16 17:05:48 -04:00
Misty (Bot)
e5ca0232de Merge commit '3935a86b839005fdf3054e6f5a953092a617ddeb' into v1.19.x 2022-03-16 17:05:45 -04:00
Misty (Bot)
8d5ef17248 chore: incrementing version number - v1.19.4
(cherry picked from commit 67282057e7)
Signed-off-by: Misty (Bot) <deploy@nodebb.org>
2022-03-09 15:51:43 -05:00
Misty (Bot)
40ce9af189 Merge commit 'df46ab4874fe698d25cf26a0641aa832dad9379d' into v1.19.x 2022-03-09 15:51:28 -05:00
Barış Soner Uşaklı
e4bd4f3107 feat: backport filter:posts.getUserInfoForPosts 2022-03-09 15:07:36 -05:00
Renovate Bot
4a87b3225c fix(deps): update dependency nodebb-plugin-markdown to v9.0.10 2022-03-07 13:22:31 -05:00
renovate[bot]
673fcfb052 fix(deps): update dependency nodebb-plugin-mentions to v3.0.6 (#10328)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-23 15:37:18 -05:00
Julian Lam
3f13a69298 Re-introduce lodash into src/package-install.js (#10315)
* test: add failing test for if package.json is non-existant, fix tests' beforeEach method

* Revert "fix: #10289, remove lodash dependency in src/cli/package-install.js"

This reverts commit 81fa2e22bc.

* fix: regression caused by 94b79ce402

`./nodebb setup` was no longer able to be called without arguments or env vars

* fix: .updatePackageFile() throwing if no package.json

* fix: removing unneeded code in src/cli/index.js that seemed to be used to handle cases where package.json was missing (initial install)

... However, as .updatePackageFile() now handled cases where there is no package.json, it should be ok to remove this code

* fix: handle missing package.json or node_modules/
2022-02-18 10:13:11 -05:00
Julian Lam
b60174f51e fix: regression caused by 94b79ce402
`./nodebb setup` was no longer able to be called without arguments or env vars
2022-02-18 10:12:59 -05:00
Misty (Bot)
7388f111b7 chore: incrementing version number - v1.19.3 2022-02-16 19:20:39 +00:00
Misty (Bot)
4bd559deba Merge commit 'e9e48a756fad301e8a6729d3e74852a644228724' into v1.19.x 2022-02-16 19:20:36 +00:00
Misty (Bot)
ded19254ac chore: incrementing version number - v1.19.2 2022-02-09 21:28:32 +00:00
Misty (Bot)
5c89557155 Merge commit '8e52abe8bed8706d2f75dce4f118490e48c6fab8' into v1.19.x 2022-02-09 21:28:11 +00:00
Misty (Bot)
04ce24e661 chore: incrementing version number - v1.19.1 2022-01-21 18:20:49 +00:00
Misty (Bot)
a24a108a66 Merge commit 'd098e26f82096188a8ef910561c5ebc7a784a399' into v1.19.x 2022-01-21 18:18:46 +00:00
Misty (Bot)
aa77758afd chore: incrementing version number - v1.19.0 2022-01-13 18:51:21 +00:00
62 changed files with 152 additions and 51 deletions

View File

@@ -153,6 +153,7 @@
"digestHour": 17,
"passwordExpiryDays": 0,
"cross-origin-embedder-policy": 0,
"cross-origin-opener-policy": "same-origin",
"cross-origin-resource-policy": "same-origin",
"hsts-maxage": 31536000,
"hsts-subdomains": 0,

View File

@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "1.19.6",
"version": "1.19.10",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
@@ -86,7 +86,7 @@
"@nodebb/bootswatch": "3.4.2",
"nconf": "0.12.0",
"nodebb-plugin-2factor": "3.0.7",
"nodebb-plugin-composer-default": "7.0.22",
"nodebb-plugin-composer-default": "7.0.23",
"nodebb-plugin-dbsearch": "5.1.3",
"nodebb-plugin-emoji": "3.5.17",
"nodebb-plugin-emoji-android": "2.0.5",
@@ -184,4 +184,4 @@
"url": "https://github.com/barisusakli"
}
]
}
}

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Когато е включено (по подразбиране), стойността на заглавката ще бъде <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Стриктна транспортна сигурност",
"hsts.enabled": "Включване на HSTS (препоръчително)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Přísné zabezpečení přenosu",
"hsts.enabled": "Povolit HSTS (doporučeno)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "HSTS Aktivieren (empfohlen)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Seguridad estricta del transporte",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "\nAccess-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Lorsqu'il est activé (par défaut), définira l'en-tête sur <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Activer HSTS (recommandé)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Szigorú HTTP biztonság (HSTS)",
"hsts.enabled": "Szigorú HTTP biztonság (HSTS) bekapcsolása (ajánlott)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Se abilitato (impostazione predefinita), imposterà l'intestazione su <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Rigorosa sicurezza trasporto",
"hsts.enabled": "Abilita HSTS (consigliato)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "アクセス-制御-有効-ヘッダー",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "HSTS 활성화 (권장)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "HTTP Strict Transport Security (HSTS)",
"hsts.enabled": "Iespējots HSTS (ieteicams)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Kontrola-Dostępu-Zezwól-Nagłówki",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Włączony HSTS (zalecane)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Habilitar HSTS (recomendado)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Строгая политика безопасности транспортного уровня",
"hsts.enabled": "Включить HSTS (рекомендуется)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Prísne zabezpečenie prenosu",
"hsts.enabled": "Povoliť HSTS (odporúčané)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Omogočen HSTS (priporočeno)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Erişim-Kontrolü-Başlık-İzni",
"headers.coep": "Cross-Origin-Embed Politikası",
"headers.coep-help": "Etkinleştirildiğinde (varsayılan), başlığı <code>require-corp</code> olarak ayarlayacaktır.",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin Kaynak Politikası",
"hsts": "STS",
"hsts.enabled": "HSTS'yi etkinleştir (önerilir)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Khi được bật (mặc định), sẽ đặt tiêu đề thành <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Bảo Vệ Truyền Tải Nghiêm Ngặt",
"hsts.enabled": "Đã bật HSTS (đề nghị)",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "严格安全传输HSTS",
"hsts.enabled": "启用HSTS推荐",

View File

@@ -17,6 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "嚴格安全傳輸",
"hsts.enabled": "啟用HSTS推薦",

View File

@@ -7,7 +7,7 @@ define('admin/settings/api', ['settings', 'alerts', 'hooks'], function (settings
settings.load('core.api', $('.core-api-settings'));
$('#save').on('click', saveSettings);
hooks.on('action:settings.sorted-list.itemLoaded', (ev, { element }) => {
hooks.on('action:settings.sorted-list.itemLoaded', ({ element }) => {
element.addEventListener('click', (ev) => {
if (ev.target.closest('input[readonly]')) {
// Select entire input text

View File

@@ -26,7 +26,7 @@ define('forum/flags/detail', [
return memo;
}, {});
api.put(`/flags/${ajaxify.data.flagId}`, data).then((history) => {
api.put(`/flags/${ajaxify.data.flagId}`, data).then(({ history }) => {
alerts.success('[[flags:updated]]');
Detail.reloadHistory(history);
}).catch(alerts.error);

View File

@@ -158,7 +158,7 @@ define('forum/topic/events', [
hooks.fire('action:posts.edited', data);
}
if (data.topic.tags && tagsUpdated(data.topic.tags)) {
if (data.topic.tags && data.topic.tagsupdated) {
Benchpress.render('partials/topic/tags', { tags: data.topic.tags }).then(function (html) {
const tags = $('.tags');
@@ -171,19 +171,6 @@ define('forum/topic/events', [
postTools.removeMenu(components.get('post', 'pid', data.post.pid));
}
function tagsUpdated(tags) {
if (tags.length !== $('.tags').first().children().length) {
return true;
}
for (let i = 0; i < tags.length; i += 1) {
if (!$('.tags .tag-item[data-tag="' + tags[i].value + '"]').length) {
return true;
}
}
return false;
}
function onPostPurged(postData) {
if (!postData || parseInt(postData.tid, 10) !== parseInt(ajaxify.data.tid, 10)) {
return;

View File

@@ -290,13 +290,11 @@
const utils = {
generateUUID: function () {
/* eslint-disable no-bitwise */
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : ((r & 0x3) | 0x8);
return v.toString(16);
});
/* eslint-enable no-bitwise */
// from https://github.com/tracker1/node-uuid4/blob/master/browser.js
const temp_url = URL.createObjectURL(new Blob());
const uuid = temp_url.toString();
URL.revokeObjectURL(temp_url);
return uuid.split(/[:\/]/g).pop().toLowerCase(); // remove prefixes
},
// https://github.com/substack/node-ent/blob/master/index.js
decodeHTMLEntities: function (html) {

View File

@@ -244,7 +244,7 @@ authenticationController.login = async (req, res, next) => {
}
const loginWith = meta.config.allowLoginWith || 'username-email';
req.body.username = req.body.username.trim();
req.body.username = String(req.body.username).trim();
const errorHandler = res.locals.noScriptErrors || helpers.noScriptErrors;
try {
await plugins.hooks.fire('filter:login.check', { req: req, res: res, userData: req.body });

View File

@@ -807,9 +807,10 @@ Flags.notify = async function (flagObj, uid, notifySelf = false) {
});
uids = uids.concat(modUids[0]);
} else if (flagObj.type === 'user') {
const targetDisplayname = flagObj.target && flagObj.target.user ? flagObj.target.user.displayname : '[[global:guest]]';
notifObj = await notifications.create({
type: 'new-user-flag',
bodyShort: `[[notifications:user_flagged_user, ${displayname}, ${flagObj.target.user.displayname}]]`,
bodyShort: `[[notifications:user_flagged_user, ${displayname}, ${targetDisplayname}]]`,
bodyLong: await plugins.hooks.fire('filter:parse.raw', String(flagObj.description || '')),
path: `/flags/${flagObj.flagId}`,
nid: `flag:user:${flagObj.targetId}`,

View File

@@ -7,7 +7,7 @@ const db = require('../database');
const meta = require('../meta');
const plugins = require('../plugins');
const translator = require('../translator');
const topics = require('../topics');
module.exports = function (Posts) {
const Diffs = {};
@@ -38,16 +38,24 @@ module.exports = function (Posts) {
};
Diffs.save = async function (data) {
const { pid, uid, oldContent, newContent, edited } = data;
const { pid, uid, oldContent, newContent, edited, topic } = data;
const editTimestamp = edited || Date.now();
const patch = diff.createPatch('', newContent, oldContent);
const diffData = {
uid: uid,
pid: pid,
};
if (oldContent !== newContent) {
diffData.patch = diff.createPatch('', newContent, oldContent);
}
if (topic.renamed) {
diffData.title = topic.oldTitle;
}
if (topic.tagsupdated && Array.isArray(topic.oldTags)) {
diffData.tags = topic.oldTags.map(tag => tag && tag.value).filter(Boolean).join(',');
}
await Promise.all([
db.listPrepend(`post:${pid}:diffs`, editTimestamp),
db.setObject(`diff:${pid}.${editTimestamp}`, {
uid: uid,
pid: pid,
patch: patch,
}),
db.setObject(`diff:${pid}.${editTimestamp}`, diffData),
]);
};
@@ -71,6 +79,8 @@ module.exports = function (Posts) {
content: post.content,
req: req,
timestamp: since,
title: post.topic.title,
tags: post.topic.tags.map(tag => tag.value),
});
};
@@ -130,6 +140,16 @@ module.exports = function (Posts) {
// Replace content with re-constructed content from that point in time
post[0].content = diffs.reduce(applyPatch, validator.unescape(post[0].content));
const titleDiffs = diffs.filter(d => d.hasOwnProperty('title') && d.title);
if (titleDiffs.length && post[0].topic) {
post[0].topic.title = validator.unescape(String(titleDiffs[titleDiffs.length - 1].title));
}
const tagDiffs = diffs.filter(d => d.hasOwnProperty('tags') && d.tags);
if (tagDiffs.length && post[0].topic) {
const tags = tagDiffs[tagDiffs.length - 1].tags.split(',').map(tag => ({ value: tag }));
post[0].topic.tags = await topics.getTagData(tags);
}
return post[0];
}
@@ -144,9 +164,12 @@ module.exports = function (Posts) {
}
function applyPatch(content, aDiff) {
const result = diff.applyPatch(content, aDiff.patch, {
fuzzFactor: 1,
});
return typeof result === 'string' ? result : content;
if (aDiff && aDiff.patch) {
const result = diff.applyPatch(content, aDiff.patch, {
fuzzFactor: 1,
});
return typeof result === 'string' ? result : content;
}
return content;
}
};

View File

@@ -29,7 +29,9 @@ module.exports = function (Posts) {
throw new Error('[[error:no-post]]');
}
const topicData = await topics.getTopicFields(postData.tid, ['cid', 'mainPid', 'title', 'timestamp', 'scheduled', 'slug']);
const topicData = await topics.getTopicFields(postData.tid, [
'cid', 'mainPid', 'title', 'timestamp', 'scheduled', 'slug', 'tags',
]);
await scheduledTopicCheck(data, topicData);
@@ -53,7 +55,10 @@ module.exports = function (Posts) {
]);
await Posts.setPostFields(data.pid, result.post);
const contentChanged = data.content !== oldContent;
const contentChanged = data.content !== oldContent ||
topic.renamed ||
topic.tagsupdated;
if (meta.config.enablePostHistory === 1 && contentChanged) {
await Posts.diffs.save({
pid: data.pid,
@@ -61,6 +66,7 @@ module.exports = function (Posts) {
oldContent: oldContent,
newContent: data.content,
edited: editPostData.edited,
topic,
});
}
await Posts.uploads.sync(data.pid);
@@ -109,6 +115,7 @@ module.exports = function (Posts) {
title: validator.escape(String(topicData.title)),
isMainPost: false,
renamed: false,
tagsupdated: false,
};
}
@@ -124,15 +131,16 @@ module.exports = function (Posts) {
newTopicData.slug = `${tid}/${slugify(title) || 'topic'}`;
}
data.tags = data.tags || [];
const tagsupdated = Array.isArray(data.tags) &&
!_.isEqual(data.tags, topicData.tags.map(tag => tag.value));
if (data.tags.length) {
if (tagsupdated) {
const canTag = await privileges.categories.can('topics:tag', topicData.cid, data.uid);
if (!canTag) {
throw new Error('[[error:no-privileges]]');
}
await topics.validateTags(data.tags, topicData.cid, data.uid, tid);
}
await topics.validateTags(data.tags, topicData.cid, data.uid, tid);
const results = await plugins.hooks.fire('filter:topic.edit', {
req: data.req,
@@ -140,7 +148,9 @@ module.exports = function (Posts) {
data: data,
});
await db.setObject(`topic:${tid}`, results.topic);
await topics.updateTopicTags(tid, data.tags);
if (tagsupdated) {
await topics.updateTopicTags(tid, data.tags);
}
const tags = await topics.getTopicTagsObjects(tid);
if (rescheduling(data, topicData)) {
@@ -149,7 +159,7 @@ module.exports = function (Posts) {
newTopicData.tags = data.tags;
newTopicData.oldTitle = topicData.title;
const renamed = translator.escape(validator.escape(String(title))) !== topicData.title;
const renamed = title && translator.escape(validator.escape(String(title))) !== topicData.title;
plugins.hooks.fire('action:topic.edit', { topic: newTopicData, uid: data.uid });
return {
tid: tid,
@@ -160,8 +170,10 @@ module.exports = function (Posts) {
slug: newTopicData.slug || topicData.slug,
isMainPost: true,
renamed: renamed,
rescheduled: rescheduling(data, topicData),
tagsupdated: tagsupdated,
tags: tags,
oldTags: topicData.tags,
rescheduled: rescheduling(data, topicData),
};
}

View File

@@ -76,9 +76,15 @@ module.exports = function (Posts) {
}
async function getTopicAndCategories(tids) {
const topicsData = await topics.getTopicsFields(tids, ['uid', 'tid', 'title', 'cid', 'slug', 'deleted', 'scheduled', 'postcount', 'mainPid', 'teaserPid']);
const topicsData = await topics.getTopicsFields(tids, [
'uid', 'tid', 'title', 'cid', 'tags', 'slug',
'deleted', 'scheduled', 'postcount', 'mainPid', 'teaserPid',
]);
const cids = _.uniq(topicsData.map(topic => topic && topic.cid));
const categoriesData = await categories.getCategoriesFields(cids, ['cid', 'name', 'icon', 'slug', 'parentCid', 'bgColor', 'color', 'backgroundImage', 'imageClass']);
const categoriesData = await categories.getCategoriesFields(cids, [
'cid', 'name', 'icon', 'slug', 'parentCid',
'bgColor', 'color', 'backgroundImage', 'imageClass',
]);
return { topics: topicsData, categories: categoriesData };
}

View File

@@ -1,3 +1,17 @@
'use strict';
const crypto = require('crypto');
module.exports = require('../public/src/utils');
module.exports.generateUUID = function () {
// from https://github.com/tracker1/node-uuid4/blob/master/index.js
let rnd = crypto.randomBytes(16);
/* eslint-disable no-bitwise */
rnd[6] = (rnd[6] & 0x0f) | 0x40;
rnd[8] = (rnd[8] & 0x3f) | 0x80;
/* eslint-enable no-bitwise */
rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/);
rnd.shift();
return rnd.join('-');
};

View File

@@ -73,6 +73,15 @@
</label>
</div>
<p class="help-block">[[admin/settings/advanced:headers.coep-help]]</p>
<div class="form-group">
<label for="cross-origin-resource-policy">[[admin/settings/advanced:headers.coop]]</label>
<select class="form-control" id="cross-origin-opener-policy" data-field="cross-origin-opener-policy">
<option value="same-origin">same-origin</option>
<option value="same-origin-allow-popups">same-origin-allow-popups</option>
<option value="unsafe-none">unsafe-none</option>
</select>
</div>
<div class="form-group">
<label for="cross-origin-resource-policy">[[admin/settings/advanced:headers.corp]]</label>
<select class="form-control" id="cross-origin-resource-policy" data-field="cross-origin-resource-policy">

View File

@@ -193,7 +193,7 @@ function setupHelmet(app) {
if (meta.config['cross-origin-embedder-policy']) {
app.use(helmet.crossOriginEmbedderPolicy());
}
app.use(helmet.crossOriginOpenerPolicy());
app.use(helmet.crossOriginOpenerPolicy({ policy: meta.config['cross-origin-opener-policy'] }));
app.use(helmet.crossOriginResourcePolicy({ policy: meta.config['cross-origin-resource-policy'] }));
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());

View File

@@ -191,8 +191,11 @@ describe('API', async () => {
const socketAdmin = require('../src/socket.io/admin');
// export data for admin user
await socketUser.exportProfile({ uid: adminUid }, { uid: adminUid });
await wait(2000);
await socketUser.exportPosts({ uid: adminUid }, { uid: adminUid });
await wait(2000);
await socketUser.exportUploads({ uid: adminUid }, { uid: adminUid });
await wait(2000);
await socketAdmin.user.exportUsersCSV({ uid: adminUid }, {});
// wait for export child process to complete
await wait(5000);

View File

@@ -425,6 +425,7 @@ describe('Post\'s', () => {
cid: cid,
title: 'topic to edit',
content: 'A post to edit',
tags: ['nodebb'],
}, (err, data) => {
assert.ifError(err);
pid = data.postData.pid;