From f065f3621530e852befdef3394e5a0c0bb84c1fb Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 6 Dec 2017 16:26:29 -0500 Subject: [PATCH 01/67] bump version number --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index fed7f7fc44..f84104ec22 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "1.7.1", + "version": "1.7.2", "homepage": "http://www.nodebb.org", "repository": { "type": "git", From faded26dea2238a2a199401ea917390115f24878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 6 Dec 2017 21:12:42 -0500 Subject: [PATCH 02/67] Revert "disallow underscore in slugs (#6133)" This reverts commit 4fc3115f335208a6188b46e686cf0f250442d264. --- public/src/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/utils.js b/public/src/utils.js index 37eb821c83..0e300d2772 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -336,8 +336,8 @@ return String(str).replace(new RegExp('<(\\/)?(' + (pattern || '[^\\s>]+') + ')(\\s+[^<>]*?)?\\s*(\\/)?>', 'gi'), ''); }, - invalidUnicodeChars: XRegExp('([^\\p{L}\\s\\d-]|_)', 'g'), - invalidLatinChars: /([^\w\s\d-]|_)/g, + invalidUnicodeChars: XRegExp('[^\\p{L}\\s\\d\\-_]', 'g'), + invalidLatinChars: /[^\w\s\d\-_]/g, trimRegex: /^\s+|\s+$/g, collapseWhitespace: /\s+/g, collapseDash: /-+/g, From 302e20d47d30542f0ae672806aa5f369bdea416b Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Thu, 7 Dec 2017 09:26:36 +0000 Subject: [PATCH 03/67] Latest translations and fallbacks --- public/language/ar/admin/menu.json | 56 +++++++++++++++--------------- public/language/bg/topic.json | 6 ++-- public/language/fa-IR/error.json | 2 +- public/language/fa-IR/topic.json | 6 ++-- public/language/fa-IR/user.json | 8 ++--- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/public/language/ar/admin/menu.json b/public/language/ar/admin/menu.json index 2b836ed0f7..07fe387d20 100644 --- a/public/language/ar/admin/menu.json +++ b/public/language/ar/admin/menu.json @@ -1,34 +1,34 @@ { - "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", - "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", - "general/social": "Social", + "section-general": "عام", + "general/dashboard": "اللوحة الرئيسية", + "general/homepage": "الصفحة الرئيسية", + "general/navigation": "التصفح", + "general/languages": "اللغات", + "general/sounds": "الأصوات", + "general/social": "شبكات التواصل", - "section-manage": "Manage", - "manage/categories": "Categories", - "manage/tags": "Tags", - "manage/users": "Users", - "manage/registration": "Registration Queue", - "manage/post-queue": "Post Queue", - "manage/groups": "Groups", - "manage/ip-blacklist": "IP Blacklist", + "section-manage": "إدارة", + "manage/categories": "الأقسام", + "manage/tags": "الكلمات المفتاحية", + "manage/users": "الأعضاء", + "manage/registration": "قائمة انتظار التسجيل", + "manage/post-queue": "قائمة انتظار المشاركة", + "manage/groups": "المجموعات", + "manage/ip-blacklist": "قائمة حظر عناوين IP", - "section-settings": "Settings", - "settings/general": "General", - "settings/reputation": "Reputation", - "settings/email": "Email", - "settings/user": "User", - "settings/group": "Group", - "settings/guest": "Guests", - "settings/uploads": "Uploads", - "settings/post": "Post", - "settings/chat": "Chat", - "settings/pagination": "Pagination", - "settings/tags": "Tags", - "settings/notifications": "Notifications", + "section-settings": "إعدادات", + "settings/general": "عامة", + "settings/reputation": "السمعة", + "settings/email": "البريد الإلكتروني", + "settings/user": "الأعضاء", + "settings/group": "المجموعات", + "settings/guest": "الزوار", + "settings/uploads": "الرفع", + "settings/post": "المشاركة", + "settings/chat": "الدردشة", + "settings/pagination": "ترقيم الصفحات", + "settings/tags": "الكلمات المفتاحية", + "settings/notifications": "التنبيهات", "settings/cookies": "Cookies", "settings/web-crawler": "Web Crawler", "settings/sockets": "Sockets", diff --git a/public/language/bg/topic.json b/public/language/bg/topic.json index 3e83e70b12..c09c9927d8 100644 --- a/public/language/bg/topic.json +++ b/public/language/bg/topic.json @@ -68,8 +68,8 @@ "thread_tools.restore_confirm": "Наистина ли искате да възстановите тази тема?", "thread_tools.purge": "Изчистване на темата", "thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?", - "thread_tools.merge_topics": "Merge Topics", - "thread_tools.merge": "Merge", + "thread_tools.merge_topics": "Сливане на темите", + "thread_tools.merge": "Сливане", "topic_move_success": "Темата беше преместена успешно в %1", "post_delete_confirm": "Наистина ли искате да изтриете тази публикация?", "post_restore_confirm": "Наистина ли искате да възстановите тази публикация?", @@ -91,7 +91,7 @@ "fork_pid_count": "Избрани публикации: %1", "fork_success": "Темата е разделена успешно! Натиснете тук, за да преминете към отделената тема.", "delete_posts_instruction": "Натиснете публикациите, които искате да изтриете/изчистите", - "merge_topics_instruction": "Click the topics you want to merge", + "merge_topics_instruction": "Натиснете темите, които искате да слеете", "composer.title_placeholder": "Въведете заглавието на темата си тук...", "composer.handle_placeholder": "Име", "composer.discard": "Отхвърляне", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 29b36ecae9..27ca06d761 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -135,5 +135,5 @@ "invalid-home-page-route": "مسیر صفحه اصلی نامعتبر است", "invalid-session": "عدم تطابق جلسه", "invalid-session-text": "به نظر می‌رسد این جلسه برای ورود دیگر فعال نیست و یا با سرور هماهنگ نیست. لطفا این صفحه را رفرش کنید.", - "no-topics-selected": "No topics selected!" + "no-topics-selected": "هیچ موضوعی انتخاب نشده است !" } \ No newline at end of file diff --git a/public/language/fa-IR/topic.json b/public/language/fa-IR/topic.json index 3102da6b99..7b618d3756 100644 --- a/public/language/fa-IR/topic.json +++ b/public/language/fa-IR/topic.json @@ -68,8 +68,8 @@ "thread_tools.restore_confirm": "آیا مطمئنید که می خواهید این موضوع را بازگردانی کنید؟", "thread_tools.purge": "پاک کردن موضوع", "thread_tools.purge_confirm": "آیا مطمئنید که میمید این موضوع را پاکسازی کنید؟", - "thread_tools.merge_topics": "Merge Topics", - "thread_tools.merge": "Merge", + "thread_tools.merge_topics": "ادغام تاپیک ها", + "thread_tools.merge": "ادغام", "topic_move_success": "جابه‌جایی این موضوع به %1 باموفقیت انجام شد.", "post_delete_confirm": "آیا از پاک کردن این پست اطمینان دارید؟", "post_restore_confirm": "آیا از بازگردانی این پست اطمینان دارید؟", @@ -91,7 +91,7 @@ "fork_pid_count": "%1 پست (ها) انتخاب شده اند", "fork_success": "موضوع با موفقیت منشعب شد! برای رفتن به موضوع انشعابی اینجا را کلیک کنید.", "delete_posts_instruction": "با کلیک بر روی پست شما می خواهید به حذف/پاکسازی", - "merge_topics_instruction": "Click the topics you want to merge", + "merge_topics_instruction": "بر روی عنوان تاپیک هایی که می خواهید ادغام کنید کلیک کنید", "composer.title_placeholder": "عنوان موضوعتان را اینجا بنویسید...", "composer.handle_placeholder": "نام", "composer.discard": "دور بیانداز", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index ae8014ee56..54cd114210 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -101,10 +101,10 @@ "outgoing-message-sound": "صدای پیام ارسال شده", "notification-sound": "آگاه‌سازی‌ از طریق صدا", "no-sound": "بدون صدا", - "upvote-notif-freq": "Upvote Notification Frequency", - "upvote-notif-freq.all": "All Upvotes", - "upvote-notif-freq.everyTen": "Every Ten Upvotes", - "upvote-notif-freq.logarithmic": "On 10, 100, 1000...", + "upvote-notif-freq": "تنظیمات اعلان امتیاز مثبت", + "upvote-notif-freq.all": "همه امتیاز های مثبت", + "upvote-notif-freq.everyTen": "هر ده امتیاز مثبت", + "upvote-notif-freq.logarithmic": "هر 10، 10، 1000 ...", "upvote-notif-freq.disabled": "Disabled", "browsing": "تنظیمات مرور", "open_links_in_new_tab": "پیوندهای به بیرون را در برگ جدید باز کن", From 8353d8b9bb34f8566d5edbe6ba2bd2d54dc617d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 7 Dec 2017 09:26:42 -0500 Subject: [PATCH 04/67] closes #6155 --- src/prestart.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prestart.js b/src/prestart.js index 9b592cf4af..bfe305fa20 100644 --- a/src/prestart.js +++ b/src/prestart.js @@ -11,7 +11,7 @@ var dirname = require('./cli/paths').baseDir; function setupWinston() { winston.remove(winston.transports.Console); winston.add(winston.transports.Console, { - colorize: true, + colorize: nconf.get('log-colorize') !== 'false', timestamp: function () { var date = new Date(); return nconf.get('json-logging') ? date.toJSON() : From a5f121d0a31226a6f07cf5d18bc817d78f24c2cd Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 7 Dec 2017 11:06:10 -0500 Subject: [PATCH 05/67] bump mentions, #6152 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f84104ec22..12caf1565f 100644 --- a/install/package.json +++ b/install/package.json @@ -63,7 +63,7 @@ "nodebb-plugin-dbsearch": "2.0.9", "nodebb-plugin-emoji": "2.0.7", "nodebb-plugin-emoji-android": "2.0.0", - "nodebb-plugin-markdown": "8.2.0", + "nodebb-plugin-markdown": "8.2.1", "nodebb-plugin-mentions": "2.2.2", "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.5.1", From 19ae8dc7e71e8c93e0aef47c975d5313db6017cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 7 Dec 2017 12:15:02 -0500 Subject: [PATCH 06/67] closes #6154 --- public/language/en-GB/admin/manage/users.json | 2 ++ public/src/admin/manage/users.js | 2 +- src/socket.io/admin/user.js | 6 +++- src/user/search.js | 31 ++++++------------- src/views/admin/manage/users.tpl | 3 ++ test/user.js | 11 +++++++ 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json index f1651a814b..5b68fcdc91 100644 --- a/public/language/en-GB/admin/manage/users.json +++ b/public/language/en-GB/admin/manage/users.json @@ -27,6 +27,8 @@ "pills.banned": "Banned", "pills.search": "User Search", + "search.uid": "By User ID", + "search.uid-placeholder": "Enter a user ID to search", "search.username": "By User Name", "search.username-placeholder": "Enter a username to search", "search.email": "By Email", diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 8c22a65720..b6c7b7aa03 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -306,7 +306,7 @@ define('admin/manage/users', ['translator', 'benchpress'], function (translator, var timeoutId = 0; - $('#search-user-name, #search-user-email, #search-user-ip').on('keyup', function () { + $('#search-user-uid, #search-user-name, #search-user-email, #search-user-ip').on('keyup', function () { if (timeoutId !== 0) { clearTimeout(timeoutId); timeoutId = 0; diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index 3fb4dfb9ff..d8d9a0f282 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -183,7 +183,11 @@ User.search = function (socket, data, callback) { var searchData; async.waterfall([ function (next) { - user.search({ query: data.query, searchBy: data.searchBy, uid: socket.uid }, next); + user.search({ + query: data.query, + searchBy: data.searchBy, + uid: socket.uid, + }, next); }, function (_searchData, next) { searchData = _searchData; diff --git a/src/user/search.js b/src/user/search.js index 37549232cd..198b027266 100644 --- a/src/user/search.js +++ b/src/user/search.js @@ -14,17 +14,19 @@ module.exports = function (User) { var uid = data.uid || 0; var paginate = data.hasOwnProperty('paginate') ? data.paginate : true; - if (searchBy === 'ip') { - return searchByIP(query, uid, callback); - } - var startTime = process.hrtime(); var searchResult = {}; async.waterfall([ function (next) { - var searchMethod = data.findUids || findUids; - searchMethod(query, searchBy, data.hardCap, next); + if (searchBy === 'ip') { + searchByIP(query, next); + } else if (searchBy === 'uid') { + next(null, [query]); + } else { + var searchMethod = data.findUids || findUids; + searchMethod(query, searchBy, data.hardCap, next); + } }, function (uids, next) { filterAndSortUids(uids, data, next); @@ -153,20 +155,7 @@ module.exports = function (User) { } } - function searchByIP(ip, uid, callback) { - var start = process.hrtime(); - async.waterfall([ - function (next) { - db.getSortedSetRevRange('ip:' + ip + ':uid', 0, -1, next); - }, - function (uids, next) { - User.getUsers(uids, uid, next); - }, - function (users, next) { - var diff = process.hrtime(start); - var timing = ((diff[0] * 1e3) + (diff[1] / 1e6)).toFixed(1); - next(null, { timing: timing, users: users }); - }, - ], callback); + function searchByIP(ip, callback) { + db.getSortedSetRevRange('ip:' + ip + ':uid', 0, -1, callback); } }; diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index bebded1a5e..3eca4f998d 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -49,6 +49,9 @@
-
- -
- -
- -
-
+
+ + +
+ +
+ + +
+
From e3ce817ab95d17aba5c98d7005aaf26eb3b0ea90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 11 Dec 2017 11:00:11 -0500 Subject: [PATCH 31/67] show settings in digest email closes #6160 --- src/user/digest.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/user/digest.js b/src/user/digest.js index 0ee46deba1..dba9c48f16 100644 --- a/src/user/digest.js +++ b/src/user/digest.js @@ -139,6 +139,7 @@ Digest.send = function (data, callback) { notifications: notifications, recent: data.topics, interval: data.interval, + showUnsubscribe: true, }, function (err) { if (err) { winston.error('[user/jobs] Could not send digest email', err); From ea83be50a1689327786e8ff32fb84a1f523a5e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 11 Dec 2017 11:21:22 -0500 Subject: [PATCH 32/67] closes #6161 --- src/search.js | 6 +++--- test/search.js | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/search.js b/src/search.js index 71f212632e..4d2560e6cf 100644 --- a/src/search.js +++ b/src/search.js @@ -209,7 +209,7 @@ function getMatchedPosts(pids, data, callback) { db.getObjectsFields(cids, categoryFields, next); }, tags: function (next) { - if (data.hasTags && data.hasTags.length) { + if (Array.isArray(data.hasTags) && data.hasTags.length) { var tids = posts.map(function (post) { return post && post.tid; }); @@ -299,10 +299,10 @@ function filterByTimerange(posts, timeRange, timeFilter) { } function filterByTags(posts, hasTags) { - if (hasTags && hasTags.length) { + if (Array.isArray(hasTags) && hasTags.length) { posts = posts.filter(function (post) { var hasAllTags = false; - if (post && post.topic && post.topic.tags && post.topic.tags.length) { + if (post && post.topic && Array.isArray(post.topic.tags) && post.topic.tags.length) { hasAllTags = hasTags.every(function (tag) { return post.topic.tags.indexOf(tag) !== -1; }); diff --git a/test/search.js b/test/search.js index 119f833a80..9610b3b0c2 100644 --- a/test/search.js +++ b/test/search.js @@ -165,4 +165,15 @@ describe('Search', function () { done(); }); }); + + it('should not crash if tags is not an array', function (done) { + search.search({ + query: 'mongodb', + searchIn: 'titles', + hasTags: 'nodebb,javascript', + }, function (err, data) { + assert.ifError(err); + done(); + }); + }); }); From 53afa552d03cf0090d24f967ae5114779851af25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 11 Dec 2017 11:40:42 -0500 Subject: [PATCH 33/67] closes #6162 --- src/controllers/authentication.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index c6b418ff9b..b2d46dcd70 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -57,6 +57,10 @@ authenticationController.register = function (req, res) { user.isPasswordValid(userData.password, next); }, function (next) { + res.locals.processLogin = true; // set it to false in plugin if you wish to just register only + plugins.fireHook('filter:register.check', { req: req, res: res, userData: userData }, next); + }, + function (result, next) { registerAndLoginUser(req, res, userData, next); }, ], function (err, data) { @@ -100,8 +104,7 @@ function registerAndLoginUser(req, res, userData, callback) { user.shouldQueueUser(req.ip, next); }, function (queue, next) { - res.locals.processLogin = true; // set it to false in plugin if you wish to just register only - plugins.fireHook('filter:register.check', { req: req, res: res, userData: userData, queue: queue }, next); + plugins.fireHook('filter:register.shouldQueue', { req: req, res: res, userData: userData, queue: queue }, next); }, function (data, next) { if (data.queue) { From b55087dab7df8f0a00b2e98a80b62cc6b13c16a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 13 Dec 2017 12:06:45 -0500 Subject: [PATCH 34/67] closes #6166 --- src/plugins/hooks.js | 31 +++++++++++++++++-------------- test/plugins.js | 14 ++++++++++++++ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/plugins/hooks.js b/src/plugins/hooks.js index 71b91beeef..020ea4e024 100644 --- a/src/plugins/hooks.js +++ b/src/plugins/hooks.js @@ -82,20 +82,23 @@ module.exports = function (Plugins) { var hookList = Plugins.loadedHooks[hook]; var hookType = hook.split(':')[0]; - - switch (hookType) { - case 'filter': - fireFilterHook(hook, hookList, params, callback); - break; - case 'action': - fireActionHook(hook, hookList, params, callback); - break; - case 'static': - fireStaticHook(hook, hookList, params, callback); - break; - default: - winston.warn('[plugins] Unknown hookType: ' + hookType + ', hook : ' + hook); - break; + try { + switch (hookType) { + case 'filter': + fireFilterHook(hook, hookList, params, callback); + break; + case 'action': + fireActionHook(hook, hookList, params, callback); + break; + case 'static': + fireStaticHook(hook, hookList, params, callback); + break; + default: + winston.warn('[plugins] Unknown hookType: ' + hookType + ', hook : ' + hook); + break; + } + } catch (err) { + callback(err); } }; diff --git a/test/plugins.js b/test/plugins.js index e948cbb160..dd6654cbef 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -70,6 +70,20 @@ describe('Plugins', function () { }); }); + it('should not crash if there is an exception in a hook', function (done) { + function filterMethod(data, callback) { + var crash; + crash.a = 5; + callback(null, data); + } + + + assert(err); + assert.equal(err.message, 'Cannot set property \'a\' of undefined'); + done(); + }); + }); + it('should get plugin data from nbbpm', function (done) { plugins.get('nodebb-plugin-markdown', function (err, data) { assert.ifError(err); From b778c8433a2b58b1796c49d9ed24804302e48d8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 13 Dec 2017 12:06:52 -0500 Subject: [PATCH 35/67] change hook name --- test/plugins.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/plugins.js b/test/plugins.js index dd6654cbef..47f3969a40 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -77,7 +77,9 @@ describe('Plugins', function () { callback(null, data); } + plugins.registerHook('test-plugin-crash', { hook: 'filter:test.crashHook', method: filterMethod }); + plugins.fireHook('filter:test.crashHook', { foo: 1 }, function (err, data) { assert(err); assert.equal(err.message, 'Cannot set property \'a\' of undefined'); done(); From 691fc2c6fd9932d2bef6b9998900247de324e142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 14 Dec 2017 08:47:33 -0500 Subject: [PATCH 36/67] closes #5812 --- src/meta/tags.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/meta/tags.js b/src/meta/tags.js index e5a6a10c9c..babd1d5f9d 100644 --- a/src/meta/tags.js +++ b/src/meta/tags.js @@ -1,12 +1,12 @@ 'use strict'; var nconf = require('nconf'); -var validator = require('validator'); var async = require('async'); var winston = require('winston'); var plugins = require('../plugins'); var Meta = require('../meta'); +var utils = require('../utils'); var Tags = module.exports; @@ -66,7 +66,7 @@ Tags.parse = function (req, data, meta, link, callback) { defaultLinks.push({ rel: 'search', type: 'application/opensearchdescription+xml', - title: validator.escape(String(Meta.config.title || Meta.config.browserTitle || 'NodeBB')), + title: utils.escapeHTML(String(Meta.config.title || Meta.config.browserTitle || 'NodeBB')), href: nconf.get('relative_path') + '/osd.xml', }); } @@ -116,7 +116,7 @@ Tags.parse = function (req, data, meta, link, callback) { } if (!tag.noEscape) { - tag.content = validator.escape(String(tag.content)); + tag.content = utils.escapeHTML(String(tag.content)); } return tag; @@ -159,7 +159,7 @@ function addIfNotExists(meta, keyName, tagName, value) { if (!exists && value) { var data = { - content: validator.escape(String(value)), + content: utils.escapeHTML(String(value)), }; data[keyName] = tagName; meta.push(data); From 76e8bcd80be1586e8adae649b4342ddf407d4d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 14 Dec 2017 08:54:33 -0500 Subject: [PATCH 37/67] closes #6167 --- public/src/ajaxify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 35c30ab1a1..745e682be5 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -109,7 +109,7 @@ $(document).ready(function () { url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')).toLowerCase(); var isClientToAdmin = url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') !== 0; var isAdminToClient = !url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') === 0; - var uploadsOrApi = url.startsWith('assets/uploads') || url.startsWith('uploads') || url.startsWith('api'); + var uploadsOrApi = url.startsWith('assets/') || url.startsWith('assets/uploads') || url.startsWith('uploads') || url.startsWith('api'); if (isClientToAdmin || isAdminToClient || uploadsOrApi) { window.open(RELATIVE_PATH + '/' + url, '_top'); From 1f10549cf5e1b6ab653d427468b8f57109e96b00 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 14 Dec 2017 10:18:51 -0500 Subject: [PATCH 38/67] added new user method isPrivilegedOrSelf --- src/user.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/user.js b/src/user.js index 2ad441c5ce..6661dca8a7 100644 --- a/src/user.js +++ b/src/user.js @@ -239,6 +239,10 @@ User.isAdminOrGlobalModOrSelf = function (callerUid, uid, callback) { isSelfOrMethod(callerUid, uid, User.isAdminOrGlobalMod, callback); }; +User.isPrivilegedOrSelf = function (callerUid, uid, callback) { + isSelfOrMethod(callerUid, uid, User.isPrivileged, callback); +}; + function isSelfOrMethod(callerUid, uid, method, callback) { if (parseInt(callerUid, 10) === parseInt(uid, 10)) { return callback(); From 2bb8227574e0af7be411a680d304fd6cb1ba9857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 14 Dec 2017 10:53:01 -0500 Subject: [PATCH 39/67] closes #6168 --- src/cli/upgrade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/upgrade.js b/src/cli/upgrade.js index 179970192b..026a104c30 100644 --- a/src/cli/upgrade.js +++ b/src/cli/upgrade.js @@ -81,7 +81,7 @@ function runSteps(tasks) { function runUpgrade(upgrades, options) { console.log('\nUpdating NodeBB...'.cyan); - + options = options || {}; // disable mongo timeouts during upgrade nconf.set('mongo:options:socketTimeoutMS', 0); From 802ec0e384c963fafdbf0b6a98f5cf81da21dd10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 14 Dec 2017 11:27:18 -0500 Subject: [PATCH 40/67] remove reduntant code --- public/src/ajaxify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 745e682be5..39cbb48c48 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -109,7 +109,7 @@ $(document).ready(function () { url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')).toLowerCase(); var isClientToAdmin = url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') !== 0; var isAdminToClient = !url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') === 0; - var uploadsOrApi = url.startsWith('assets/') || url.startsWith('assets/uploads') || url.startsWith('uploads') || url.startsWith('api'); + var uploadsOrApi = url.startsWith('assets/') || url.startsWith('uploads') || url.startsWith('api'); if (isClientToAdmin || isAdminToClient || uploadsOrApi) { window.open(RELATIVE_PATH + '/' + url, '_top'); From e453057accb4b09c1ae9d38162e345fe9981dc73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 14 Dec 2017 13:55:47 -0500 Subject: [PATCH 41/67] add settings-menu id --- src/views/admin/partials/menu.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index afe3b27af1..9fd4742c3c 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -197,7 +197,7 @@