Commit Graph

12907 Commits (19e047e2d3929ba41e854d2f775493f59c4cbceb)

Author SHA1 Message Date
Julian Lam 69b409385d refactor: migrate `posts.getReplies` to write API
Julian Lam ee9f53f1ff refactor: deprecate socket method posts.getPidIndex
Julian Lam d814e281a0 feat: write API shorthand to query post routes by their topic index (requires tid in either query string or request body)
middleware.checkRequired is also updated to check for matches in req.query as well.
Julian Lam cdd7748003 fix: add back removed socket method, added deprecation warnings, as there are no breaking changes allowed in v3.1.0
Julian Lam f2082d7de8 refactor: started work on porting socket methods to write API [breaking]
The following socket calls have been removed:

* `posts.getRawPost`
* `posts.getPostSummaryByPid`

Two new Write API routes have been added:

- `GET /api/v3/posts/:pid/raw`
- `GET /api/v3/posts/:pid/summary`
Julian Lam 604a8f7e60 fix: black on red coloration on error when a bad reset code is received
Barış Soner Uşaklı ec8d8ec45b fix: closes
reset all user skins if they are no longer available
Barış Soner Uşaklı e070b851b1 fix: outgoing style
Barış Soner Uşaklı 8e0f9ce573 fix: , fix leave chat error
Barış Soner Uşaklı 870472108e refactor: if position
Barış Soner Uşaklı e3551d80d7 feat: allow tag editing from topic tools
closes 
closes 
closes 
Barış Soner Uşaklı 9f485ce6f1 fix: remove positions
Barış Soner Uşaklı 5ead9b7365 fix: scroll on edit textarea
Barış Soner Uşaklı eb0c77fd69 feat: , improve chat editing
use a new template for editing chats,
remove the data-mid on the chat inputEl
Barış Soner Uşaklı b891c5accd test: fix group tests
no idea how these passed on gh runner
Barış Soner Uşaklı c23689d305 fix: , fix teasers
1. with scheduled topics, pid is no longer reliable, lower pid can have higher timestamp(scheduled in the future) so use timestamp for sorting teasers
2. when restoring/deleting topics, update the teaser tid as the last step because it checks topicData.deleted
Barış Soner Uşaklı 3099d57f24 feat:
add joindate/postcount/reputation to user
add lastposttime to topic
oplik0 2bfdd76180 feat: show even uninstalled active plugins if set via config
oplik0 74cb224344 feat: add option to autoinstall plugins on setup
Barış Soner Uşaklı 2720a692cf fix: , fix topic rescheduling
don't display scheduled posts in group page
when topic is rescheduled update post sorted sets with new timestamp
when post is published update group posts zset
fix markTopicRead if topic was read while it was still hidden
Barış Soner Uşaklı 5607e5bccb
fix: , move counter code ()
instead of updating counters one by one on each topic move, update them once after all topics are moved, use zcard instead of incr/decr
Barış Soner Uşaklı c3854b786e feat: closes , use edited time if its greater
Barış Soner Uşaklı 619af8871a only show thumb selector if more than 1
Barış Soner Uşaklı 8a43aeac16 add padding
Barış Soner Uşaklı 84a78c2d5f feat: move topic thumb to template
use a single modal to show all thumbs and allow switching
Barış Soner Uşaklı 6b51dd5a2f
feat: closes , add category selector to fork modal ()
select the current category on open
Barış Soner Uşaklı eb8c5d8234 Merge branch 'master' into develop
Barış Soner Uşaklı 30b6bcfca1 fix: , clear parent cache all the way to root
Barış Soner Uşaklı 94229688c2 Merge branch 'master' into develop
Barış Soner Uşaklı de2669a2c6 fix: only remove deleted tag, closes
Barış Soner Uşaklı e8fb6711b8 fix: , filter by cid
Barış Soner Uşaklı 7d7904b045 fix: closes , reset skin if it was removed from bootswatch
Barış Soner Uşaklı 94f2e50883 feat: add hits/sec for cache
Barış Soner Uşaklı 5c26cb5888 fix: add composer:showHelpTab to api
Barış Soner Uşaklı f055b7fb74 refactor: get rid of floats in deleted-message.tpl
Barış Soner Uşaklı 6bed65dde6
fix: numeric strings in mongo ()
Barış Soner Uşaklı af7ab9b468 Merge branch 'master' into develop
Barış Soner Uşaklı 05c96033ab fork at least 1 thread in minifer
Veronikya c931183287
fix: NodeBB#11482 thumbs Post Can not upload a thumbnail, only multip… ()
* fix: NodeBB#11482 thumbs Post Can not upload a thumbnail, only multiple uploads

* Modify upload thumbnail test

* Modify upload thumbnail test +,

* Get rid of v2 uploads test

* edit times

* Modify amount of files associated post test

* edit post file amount
Julian Lam 2615c1e584 fix: , proper v3 style error on maintenance mode [breaking]
The v3-style error only applies to v3 routes. Existing Read API and page routes are unaffected.
Barış Soner Uşaklı a0bac74e63 lint: remove chalk
Barış Soner Uşaklı 9806d89f15 refactor: remove log, to much noise
Barış Soner Uşaklı 59b149784f fix: closes
show username instead of uid on history
Barış Soner Uşaklı 6eb1dd8687 fix: , show flag history to mods
also prevent regular mods from seeing flags that are not in their category if they use direct link to flag
Brutus5000 ae5afdbc66 feat: name theme on error:theme-not-set-in-configuration
Barış Soner Uşaklı 132476d581 feat: update mkdirp to 3.x, closes
Barış Soner Uşaklı 43c6087b34 feat: update rimraf to 5.x, closes
Barış Soner Uşaklı c3cedefef3 feat: update lru-cache to 9.x, closes
Barış Soner Uşaklı 0cd657ff2c fix: closes , fix timestamp of fork event
Julian Lam 0fc9fdd53d fix: throw generic not-allowed error on groups.join if a non-owner tries to add another user to a group
Julian Lam 18447b06af fix: remove socketGroups.addMember; update admin checks to allow admin:groups privilege, hide add member controls if not admin
Julian Lam f043dcec96 fix: remove socketGroups.kick
Julian Lam 9d49ec60a1 fix: remove socketGroups.issueMassInvite
Julian Lam b53f92fa2e fix: handle client-side acceptAll and rejectAll
Julian Lam 18c45b4461 refactor: group invitations; issuing, accepting, rejecting; now via API
Julian Lam 0788fb5118 feat: , add new GET routes to retrieve pending and invited members of a group, plus accept/reject pending
Barış Soner Uşaklı 8680ea4d3d fix: closes , link to queued post from event
Barış Soner Uşaklı c0b62346f0 feat: update thumbs modal styling
Barış Soner Uşaklı d36aad073e refactor: replace rimraf glob doesn't work on windows
Julian Lam b551b0ad47 Merge branch 'master' into develop
Barış Soner Uşaklı 4d2d76897a fix: don't crash on objects with toString property
Barış Soner Uşaklı 7397873db3 fix: fire action:user.online on user login
Julian Lam 7cb2e02cd7 fix: , removal of base_templates_path variable
Julian Lam 491487a1a2 Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı 37b48b82a4 fix: don't crash if event name is not a string
Barış Soner Uşaklı a83734fb2b fix: dont show search input if user doesn't have tag search priv
Barış Soner Uşaklı 68db271dfd chore: remove logs
Barış Soner Uşaklı 2c5a5bf366 feat: change chat notification delivery
instead of checking if user is online in the past x minutes, check if the user has read the room, if they have already marked the chat as read don't send notification
Barış Soner Uşaklı 2a9b3ee464 fix: add missing delete
Barış Soner Uşaklı 9c0996e40a feat: add placeholder for category search
Julian Lam 03e05b5154 fix: , trash the active session on account lockout, if there is one
Julian Lam 596db09f7e Merge branch 'master' into develop
Julian Lam ddcdaacc94 refactor: post-queue frontend logic
Julian Lam 402229845c feat: display when an api key was last used, in ACP,
Julian Lam efa64032dd feat: log the last time a valid api token was seen, have v3 ping route go through setupApiRoute helper
Barış Soner Uşaklı 894f392bfc lint: whitespace
Barış Soner Uşaklı c2961ad4cd fix: closes , move cache clear code
if 2 deps were updated only one of them was cleared from require.cache. ie commander & lru-cache both has major version bump then only commander would be cleared from cache since it throws first
Barış Soner Uşaklı 1502068eff
chore: up rimraf to 4.x ()
* chore: up rimraf to 4.x

* chore: oops up rimraf

* test: fix rimraf in tests
Barış Soner Uşaklı fafa130406
chore: up connect-redis to 7.x, drop node 14 ()
Julian Lam 93aa43f717 style: more fixes
Phạm Tấn Minh Tiến 9ed6961af8 fix lint
Phạm Tấn Minh Tiến 4b94c033c4 wrap quotes to prevent stripping leading 0
Julian Lam c843984d57 fix: , regular mods are also subject to post queue [breaking]
Barış Soner Uşaklı 5db037f1ea
chore: up mongo deps ()
* chore: up mongo deps

* mongodb 5.x no more callbacks
Barış Soner Uşaklı 7ba70d1561
Bootstrap5 ()
* chore: up deps

* chore: up composer

* fix(deps): bump 2factor to v7

* chore: up harmony

* chore: up harmony

* fix: missing await

* feat: allow middlewares to pass in template values via res.locals

* feat: buildAccountData middleware automatically added ot all account routes

* fix: properly allow values in res.locals.templateValues to be added to the template data

* refactor: user/blocks

* refactor(accounts): categories and consent

* feat: automatically 404 if exposeUid or exposeGroupName come up empty

* refactor: remove calls to getUserDataByUserSlug for most account routes, since it is populated via middleware now

* fix: allow exposeUid and exposeGroupName to work with slugs with mixed capitalization

* fix: move reputation removal check to accountHelpers method

* test: skip i18n tests if ref branch when present is not develop

* fix(deps): bump theme versions

* fix(deps): bump ntfy and 2factor

* chore: up harmony

* fix: add missing return

* fix: , only focus on search input on md environments and up

* feat: allow file uploads on mobile chat

closes https://github.com/NodeBB/NodeBB/issues/11217

* chore: up themes

* chore: add lang string

* fix(deps): bump ntfy to 1.0.15

* refactor: use new if/each syntax

* chore: up composer

* fix: regression from user helper refactor

* chore: up harmony

* chore: up composer

* chore: up harmony

* chore: up harmony

* chore: up harmony

* chore: fix composer version

* feat: add increment helper

* chore: up harmony

* fix:  no timestamps in future 

* chore: up harmony

* check config.theme as well

fire action:posts.loaded after processing dom

* chore: up harmony

* chore: up harmony

* chore: up harmony

* chore: up themes

* chore: up harmony

* remove extra class

* refactor: move these to core from harmony

* chore: up widgets

* chore: up widgets

* height auto

* fix: closes 

* dont focus inputs, annoying on mobile

* fix: dont focus twice, only focus on chat input on desktop

dont wrap widget footer in row

* chore: up harmony

* chore: up harmony

* update chat window

* chore: up themes

* fix cache buster for skins

* chat fixes

* chore: up harmony

* chore: up composer

* refactor: change hook logs to debug

* fix: scroll to post right after adding to dom

* fix: hash scrolling and highlighting correct post

* test: re-enable read API schema tests

* fix: add back schema changes for 179faa2270f2ad955dcc4a7b04755acce59e6ffd and c3920ccb10d8ead2dcd9914bb1784bed3f6adfd4

* fix: schema changes from 488f0978a4

* fix: schema changes for f4cf482a87

* fix: schema update for be6bbabd0e

* fix: schema changes for 69c96078ea

* fix: schema changes for d1364c3130

* fix: schema changes for 84ff1152f7

* fix: schema changes for b860c2605c

* fix: schema changes for 23cb67a112

* fix: schema changes for b916e42f40

* fix: schema change for a9bbb586fc

* fix: schema changes for 4b738c8cd3

* fix: schema changes for 58b5781cea

* fix: schema changes for 794bf01b21

* fix: schema changes for 80ea12c1c1, e368feef51, and 52ead114bec961c62fa2eb0786540e229f6e4873

* fix: composer-default object in config?

* fix: schema changes for 9acdc6808c and 093093420027999df3c67bf0ea6024f6dbf81d2d

* fix: schema changes for c0a52924f1

* fix: schema change for aba420a3f3, move loggedInUser to optional props

* fix: schema changes for 8c67031609

* fix: schema changes for 27e53b42f3

* fix: schema changes for 2835966518

* fix: breaking test for email confirmation API call

* fix: schema changes for refactored search page

* fix: schema changes for user object

* fix: schema changes for 9f531f957e

* fix: schema changes for c4042c70de and 23175110a2

* fix: schema changes for 9b3616b10392e247974eb0c1e6225a1582bf6c69

* fix: schema changes for 5afd5de07d

* fix: schema change for 1d7baf12171cffbd3af8914bef4e6297d1160d49

* fix: schema changes for 57bfb37c55a839662144e684875003ab52315ecc and be6bbabd0e

* fix: schema changes for 6e86b4afa20d662af8b9f1c07518df2d8c258105 and 3efad2e13b7319eb9a1f4fda7af047be43ebc11f and 68f66223e73a72f378f193c83a9b5546bede2cda

* fix: allowing optional qs prop in pagination keys (not sure why this didn't break before)

* fix: re-login on email change

* fix: schema changes for c926358d73

* fix: schema changes for 388a8270c9882892bad5c8141f65da8d59eac0fd

* fix: schema change for 2658bcc821c22e137a6eeb9bb74098856a642eaf

* fix: no need to call account middlewares for chats routes

* fix: schema changes for 71743affc3e58dc85d4ffa15ce043d4d9ddd3d67

* fix: final schema changes

* test: support for anyOf and oneOf

* fix: check thumb

* dont scroll to top on back press

* remove group log

* fix: add top margin to merged and deleted alerts

* chore: up widgets

* fix: improve fix-lists mixin

* chore: up harmony/composer

* feat: allow hiding quicksearch results during search

* dont record searches made by composer

* chore: up 54

* chore: up spam be gone

* feat: add prev/next page and page count into mobile paginator

* chore: up harmony

* chore: up harmony

* use old style for IS

* fix: hide entire toolbar row if no posts or not singlePost

* fix: updated messaging for post-queue template, 

* fix: btn-sm on post queue back button

* fix: bump harmony, closes 

* fix: remove unused alert module import

* fix: bump harmony

* fix: bump harmony

* chore: up harmony

* refactor: IS scrolltop

* fix: update users:search-user-for-chat source string

* feat: support for mark-read toggle on chats dropdown and recent chats list

* feat: api v3 calls to mark chat read/unread

* feat: send event:chats.mark socket event on mark read or unread

* refactor: allow frontend to mark chats as unread, use new API v3 routes instead of socket calls, better frontend event handling

* docs: openapi schema updates for chat marking

* fix: allow unread state toggling in chats dropdown too

* fix: issue where repeated openings of the chats dropdown would continually add events for mark-read/unread

* fix: debug log

* refactor: move userSearch filter to a module

* feat(routes): allow remounting /categories ()

* feat: send flags count to frontend on flags list page

* refactor: filter form client-side js to extract out some logic

* fix: applyFilters to not take any arguments, update selectedCids in updateButton instead of onHidden

* fix: use userFilter module for assignee, reporterId, targetUid

* fix(openapi): schema changes for updated flags page

* fix: dont allow adding duplicates to userFilter

* use same var

* remove log

* fix: closes 

* feat: lang key for x-topics

* chore: up harmony

* chore: up emoji

* chore: up harmony

* fix: update userFilter to allow new option `selectedBlock`

* fix: wrong block name passed to userFilter

* fix: https://github.com/NodeBB/NodeBB/issues/11283

* fix: chats, allow multiple dropdowns like in harmony

* chore: up harmony

* refactor: flag note adding/editing, closes 

* fix: remove old prepareEdit logic

* chore: add caveat about hacky code block in userFilter module

* fix: placeholders for userFilter module

* refactor: navigator so it works with multiple thumbs/navigators

* chore: up harmony

* fix: closes , destroy quick reply autocomplete

on navigation

* fix: filter disabled categories on user categories page count

* chore: up harmony

* docs: update openapi spec to include info about passing in timestamps for topic creation, removing timestamp as valid request param for topic replying

* fix: send back null values on ACP search dashboard for startDate and endDate if not expicitly passed in, fix tests

* fix: tweak table order in ACP dash searches

* fix: only invoke navigator click drag on left mouse button

* feat: add back unread indicator to navigator

* clear bookmark on mark unread

* fix: navigator crash on ajaxify

* better thumb top calculation

* fix: reset user bookmark when topic is marked unread

* Revert "fix: reset user bookmark when topic is marked unread"

This reverts commit 9bcd85c2c6848c3d325d32027261809da6e11c9e.

* fix: update unread indicator on scroll, add unread count

* chore: bump harmony

* fix: crash on navigator unread update when backing out of a topic

* fix: closes 

* fix: update topics:recent zset when rescheduling a topic

* fix: dupe quote button, increase delay, hide immediately on empty selection

* fix: navigator not showing up on first load

* refactor: remove glance

assorted fixes to navigator
dont reduce remaning count if user scrolls down and up quickly
only call topic.navigatorCallback when index changes

* more sanity checks for bookmark

dont allow setting bookmark higher than topic postcount

* closes , 🚋

* Revert "fix: update topics:recent zset when rescheduling a topic"

This reverts commit 737973cca9e94b6cb3867492a09e1e0b1af391d5.

* fix: , show proper error if queued post doesn't exist

was showing no-privileges if someone else accepted the post

* https://github.com/NodeBB/NodeBB/issues/11307

dont use li

* chore: up harmony

* chore: bump version string

* fix: copy paste fail

* feat: closes , tag filtering

add client side support for filtering by tags on /category, /recent and /unread

* chore: up harmony

* chore: up harmony

* Revert "fix: add back req.query fallback for backwards compatibility" [breaking]

This reverts commit cf6cc2c454dc35c330393c62ee8ce67b42d8eefb.
This commit is no longer required as passing in a CSRF token via query parameter is no longer supported as of NodeBB v3.x

This is a breaking change.

* fix: pass csrf token in form data, re: 

* chore: up deps

* fix: tests, use x-csrf-token query param removed

* test: fix csrf_token

* lint: remove unused

* feat: add itemprop="image" to avatar helper

* fix: get chat upload button in chat modal

* breaking: remove deprecated socket.io methods

* test: update messaging tests to not use sockets

* fix: parent post links

* fix: prevent post tooltip if mouse leaves before data/tpl is loaded

* chore: up harmony

* chore: up harmony

* chore: up harmony

* chore: up harmony

* fix: nested replies indices

* fix(deps): bump 2factor

* feat: add loggedIn user to all api routes

* chore: up themes

* refactor: audit admin v3 write api routes as per 

* refactor: audit category v3 write api routes as per  [breaking]

docs: fix open api spec for 

* refactor: audit chat v3 write api routes as per 

* refactor: audit files v3 write api routes as per 

* refactor: audit flags v3 write api routes as per 

* refactor: audit posts v3 write api routes as per 

* refactor: audit topics v3 write api routes as per 

* refactor: audit users v3 write api routes as per 

* fix: lang string

* remove min height

* fix: empty topic/labels taking up space

* fix: tag filtering when changing filter to watched topics

or changing popular time limit to month

* chore: up harmony

* fix: closes , show no post error if queued post already accepted/rejected

* test: 

* test: 

* fix(deps): bump 2factor

* fix:  clear cache on thumb remove

* fix: thumb remove on windows, closes 

* test: openapi for thumbs

* test: fix openapi

---------

Co-authored-by: Julian Lam <julian@nodebb.org>
Co-authored-by: Opliko <opliko.reg@protonmail.com>
Barış Soner Uşaklı 767c1d1faf fix: thumb remove on windows, closes
Barış Soner Uşaklı 1e7f32b1c4 fix: clear cache on thumb remove
Barış Soner Uşaklı a3a38e4ba3 fix: clear cache on thumb remove
Barış Soner Uşaklı cfd5027245 fix: closes , try/catch rss feeds
Barış Soner Uşaklı 56427e4f9d fix: closes , don't crash if tags array is empty
Barış Soner Uşaklı 1545223e7f fix: tag filtering when changing filter to watched topics
or changing popular time limit to month
Barış Soner Uşaklı f054a4f44d fix: get cid from pid instead of passing in
Barış Soner Uşaklı 8c762d3228 fix: closes , allow 0 length content if set to 0 in acp
Barış Soner Uşaklı 791551098c fix: display 25 topics on category feed
Barış Soner Uşaklı ec58700f6d fix: object destructuring overwriting type parameter
also check for valid types in generateExport
Julian Lam e6d7e55fbc fix: missing postAtIndex handling
Julian Lam 4cf04f06f6 feat: add rel="author" to topic route
re: 
Julian Lam 36bcdf8f9d Merge branch 'master' into develop
Barış Soner Uşaklı 8cf4a6f62e fix: alert on page load
gasoved 5a2c6c1cb5 fix: update main post timestamp when rescheduling
Julian Lam 83d3633626 fix: add back req.query fallback for backwards compatibility
psibean ea95668a76 fix: update csrf parser to accept csrf_token form value if present
psibean 0b2dd4e367 Update csrf_token falee assignment to false
psibean f553da48e1 Update csrf-sync to fallback to _csrf query param
Julian Lam bb0397cbc8 lint: satisfy lint errors
psibean 5a994290f2 Replace csurf with csrf-sync
gasoved edd2fc38fc fix: update main post timestamp when rescheduling
Julian Lam dbc84f7571 Merge branch 'master' into develop
Barış Soner Uşaklı 326b92687f fix: show admins/globalmods if content is purged
Barış Soner Uşaklı e335d0f601 fix: email expiry timestamps
emailConfirmExpiry is hours and default is 24
Barış Soner Uşaklı ebb5d2d25c feat: search dashboard time range
Barış Soner Uşaklı 845c8013b6
fix: , clean old emails when updating via admin ()
when admin is changing users emails check if its avaiable and remove old email of user first
upgrade script to cleanup email:uid, email:sorted, will remove entries if user doesn't exist or doesn't have email or if entry in user hash doesn't match entry in email:uid
fix missing ! in email interstitial
fix missing await in canSendValidation,
fix broken tests
dont pass sessionId to email.remove if admin is changing/removing email
Julian Lam 046c8a6ab7 Merge branch 'master' into develop
Julian Lam 7a5bcc2171 fix: , onSuccessfulLogin called with improper uid
Barış Soner Uşaklı bf92ee0e5f feat: add sitemap filter hooks for categories/topic pages
Julian Lam 966724adfe fix: new language keys for
Julian Lam a382e6e2e5 Merge branch 'master' into develop
nesro 202378b939 fix: , return check for reroll property
Barış Soner Uşaklı 705cd13ad3 fix: closes , notification uses displayname
Julian Lam b5598a6e5d fix: wrong link to topics in acp dashboard
Barış Soner Uşaklı d68352cce5 lint: remove unused
Barış Soner Uşaklı 0713482bd4 feat: , only show relevant users in flags assignee list
for user flags-> admins + all users who have `admin:users` privilege
for post flags -> admins + global mods + moderators of the category the post is in
refactor getModeratorUids function so it can be used for different privileges
Barış Soner Uşaklı 1d3c0e5a2b fix: https://github.com/NodeBB/NodeBB/issues/11239
parseInt uid received from req.body._uid or req.query._uid
Barış Soner Uşaklı 6d819b056e fix: notif filter selecte field
Peter Jaszkowiak f6c96948fe
fix: import resolution within plugin modules ()
use module.exports = require('..')
export * from '..' didn't work in some cases
Barış Soner Uşaklı c3653bee60 Revert "fix: import resolution within plugin modules ()"
This reverts commit 89e059a084.
Peter Jaszkowiak 89e059a084
fix: import resolution within plugin modules ()
Julian Lam 937344b8a8 Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı 0bffd3d93c fix: , allow users with admin:users privilege to delete users in acp
Barış Soner Uşaklı 7d04e95226 fix: , allow access to sub dashboard pages
Julian Lam f295174e07 test: fix broken test
Julian Lam 38175b5e71 test: fix broken test
Julian Lam fdc41646d1 feat: api v3 route to add email to user, optionally bypassing validation email, closes
Julian Lam eab5ab7ff9 Merge branch 'master' into develop
Julian Lam 459bc52338 fix: , tests, and returning the proper number of arrays
Julian Lam 39e009c05a fix: , only show mods of active categories when getModeratorUids is called
Barış Soner Uşaklı 747cb1f0a1 fix: closes , clear require cache if wrong dependency is installed
Julian Lam a69bc2cf7f fix: remove unneeded assignment, as req and locals will not likely ever be completely reassigned
Julian Lam 25ae58e8a0 fix: move call to `filter:middleware.buildHeader` out of parallel so that req can be overridden by plugins prior to loading config
Julian Lam 0a691e6744 fix: move call to `filter:middleware.buildHeader` out of parallel so that req can be overridden by plugins prior to loading config
Julian Lam 69806662e6
Session Timeout if "Remember Me" is not checked ()
* fix: convert loginDays and loginSeconds to number inputs

* feat: configurable session timeout for when "Remember Me" is not checked

closes 

* test: addition tests to check loginDays and sessionDuration settings

* test: also test loginSeconds override
Julian Lam a344e6ec0c
Fix for , restore password reset rate limiting ()
* chore: incrementing version number - v2.8.1

* chore: update changelog for v2.8.1

* fix: accidental clearing of reset rate limiting on reset send

* test: move user reset tests to its own file, add failing test for user reset locks

* fix: , counter attempted flooding of user reset route

* test: fix password reset socket test to check for error now

* test: same user sending multiple reset emails

should work after waiting the correct amount of time

* lint: fixes

* chore: rename outdated `cleanTokensAndUids` method

* test: no need to create user for new test

Co-authored-by: Misty Release Bot <deploy@nodebb.org>
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
Barış Soner Uşaklı b81fd81af6 feat: fire filter:topics.getUnreadTids even if there are no urnead topics
Barış Soner Uşaklı 586eed1407
fix: vulnerability in socket.io nested namespaces ()
Barış Soner Uşaklı 1ea9481af6 fix: lock post/reply similar to user.create
Opliko de31cb1a4f feat: add force flag to plugin install in cli ()
Julian Lam 9f531f957e refactor: flag states so that they are not hardcoded, allow plugins to add additional states, deprecated filter:flags.getFilters hook, closes
Julian Lam 896493dbd6 fix: change hsts-maxage back to numeric input type, change API token uid input to numeric text type
Julian Lam 4314b8e201 Revert "fix: replace input type number with text/pattern"
This reverts commit cde4c6ac7e.

The changeset was naive in the sense that a lot of the changes inputs actually work better as type="number".
Julian Lam 2bc23a9526 fix: replace input type number with text/pattern
Julian Lam 33af2d9c18 feat: integrating basic client-side form validity checking in settings v1 and v2
Julian Lam db8d3a94eb fix: change hsts-maxage back to numeric input type, change API token uid input to numeric text type
Julian Lam d9852c3245 Revert "fix: replace input type number with text/pattern"
This reverts commit cde4c6ac7e.

The changeset was naive in the sense that a lot of the changes inputs actually work better as type="number".
Julian Lam 45ae31f816 fix: replace input type number with text/pattern
Julian Lam dadbcd731c feat: integrating basic client-side form validity checking in settings v1 and v2
Manuel Valle 8c4d6bbebb
Fix: categories.js not showing custom privileges ()
No shows correctly custom privileges in the Other section for a category.
Barış Soner Uşaklı 07a0212571 fix: , add admin uploads paths to priv mapping
closes 
Barış Soner Uşaklı 4efc19d5f1 feat: add ./nodebb install <plugin_name>
will install the suggested version for current nodebb closes 
Barış Soner Uşaklı 48d1439217 fix: prototype vulnerability in socket.io onMessage
Barış Soner Uşaklı 0e495f9ea4 fix: , fix custom privilege/path in routePrefixMap
will find most specific path
Barış Soner Uşaklı c7aa4ebf47 Merge branch 'master' into develop
Barış Soner Uşaklı 864fe0f971 feat: add permissions-policy header
Barış Soner Uşaklı 110311b25e fix: https://github.com/NodeBB-Community/nodebb-plugin-custom-pages/issues/68
don't crash if template doesn't have any widgets set before
Barış Soner Uşaklı fc49665fe5 fix: https://github.com/NodeBB-Community/nodebb-plugin-custom-pages/issues/68
don't crash if template doesn't have any widgets set before
Barış Soner Uşaklı bb82eb71e2 fix: , add missing await
Julian Lam 10ba7b9ced Merge branch 'master' into develop
Barış Soner Uşaklı abcfb63126 fix: , allow banned users to post
if given privileges
Barış Soner Uşaklı 3c85b944e3 feat: allow groups to be exempt from maintenance mode
closes 
Barış Soner Uşaklı 6109061501 fix: check schedule privilege, closes
Barış Soner Uşaklı b34e859c1b refactor: don't prevent startup if staticDir is undefined
https://community.nodebb.org/topic/16790/problems-with-upgrading-to-2-xx
Julian Lam 97d8b53fd3 Merge branch 'master' into develop
Julian Lam 55a197a7d7 fix: check for csrf token on /register/abort, + theme changes for v2.x branches of themes
Barış Soner Uşaklı a31ba824ea fix: upgrade script to work from 0.x to 2.x
Barış Soner Uşaklı 06d1539137 test: fix tests again
Barış Soner Uşaklı b5d38bc696 feat: new search hooks
filter:search.isAllowed, allow plugins to check if searching is allowed
filter:search.searchIn, allow searching in custom items
Julian Lam a2fafc2b15 Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı 673261ff98 fix: , image height in emails
Barış Soner Uşaklı 6f673f806f fix: , apply autoLocale middleware to guests only
Barış Soner Uşaklı be92be4eee feat: add search data to filter:search.inContent
Barış Soner Uşaklı e3f2156202
feat: add search data to filter:search.inContent
Julian Lam 96b46411b1 Merge branch 'master' into develop
Julian Lam 9ee30fe7d2 fix: revert breaking change, add back SocketUser.emailConfirm
Julian Lam 9c576a0758
Email confirmation QOL updates ()
* breaking: remove `SocketUser.emailConfirm`, re: 

* chore: move email confirmation related configs to own section in Settings > Email

* feat: new user email method `getValidationExpiry`, returns expiration in ms.. probably.

* fix: bug where `user.email.isValidationPending` returned an u nexpected non-boolean value if there was no confirmation pending (only when checking email as well)

* fix: update getValidationExpiry to return ms

* test: use emailConfirmInterval for tests, for now

* fix: throw friendly error when attempting an email change within email confirmation window

* feat: new config option `emailConfirmExpiry` in days, governs how long the confirm link is good for

* test: additional tests for user email methods

* fix: add back missing handling of  option

* test: fix tests
Julian Lam 09f3ac6574 fix: in appropriately named language key `email-confirm-email2`
Julian Lam 7672194c7c fix: correctly pass dev flag to package installer
Julian Lam 09cfd0bd57 fix: use `--omit=dev` flag for npm instead of `--production`
Barış Soner Uşaklı dd4e9cce09 perf: speed up build
run webpack as soon as js targets are done
this allows building js/css in parallel
Barış Soner Uşaklı 3a70530c8e fix active plugins ()
Barış Soner Uşaklı 67efaeb4b8
fix active plugins ()
Barış Soner Uşaklı b879b6a0c2
fix: use admin:groups priv for groups ()
Barış Soner Uşaklı e35b0a869f fix: https://github.com/NodeBB/NodeBB/issues/10525
Barış Soner Uşaklı ebd5dcc6d6 fix: EEXISTS error on linux if plugin/theme overrides core js file
Julian Lam 1e4846435a fix: mixing of old and new bch syntax
Julian Lam 1e864a7518 Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı 61d32bdebb fix: category ordering add test
Barış Soner Uşaklı 177d904812 fix: category ordering add test
Barış Soner Uşaklı c0b1ded363 fix more categories button not moving with parent
fix order issue
Barış Soner Uşaklı a584dae650 feat: add relevant topic events to post objects
see c9604f216a
Julian Lam 14515f6004 fix: add lru-cache to checked packages, to fix upgrade issue with lru-cache
Julian Lam 53d47a58f6 fix: use `--omit=dev` flag for npm instead of `--production`
Julian Lam 6391f77b01 Merge remote-tracking branch 'origin/master' into develop
Julian Lam cf4f5447bb fix: , allow `middleware.checkAccountPermissions` to be called with either uid or userslug in params
Previously, the middleware only worked with userslug params
Barış Soner Uşaklı b5dd89e1c0
feat: store topic title and tags in diffs ()
* feat: store topic title and tags in diffs

allow restoring post diff if tags didn't change

* test: fix tests, fast computer problems
Julian Lam fe249fa577 fix: listen to -d flag on cli upgrade
Barış Soner Uşaklı ebd7c05c4c feat: paginate recentposts.rss and
category/1/recentposts.rss
Julian Lam 6061d611ea Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı 8aa1596d23 chore: bring back treding plugins
Barış Soner Uşaklı 3d5a6b39d6 lint: fix lint
Barış Soner Uşaklı b392450c36 perf: disable trending plugins, too slow due to nbbpm
Opliko 665f36b707 feat: add quiet to action:settings.set
Makes it possible to ignore quiet updates without abusing the `filter` hook
Julian Lam 67cb70352f fix: missing escape on ACP category backgroundImage property
Julian Lam 15b1561fd3 feat: introduce ACP defined option to rescind notif or do nothing on flag resolve/reject
/cc 
Julian Lam d05705183f refactor: move export generation logic to v3 controller, GET/HEAD routes for exports
re: 
Julian Lam 0cda5aa3e3 feat: allow v3 api to handle 202 and 204 response codes as well.
Julian Lam 8b7cf48ade Merge remote-tracking branch 'origin/master' into develop
Julian Lam 9b96c33d5d fix: wrap passport.authenticate to pass in keepSessionInfo if not already set
Julian Lam 65b3996ac6 fix: removing duplicate session rerolling code (as it is in passport@^0.6 now)
Julian Lam 20ebf0a1e0 Merge remote-tracking branch 'origin/master' into develop
Barış Soner Uşaklı bc37a5c516 fix: parseInt caller.uid closes
Barış Soner Uşaklı fc9b436f3e Merge branch 'master' of https://github.com/NodeBB/NodeBB
Barış Soner Uşaklı 489fb3a36f fix: missing req, closes
Julian Lam 4dc7fa050f fix: , disallow inline viewing of uploaded html files
Julian Lam 990ad6a11a Merge remote-tracking branch 'origin/master' into develop
Julian Lam ec048a01ba fix: , incorrect conditional in email interstitial partial
Barış Soner Uşaklı aba420a3f3 feat: setting to show signatures only once in topics, closes
Barış Soner Uşaklı 14c79763dd refactor: use group.slug on acp group urls closes
Barış Soner Uşaklı e06e526e54 fix: don't crash if post is undefined
Barış Soner Uşaklı 33458701c1 test: passport0.6 ()
* test: passport0.6

* test: make logout async, fix lint

* test: keepSessionInfo flag

* revert: csrf load
Opliko 3975fa2e45 fix: return at least one in sizeCalculation ()
if post content is empty post cache should still consider its size to be at least one. fixes 
Barış Soner Uşaklı 4a3e36a766 fix: don't crash if post is undefined
Opliko a9bbb586fc
feat: allow plugins to add to admin cache list ()
* feat: allow plugins to add to admin cache list

resolves  

plugins will have to use `filter:admin.cache.get` hook and just add their own cache to the object there.

* feat: add dump to ttlCache and expose properties

* feat: also expose properties under their current names

* feat: display TTL if set
Barış Soner Uşaklı 6b2a6f9006
test: passport0.6 ()
* test: passport0.6

* test: make logout async, fix lint

* test: keepSessionInfo flag

* revert: csrf load
Opliko 15ca460c8f
fix: return at least one in sizeCalculation ()
if post content is empty post cache should still consider its size to be at least one. fixes 
Julian Lam 9b753d6d57
TTL Cache ()
* refactor: move src/cacheCreate.js to src/cache/lru.js

* fix: call new library location for lru cache creator

* feat: add ttl cache

* fix: update upload throttler to use ttl cache instead of lru cache

* chore: add missing dependency

* fix: avoid pubsub conflicts

* fix: use get instead of peek, which is not available in ttl-cache
Julian Lam c07d595662
Update to lru-cache@^7 ()
* chore(deps): bump lru-cache from 6.0.0 to 7.13.1 in /install

Bumps [lru-cache](https://github.com/isaacs/node-lru-cache) from 6.0.0 to 7.13.1.
- [Release notes](https://github.com/isaacs/node-lru-cache/releases)
- [Changelog](https://github.com/isaacs/node-lru-cache/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-lru-cache/compare/v6.0.0...v7.13.1)

---
updated-dependencies:
- dependency-name: lru-cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(lru-cache): remove unneeded `length` params for cache creation, as `maxSize` was not used in those init calls, also renamed some methods to match new method names in lru-cache [breaking]

Added deprecation notices for old params

* fix: replace three direct calls to lru-cache with call to cacheCreate, moved cache creation call in uploads to run on first init as config is not populated at lib init

* test: move configs init above cache reset calls in databasemock

* move some more code above cache clear

* refactor: remove unused

* test: lru

* test: more debug

* test: on more test

* use await helpers.uploadFile

* fix: tests remove logs

* fix: acp cache page

* fix: add in one more guard again cache instantiation with `length` prop but no `maxSize` prop

* fix(deps): bump markdown

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
Opliko b3a37a7f35 feat: support packageManager property in package.json
resolves 
Julian Lam 38bf30c8ca fix: adapt to breaking change in commander
Julian Lam d0255fc6a5 fix: move panel-offset setting code back to theme header
Julian Lam c6782a2173 Merge remote-tracking branch 'origin/master' into develop
Julian Lam 9d27e90740 fix: don't require password challenge if no password is set in user account
Julian Lam 287f4c2c41 fix: do not throw if password passed into `isPasswordCorrect` is invalid, just return false
Julian Lam 7fcee42be9 feat: present a password challenge on email update flow
Barış Soner Uşaklı 7e8ad785f4 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)
Barış Soner Uşaklı 55c5588a4b 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)
Julian Lam 9ee1afbb0f Merge branch 'master' into develop
Julian Lam 06f089afda test: fix user email tests
Barış Soner Uşaklı d73f0f9ccb perf: make single db call
Julian Lam e092bfeb46 Merge remote-tracking branch 'origin/master' into develop
Julian Lam cba9047f67 fix: , hide unconfirmed emails from user data retrieval methods
Julian Lam 3e062a7f29 fix: use different emoji on NodeBB Ready — again because procrastination
Barış Soner Uşaklı cd438b328a fix: unnecessary escape
Barış Soner Uşaklı f64a69132a Merge branch 'develop' of https://github.com/NodeBB/NodeBB into develop
Julian Lam dc3a6a29bc fix: , do not purge files without a timestamp prefix
Julian Lam 89173f17ca fix: , logic error in COEP header; helmet config
Julian Lam 5176fb1544 feat: add emoji to startup logs, because procrastination.
Julian Lam dcacd815a9 refactor: invert helmet configuration
Julian Lam 820bc994d8
feat: UI changes for ACP > Manage > Categories ()
* Revert "Revert "feat: cross origin opener policy options ()""

This reverts commit 46050ace1a.

* Revert "Revert "chore(i18n): fallback strings for new resources: nodebb.admin-settings-advanced""

This reverts commit 9f291c07d3.

* feat: closes , don't trim children if category is marked section

* feat: fire hook to allow plugins to filter the pids returned in a user profile

/cc 

* fix: use `user.hidePrivateData();` more consistently across user retrieval endpoints

* fix: better looking placeholder text for ACP search

* fix: bug where fallback to forum search was not working due to client-side error

* feat: allow plugins to toggle whether IPs are shown in the users CSV export

* feat: Allow defining active plugins in config ()

* Revert "Revert "feat: cross origin opener policy options ()""

This reverts commit 46050ace1a.

* Revert "Revert "chore(i18n): fallback strings for new resources: nodebb.admin-settings-advanced""

This reverts commit 9f291c07d3.

* feat: closes , don't trim children if category is marked section

* feat: fire hook to allow plugins to filter the pids returned in a user profile

/cc 

* fix: use `user.hidePrivateData();` more consistently across user retrieval endpoints

* feat: Allow defining active plugins in config

resolves 

* fix: assign the db result to files properly

* test: add tests with plugins in config

* feat: better theme change handling

* feat: add visual indication that plugins can't be activated

* test: correct hooks

* test: fix test definitions

* test: remove instead of resetting nconf to avoid affecting other tests

* test: ... I forgot how nconf worked

* fix: remove negation

* docs: improve wording of error message

* feat: reduce code duplication

* style: remove a redundant space

* fix: remove unused imports

* fix: use nconf instead of requiring config.json

* fix: await...

* fix: second missed await

* fix: move back from getActiveIds to getActive

* fix: use paths again?

* fix: typo

* fix: move require into the function

* fix: forgot to change back to getActive

* test: getActive returns only id

* test: accedently commented out some stuff

* feat: added note to top of plugins page if \!canChangeState

Co-authored-by: Julian Lam <julian@nodebb.org>
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>

* feat: show an informative message when no plugins are found after filtering

fixes 

* Latest translations and fallbacks

* Latest translations and fallbacks

* chore(deps): bump ace-builds from 1.7.1 to 1.8.1 in /install

Bumps [ace-builds](https://github.com/ajaxorg/ace-builds) from 1.7.1 to 1.8.1.
- [Release notes](https://github.com/ajaxorg/ace-builds/releases)
- [Changelog](https://github.com/ajaxorg/ace-builds/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ajaxorg/ace-builds/compare/v1.7.1...v1.8.1)

---
updated-dependencies:
- dependency-name: ace-builds
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: swap out icons in ACP > Manage > Categories to more intuitive ones, remove extra placeholder div

* fix: hide expando button if no subcategories; remove attempt at establishing common vars, increased spacing between categories in list

* fix: buggy expando state on category drag/drop

Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
Co-authored-by: Opliko <opliko.reg@protonmail.com>
Co-authored-by: Misty Release Bot <deploy@nodebb.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Julian Lam 6840a7423b feat: show an informative message when no plugins are found after filtering
fixes 
Opliko 23cb67a112 feat: Allow defining active plugins in config ()
* Revert "Revert "feat: cross origin opener policy options ()""

This reverts commit 46050ace1a.

* Revert "Revert "chore(i18n): fallback strings for new resources: nodebb.admin-settings-advanced""

This reverts commit 9f291c07d3.

* feat: closes , don't trim children if category is marked section

* feat: fire hook to allow plugins to filter the pids returned in a user profile

/cc 

* fix: use `user.hidePrivateData();` more consistently across user retrieval endpoints

* feat: Allow defining active plugins in config

resolves 

* fix: assign the db result to files properly

* test: add tests with plugins in config

* feat: better theme change handling

* feat: add visual indication that plugins can't be activated

* test: correct hooks

* test: fix test definitions

* test: remove instead of resetting nconf to avoid affecting other tests

* test: ... I forgot how nconf worked

* fix: remove negation

* docs: improve wording of error message

* feat: reduce code duplication

* style: remove a redundant space

* fix: remove unused imports

* fix: use nconf instead of requiring config.json

* fix: await...

* fix: second missed await

* fix: move back from getActiveIds to getActive

* fix: use paths again?

* fix: typo

* fix: move require into the function

* fix: forgot to change back to getActive

* test: getActive returns only id

* test: accedently commented out some stuff

* feat: added note to top of plugins page if \!canChangeState

Co-authored-by: Julian Lam <julian@nodebb.org>
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
Julian Lam a6af47da02 feat: allow plugins to toggle whether IPs are shown in the users CSV export
Julian Lam 1b9c68196f fix: better looking placeholder text for ACP search
Julian Lam 0529f2fb5d fix: use `user.hidePrivateData();` more consistently across user retrieval endpoints
Julian Lam c26be43ac5 feat: fire hook to allow plugins to filter the pids returned in a user profile
/cc 
Barış Soner Uşaklı 7e80cc1033 feat: closes , don't trim children if category is marked section
Julian Lam ad072c03d1 Revert "Revert "feat: cross origin opener policy options ()""
This reverts commit 46050ace1a.
Tong Ho bbc7f2afba fix: cannot turn off all networks
Tong Ho 2e088a8ef0 fix: cannot setting networks for sharing posts
Julian Lam c93bd0105e fix: expire email validation tokens on password change
Julian Lam 0d58e8a6af fix: remove extraneous console.log
Julian Lam 3c41ae04cd fix: , extraneous apostrophes in plugin upgrader
Julian Lam 60114219c1 fix: get version from install/package.json instead
Julian Lam 8d701ec3e2 fix: , always re-add theme to active plugins, on theme set
Julian Lam f38b2a737a fix: improper handling of single vs. multiple inputs for hidePrivateData
Julian Lam ecf0e8ce22 fix: observe user-specific and ACP-specific hiding rules for fullname
Julian Lam 3f5ae893c6 refactor: allow user.hidePrivateData() to handle an array of `userData`
Julian Lam 17e44ff5c9 feat: fire hook to allow plugins to filter the pids returned in a user profile
/cc 
Barış Soner Uşaklı be917e8d39 feat: closes , don't trim children if category is marked section
Julian Lam 0d68643bcb Revert "Revert "feat: cross origin opener policy options ()""
This reverts commit 46050ace1a.
Julian Lam 43f9e6c8e4 fix: handle ENOENT on file deletion, closes
Julian Lam 46050ace1a Revert "feat: cross origin opener policy options ()"
This reverts commit 881323583f.
Barış Soner Uşaklı 881323583f
feat: cross origin opener policy options ()
Julian Lam 22368b996e refactor: move orphan cleaning logic to its own method, added tests for getOrphans and cleanOrphans
Julian Lam 88aee43947 feat: new cronjob and ACP option to delete orphans after configurable number of days, closes
Julian Lam bef236f371 chore: remove unnecessary `affected` set from deprecated plugin hook
Julian Lam b9d4724e0f feat: allowed plugins to modify email verification details prior to db saving or email send/plugin fire
+ new hook `filter:user.verify`
- hook `filter:user.verify.code`
Julian Lam 3a015eb8e3 fix: no need to pass in empty Set in deprecated hooks
Barış Soner Uşaklı b6f8e2fd05 fix:
Julian Lam a04da673fa fix: , all uploads in `uploads/files` showing orphaned
Julian Lam 7f870beb59 fix: bug where post associations are not shown when the directory is `files`
Julian Lam ece733eddc feat: pass absolute url to post into post tools response,
Julian Lam a35642601c fix: buildBreadcrumbs naively prepending relative path even if absolute paths are passed in
Barış Soner Uşaklı 191fb9f443 test: fix tests again
Barış Soner Uşaklı e802fab87f fix: get rid of math.random in utils.generateUUID
Barış Soner Uşaklı 7e4d2852f6 fix: , gray out disabled nav items
use enabled property if present
change default to true, so added nav items are enabled by default
Barış Soner Uşaklı 0084b563f3 fix: , fix user digest setting display acp
Julian Lam 54ff768f51 chore: remove optional `middleware` parameter from setupPageRoute and setupAdminPageRoute calls
Barış Soner Uşaklı c926358d73 feat: add mute history, closes
Barış Soner Uşaklı 9acdc6808c feat: allow unban/unmute on flag details page. closes
Barış Soner Uşaklı b17a81bfb0 fix: translate api error messages to user lang, closes ,
Barış Soner Uşaklı 3a009f96cd fix: closes , convert \r\n to \n so it isn't counted as 2 characters