* feat: allow passwords longer than 73 characters
Context: A bcrypt/blowfish limitation means that password length is capped at 72 characters. We can get around this without compromising on security
by hashing all incoming passwords with SHA512, and then sending that to bcrypt.
https://dropbox.tech/security/how-dropbox-securely-stores-your-passwords
* feat: add additional test for passwords > 73 chars
* fix: remove 'password-too-long' error message and all invocations
* test: added test to show that a super long password won't bring down NodeBB
* fix: remove debug log
* Revert "fix: remove 'password-too-long' error message and all invocations"
This reverts commit 1e312bf7ef.
* fix: added back password length checks, but at 512 chars
As processing a large string still uses a lot of memory
* feat: use github actions for ci
- test using minimum supported db versions
- ESLint will make review comments on PRs
- formatted configs
* mess up eslint
* fix: lint maybe
Co-authored-by: Barış Soner Uşaklı <baris@nodebb.org>
If the post template contains references to items outside of the scope of the post, then when the post is loaded via IS, the expected values are empty.
This was due to createNewPosts calling app.parseAndTranslate with a subset of the page payload. This works fine in Persona (and most other themes)
because they do not refer to properties outside of the post object, but it may be helpful to include the rest of the ajaxify data as well.
@baris Also, I am now allowing the following properties to be saved in User.saveSettings:
- categoryTopicSort
- topicPostSort
- setCategorySort
- setTopicSort
This is a breaking change if your install uses multiple URLs to access. You will need to update the Access-Control-Allow-Origin header in ACP > Advanced > Headers to supply all URLs you use to access your site
* feat: updating logo assets, square logos missing still
* fix: squared logo for touch icon and notification fallback
* fix: update link to favicon
* feat: add default touch icon sizes, if one isn't uploaded
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
'node_redis: The HGET command contains a invalid argument type.\n' +
'Only strings, dates and buffers are accepted. Please update your code to use valid argument types.'
only return promise if callback is undefined
dont append baseUrl if url already starts with api
correctly handle writeapi readapi response for data/error
remove unused onError
dont append empty ? to url for get routes
* feat: wip admin/users
* feat: more work
* feat: more fixes
* feat: #8662, verified/unverified user groups
* feat: add filter
* feat: change user search to use filters array
* refactor: remove unused search call
* fix: tests
* fix: cant join system groups
* fix: upgrade script
* feat: #8734, jquery-ui, jquery-form, timeago
get rid of forum/footer.js move that code to app.js & wait for app to load before calling ajaxify.end
make sockets.js a requirejs module
move jquery-ui to node_modules and load via requirejs
move jquery-form to node_modules and load via requirejs
move timeago to node_modules and load via requirejs
only include the css for needed jquery-ui widgets
* feat: keep socket/io global for backwards compat
* refactor: move socket listener to chat
* feat: revoke user sessions above threshold
* fix: removed translations from en-US
* fix: defined default maxUserSessions in install\data\defaults.json
This reverts commit a395324b52, and
fixes the issue where the ACP became unusable because of the earlier
variant of this code.
Thanks @psychobunny for spotting.
This solves a small UX issue where clicking on a button (or anchor
that is not meant to be ajaxified) before ajaxify.end is called
leads to nothing happening because the appropriate click handler
has not been added.
This code will intercept premature clicks, wait until ajaxify.end
is called, and then re-send the click.
* feat: fullname search
* fix: take last element
* fix: attempt to fix psql like query
* feat: upgrade sript, another fix attempt
* fix: psql test
* fix: psql scan
* feat: add debug for test
* feat: test collate
* feat: cleanup
* fix: upgrade script
* refactor: socket posts delete/restore/purge so tid is not necessary
* refactor: stop trying to be fancy
* fix: tests to not pass in tid into posts.deletePosts
* fix: some more unnecessary tid passing
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and built on either a Redis or MongoDB database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
Additional functionality is enabled through the use of third-party plugins.
* [Demo & Meta Discussion](http://community.nodebb.org)
"alert.confirm-copyToAllGroup":"Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren":"Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup":"Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo":"<em>This action cannot be undone.</em>"
"alert.no-undo":"<em>This action cannot be undone.</em>",
"alert.admin-warning":"Administrators implicitly get all privileges"
"analytics.max-cache":"Analytics Cache Max Value",
"analytics.max-cache-help":"On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings":"Compression Settings",
"compression.enable":"Enable Compression",
"compression.help":"This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
"lead-text":"From this page you can configure access to the Write API in NodeBB.",
"intro":"By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs":"Click here to access the full API specification",
"uid":"User ID",
"uid-help-text":"Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description":"Description",
"no-description":"No description specified.",
"token-on-save":"Token will be generated once form is saved"
"log.alt-text-placeholder":"Alternative text for accessibility",
"favicon":"صورة المفضله",
"favicon.upload":"رفع",
"touch-icon":"Homescreen/Touch Icon",
"pwa":"Progressive Web App",
"touch-icon":"Touch Icon",
"touch-icon.upload":"رفع",
"touch-icon.help":"Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"touch-icon.help":"Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon":"Maskable (Homescreen) Icon",
"maskable-icon.help":"Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"handles.enabled-help":"This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
"handles.enabled-help":"This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views":"Topic views",
"topic-views.enabled":"Allow guests to increase topic view counts"
"timestamp.cut-off-help":"Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold":"Necro Threshold (in days)",
"timestamp.necro-threshold-help":"A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval":"Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help":"Topic views will only increment once every X minutes as defined by this setting.",
"teaser":"Teaser Post",
"teaser.last-post":"Last – Show the latest post, including the original post, if no replies",
"teaser.last-reply":"Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
"invalid-pagination-value":"رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
"username-taken":"اسم المستخدم مأخوذ",
"email-taken":"البريد الالكتروني مأخوذ",
"email-invited":"Email was already invited",
"email-not-confirmed":"You are unable to post until your email is confirmed, please click here to confirm your email.",
"email-not-confirmed-chat":"لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.",
"email-not-confirmed-email-sent":"Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.",
@@ -168,5 +169,6 @@
"cannot-block-guest":"Guest are not able to block other users",
"already-blocked":"This user is already blocked",
"already-unblocked":"This user is already unblocked",
"no-connection":"There seems to be a problem with your internet connection"
"no-connection":"There seems to be a problem with your internet connection",
"plugin-not-whitelisted":"Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
"wrong_reset_code.message":"رمز إعادة التعين غير صحيح، يرجى المحاولة مرة أخرى أو <a href='/reset'>اطلب رمزا جديدا</a>",
"new_password":"كلمة المرور الجديدة",
"repeat_password":"تأكيد كلمة المرور",
"changing_password":"Changing Password",
"enter_email":"يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
"enter_email_address":"ادخل عنوان البريد الإلكتروني",
"password_reset_sent":"If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.",
"alert.confirm-copyToAllGroup":"Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички категории</strong>?",
"alert.confirm-copyToChildren":"Наистина ли искате да приложите този набор от правомощия към <strong>всички по-долни (дъщерни) категории</strong>?",
"alert.confirm-copyToChildrenGroup":"Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички по-долни (дъщерни) категории</strong>?",
"alert.no-undo":"<em>Това действие е необратимо.</em>"
"alert.no-undo":"<em>Това действие е необратимо.</em>",
"alert.admin-warning":"Администраторите имат всички правомощия по подразбиране"
"sockets.delay":"Забавяне при повторно свързване",
"analytics.settings":"Настройки за анализите",
"analytics.max-cache":"Макс. стойност на кеша за анализите",
"analytics.max-cache-help":"При инсталации с натоварен трафик, кешът може да бъде изразходен, ако има повече едновременни потребители, от колкото е максималната стойност на кеша. (Изисква рестартиране)",
"compression.settings":"Настройки за компресирането",
"compression.enable":"Включване на компресирането",
"compression.help":"Тази настройка включва компресирането чрез „gzip“. За натоварени уеб сайтове най-добрият начин за използване на компресия е тя да се случва на нивото на обратния сървър-посредник (reverse proxy). Нос цел тестване, можете да го включите и тук."
"lead-text":"На тази страница можете да настроите достъпа до ППИ за писане в NodeBB.",
"intro":"По подразбиране ППИ за писане удостоверява потребителите чрез бисквитката им за сесията, но NodeBB поддържа и удостоверяване чрез метода „Bearer“, използвайки кодовете от тази страница.",
"docs":"Щракнете тук за достъп до пълната документация на ППИ",
"uid":"Потребителски ИД",
"uid-help-text":"Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>",
"description":"Описание",
"no-description":"Няма описание.",
"token-on-save":"Кодът ще бъде създаден след като данните бъдат запазени"
"log.alt-text-placeholder":"Алтернативен текст за достъпност",
"favicon":"Иконка на уеб сайта",
"favicon.upload":"Качване",
"touch-icon":"Иконка за начален екран (мобилно устройство)",
"pwa":"Прогресивно уеб-приложение",
"touch-icon":"Иконка за сензорен екран",
"touch-icon.upload":"Качване",
"touch-icon.help":"Препоръчителен размер и формат: 192x192, само във формат „PNG“. Ако не е посочена иконка за начален екран на мобилно устройство, NodeBB ще използва иконката на уеб сайта.",
"touch-icon.help":"Препоръчителен размер и формат: 512x512, само във формат „PNG“. Ако не е посочена иконка за сензорен екран, NodeBB ще използва иконката на уеб сайта.",
"maskable-icon":"Маскируема иконка (за начален екран)",
"maskable-icon.help":"Препоръчителен размер и формат: 512x512, само във формат „PNG“. Ако не е посочена маскируема иконка, NodeBB ще използва иконката за сензорен екран.",
"outgoing-links":"Изходящи връзки",
"outgoing-links.warning-page":"Показване на предупредителна страница при щракване върху външни връзки",
"search-default-sort-by":"Подредба по подразбиране при търсене",
@@ -38,4 +41,4 @@
"theme-color":"Цвят на темата",
"background-color":"Фонов цвят",
"background-color-help":"Цвят, който да се използва като фон за началния екран, когато уеб сайтът е инсталиран като приложение"
"handles.enabled":"Позволяване на имената за гостите",
"handles.enabled-help":"Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“."
"handles.enabled-help":"Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“.",
"topic-views":"Преглеждания на темите",
"topic-views.enabled":"Гостите да допринасят за броя на преглеждания на темите"
"timestamp.cut-off-help":"Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).<br /><em>(По подразбиране: <code>30</code>, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.</em>",
"timestamp.necro-threshold":"Мъртва граница (в дни)",
"timestamp.necro-threshold-help":"Между публикациите ще бъде показано съобщение, ако времето между тях е по-дълго от мъртвата граница. (По подразбиране: <code>7</code>, или една седмица). Задайте 0 за изключване.</em>",
"timestamp.topic-views-interval":"Интервал за увеличаване на броя на преглеждания на темите (в минути)",
"timestamp.topic-views-interval-help":"Броят на преглеждания на темите ще се увеличава веднъж на всеки Х минути, според тази настройка.",
"teaser":"Представителна публикация",
"teaser.last-post":"Последната – Показване на последната публикация, или първоначалната такава, ако няма отговори.",
"teaser.last-reply":"Последната – Показване на последния отговор, или „Няма отговори“, ако все още няма такива.",
"invalid-pagination-value":"Грешен номер на странициране, трябва да бъде между %1 и %2",
"username-taken":"Потребителското име е заето",
"email-taken":"Е-пощата е заета",
"email-invited":"На тази е-поща вече е била изпратена покана",
"email-not-confirmed":"Няма да можете да публикувате съобщения, докато е-пощата Ви не бъде потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.",
"email-not-confirmed-chat":"Няма да можете да пишете в разговори, докато е-пощата Ви не бъде потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.",
"email-not-confirmed-email-sent":"Вашата е-поща все още не е потвърдена. Моля, проверете входящата си кутия за писмото за потвърждение. Няма да можете да публикувате съобщения или да пишете в разговори, докато е-пощата Ви не бъде потвърдена.",
@@ -168,5 +169,6 @@
"cannot-block-guest":"Гостите не могат да блокират други потребители",
"already-blocked":"Този потребител вече е блокиран",
"already-unblocked":"Този потребител вече е отблокиран",
"no-connection":"Изглежда има проблем с връзката Ви с Интернет"
"no-connection":"Изглежда има проблем с връзката Ви с Интернет",
"plugin-not-whitelisted":"Добавката не може да бъде инсталирана – само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP"
"wrong_reset_code.message":"Полученият код за подновяване беше грешен. Моля, опитайте отново или <a href=\"/reset\">поискайте нов код за подновяване</a>.",
"new_password":"Нова парола",
"repeat_password":"Потвърдете паролата",
"changing_password":"Промяна на паролата…",
"enter_email":"Моля, въведете <strong>адреса на е-пощата си</strong> и ще Ви изпратим е-писмо с инструкции за това как да достъпите акаунта си.",
"enter_email_address":"Въведете адрес на е-поща",
"password_reset_sent":"Ако посоченият адрес съответства на съществуващ потребителски акаунт, то вече му е изпратено е-писмо за подновяване на паролата. Имайте предвид, че може да бъде изпращано само по едно е-писмо на минута.",
"alert.confirm-copyToAllGroup":"Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren":"Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup":"Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo":"<em>This action cannot be undone.</em>"
"alert.no-undo":"<em>This action cannot be undone.</em>",
"alert.admin-warning":"Administrators implicitly get all privileges"
"analytics.max-cache":"Analytics Cache Max Value",
"analytics.max-cache-help":"On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings":"Compression Settings",
"compression.enable":"Enable Compression",
"compression.help":"This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
"lead-text":"From this page you can configure access to the Write API in NodeBB.",
"intro":"By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs":"Click here to access the full API specification",
"uid":"User ID",
"uid-help-text":"Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description":"Description",
"no-description":"No description specified.",
"token-on-save":"Token will be generated once form is saved"
"log.alt-text-placeholder":"Alternative text for accessibility",
"favicon":"Favicon",
"favicon.upload":"Upload",
"touch-icon":"Homescreen/Touch Icon",
"pwa":"Progressive Web App",
"touch-icon":"Touch Icon",
"touch-icon.upload":"Upload",
"touch-icon.help":"Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"touch-icon.help":"Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon":"Maskable (Homescreen) Icon",
"maskable-icon.help":"Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"handles.enabled-help":"This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
"handles.enabled-help":"This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views":"Topic views",
"topic-views.enabled":"Allow guests to increase topic view counts"
"timestamp.cut-off-help":"Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold":"Necro Threshold (in days)",
"timestamp.necro-threshold-help":"A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval":"Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help":"Topic views will only increment once every X minutes as defined by this setting.",
"teaser":"Teaser Post",
"teaser.last-post":"Last – Show the latest post, including the original post, if no replies",
"teaser.last-reply":"Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
"invalid-pagination-value":"Invalid pagination value, must be at least %1 and at most %2",
"username-taken":"ইউজারনেম আগেই ব্যবহৃত",
"email-taken":"ইমেইল আগেই ব্যবহৃত",
"email-invited":"Email was already invited",
"email-not-confirmed":"You are unable to post until your email is confirmed, please click here to confirm your email.",
"email-not-confirmed-chat":"You are unable to chat until your email is confirmed, please click here to confirm your email.",
"email-not-confirmed-email-sent":"Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.",
@@ -168,5 +169,6 @@
"cannot-block-guest":"Guest are not able to block other users",
"already-blocked":"This user is already blocked",
"already-unblocked":"This user is already unblocked",
"no-connection":"There seems to be a problem with your internet connection"
"no-connection":"There seems to be a problem with your internet connection",
"plugin-not-whitelisted":"Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
"wrong_reset_code.message":"প্রাপ্ত রিসেট কোডটি ভুল ছিল। আবার চেষ্টা করুন, অথবা <a href=\"/reset\">একটি নতুন রিসেট কোড</a> অনুরোধ করুন।",
"new_password":"নতুন পাসওয়ার্ড",
"repeat_password":"পাসওয়ার্ড নিশ্চিত করুন",
"changing_password":"Changing Password",
"enter_email":"অনুগ্রহপূর্বক আপনার ইমেইল এড্রেস প্রদান করুন, আমরা আপনাকে আপনার পাসওয়ার্ড রিসেট সম্পর্কিত তথ্যাবলী ইমেইলে পাঠিয়ে দিবো। ",
"enter_email_address":"আপনার ইমেইল এড্রেস",
"password_reset_sent":"If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.",
"default-help":"Výchozí systémové znamená, že uživatel nemůže přenastavit celkové nastavení pravidel na fóru pro odesílání přehledů, které je momentálně<strong>%1</strong>",
"resend":"Znovu odeslat přehled",
"resend-all-confirm":"Are you sure you wish to manually execute this digest run?",
"resend-all-confirm":"Jste si jist/a, že chcete ručně spustit tento přehled.",
"resent-single":"Manuální znovu poslání přehledu bylo dokončeno",
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.