Commit Graph

146 Commits

Author SHA1 Message Date
Julian Lam
15b1561fd3 feat: introduce ACP defined option to rescind notif or do nothing on flag resolve/reject
/cc #10867
2022-08-26 16:05:45 -04:00
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)
2022-08-05 08:11:11 -04:00
Barış Soner Uşaklı
c926358d73 feat: add mute history, closes #10596 2022-05-15 22:26:35 -04:00
Barış Soner Uşaklı
d20b07cfea Webpack5 (#10311)
* feat: webpack 5 part 1

* fix: gruntfile fixes

* fix: fix taskbar warning

add app.importScript
copy public/src/modules to build folder

* refactor: remove commented old code

* feat: reenable admin

* fix: acp settings pages, fix sortable on manage categories

embedded require in html not allowed

* fix: bundle serialize/deserizeli so plugins dont break

* test: fixe util tests

* test: fix require path

* test: more test fixes

* test: require correct utils module

* test: require correct utils

* test: log stack

* test: fix db require blowing up tests

* test: move and disable bundle test

* refactor: add aliases

* test: disable testing route

* fix: move webpack modules necessary for build, into `dependencies`

* test: fix one more test

remove 500-embed.tpl

* fix: restore use of assets/nodebb.min.js, at least for now

* fix: remove unnecessary line break

* fix: point to proper ACP bundle

* test: maybe fix build test

* test: composer

* refactor: dont need dist

* refactor: more cleanup

use everything from build/public folder

* get rid of conditional import in app.js

* fix: ace

* refactor: cropper alias

* test: lint and test fixes

* lint: fix

* refactor: rename function to app.require

* refactor: go back to using app.require

* chore: use github branch

* chore: use webpack branch

* feat: webpack webinstaller

* feat: add chunkFile name with contenthash

* refactor: move hooks to top

* refactor: get rid of template500Function

* fix(deps): use webpack5 branch of 2factor plugin

* chore: tagging v2.0.0-beta.0 pre-release version 💥 :shipit: 🎉 🚀

* refactor: disable cache on templates

loadTemplate is called once by benchpress and the result is cache internally

* refactor: add server side helpers.js

* feat: deprecate /plugins shorthand route, closes #10343

* refactor: use build/public for webpack

* test: fix filename

* fix: more specific selector

* lint: ignore

* refactor: fix comments

* test: add debug for random failing test

* refactor: cleanup

remove test page, remove dupe functions in utils.common

* lint: use relative path  for now

* chore: bump prerelease version

* feat: add translateKeys

* fix: optional params

* fix: get rid of extra timeago files

* refactor: cleanup, require timeago locale earlier

remove translator.prepareDOM, it is in header.tpl html tag

* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels (#10378)

* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels

- Existing hooks are preserved (to be deprecated at a later date, possibly)
- New init hooks are called on NodeBB start, and provide a one-stop shop to add new privileges, instead of having to add to four different hooks

* docs: fix typo in comment

* test: spec changes

* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels (#10378)

* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels

- Existing hooks are preserved (to be deprecated at a later date, possibly)
- New init hooks are called on NodeBB start, and provide a one-stop shop to add new privileges, instead of having to add to four different hooks

* docs: fix typo in comment

* test: spec changes

* feat: allow app.require('bootbox'/'benchpressjs')

* refactor: require server side utils

* test: jquery ready

* change istaller to use build/public

* test: use document.addEventListener

* refactor: closes #10301

* refactor: generateTopicClass

* fix: column counts for other privileges

* fix: #10443, regression where sorted-list items did not render into the DOM in the predicted order [breaking]

* fix: typo in hook name

* refactor: introduce a generic autocomplete.init() method that can be called to add nodebb-style autocompletion but using different data sources (e.g. not user/groups/tags)

* fix: crash if `delay` not passed in (as it cannot be destructured)

* refactor: replace substr

* feat: set --panel-offset style in html element based on stored value in localStorage

* refactor: addDropupHandler() logic to be less naive

- Take into account height of the menu
- Don't apply dropUp logic if there's nothing in the dropdown
- Remove 'hidden' class (added by default in Persona for post tools) when menu items are added

closes #10423

* refactor: simplify utils.params [breaking]

Retrospective analysis of the usage of this method suggests that the options passed in are superfluous, and that only `url` is required. Using a browser built-in makes more sense to accomplish what this method sets out to do.

* feat: add support for returning full URLSearchParams for utils.params

* fix: utils.params() fallback handling

* fix: default empty obj for params()

* fix: remove \'loggedin\' and \'register\' qs parameters once they have been used, delay invocation of messages until ajaxify.end

* fix: utils.params() not allowing relative paths to be passed in

* refactor(DRY): new assertPasswordValidity utils method

* fix: incorrect error message returned on insufficient privilege on flag edit

* fix: read/update/delete access to flags API should be limited for moderators to only post flags in categories they moderate

- added failing tests and patched up middleware.assert.flags to fix

* refactor: flag api v3 tests to create new post and flags on every round

* fix: missing error:no-flag language key

* refactor: flags.canView to check flag existence, simplify middleware.assert.flag

* feat: flag deletion API endpoint, #10426

* feat: UI for flag deletion, closes #10426

* chore: update plugin versions

* chore: up emoji

* chore: update markdown

* chore: up emoji-android

* fix: regression caused by utils.params() refactor, supports arrays and pipes all values through utils.toType, adjusts tests to type check

Co-authored-by: Julian Lam <julian@nodebb.org>
2022-04-29 21:39:33 -04:00
Barış Soner Uşaklı
002a241cc5 fix: delete history as well 2022-03-23 19:07:18 -04:00
Barış Soner Uşaklı
93b6053284 fix: handle purge posts as well 2022-03-23 18:38:36 -04:00
Barış Soner Uşaklı
31251282ad feat: delete flagId field from post/user on flag purge 2022-03-23 15:38:21 -04:00
Barış Soner Uşaklı
03fdb5bede fix: byCid removal, targetCid not stored in flagObj 2022-03-23 15:27:45 -04:00
Barış Soner Uşaklı
3b529b84b5 feat: add flags.purge 2022-03-23 15:10:10 -04:00
Barış Soner Uşaklı
3414a23bce feat: min:rep:upvote, and other limits similar to downvotes
closes #10380
2022-03-11 13:34:36 -05:00
gasoved
62187caa67 feat: post auto flagging on downvotes #10029 (#10367)
* feat: post auto flagging on downvotes

* fix: just get one admin
2022-03-04 15:38:16 -05:00
Magnus
7bd3e31dec Fullname in notifications (#10157)
* init - fullname notifications setting

* fullname in topic reply

* fullname for group-request-membership

* fullname for group-leave notification

* fullname for new-post-flag & new-user-flag

* removed log

* fullname for user follow

* fullname in message notification

* fullname in follow

* fullname for sendNotificationToPostOwner

* fullname in sendNotificationToTopicOwner

* fullname in doExport

* shorthand name set

* shorter name set

* fullname in notifications

* displayname for notifications

* removed unused require
2022-01-19 10:19:11 -05:00
Julian Lam
bc7707aa88 fix: #9484 show user history only to admins and gmods 2021-12-10 15:38:50 -05:00
Barış Soner Uşaklı
fb363957d1 refactor: tab rules 2021-11-18 16:42:18 -05:00
Barış Soner Uşaklı
ba3582b873 fix: xss on flags page via ban reason 2021-09-17 11:10:43 -04:00
Julian Lam
cc6cbfcdc4 Flags API (#9666)
* feat: new routes for flags API

+ flag get
+ flag creation, migration from socket method
+ flag update, migration from socket method
* fixed bug where you could not unassign someone from a flag

* feat: tests for new flags API

added missing files for schema update

* fix: flag tests to use Write API instead of sockets

* feat: flag notes API + tests

* chore: remove debug line

* test: fix breaking test on mongo
2021-07-16 13:44:42 -04:00
Barış Soner Uşaklı
3d6bdeb3df feat: add req.query to flags.list/getCount 2021-05-19 10:01:33 -04:00
Barış Soner Uşaklı
d35c64b1a2 feat: add filter:flags.getFlagIdsWithFilters 2021-05-18 10:54:43 -04:00
Barış Soner Uşaklı
161081e960 fix: escape flag reason 2021-04-09 14:20:42 -04:00
Barış Soner Uşaklı
90d64fe1df fix: #9398, crash on post flag 2021-03-15 17:55:14 -04:00
Barış Soner Uşaklı
0d3979efd0 refactor: use hooks.fire 2021-03-11 21:43:11 -05:00
Julian Lam
00a68a9548 feat: add additional flag hooks [breaking]
`action:flags.create` on initial flag creation
`action:flags.notify` on notification to admins and moderators
`action:flags.addReport` on flag report addition (called during initial flag create, too)
2021-03-02 10:09:30 -05:00
Barış Soner Uşaklı
069ac60f62 feat: add uid of user who created flag to action:flags.create 2021-03-01 19:02:00 -05:00
Julian Lam
783786cf8c fix: do not blindly escape a notification's bodyLong
For 7+ years we were escaping this value, but it is in many cases already sanitized (as it may be a post content). For those cases when it is not, I now run it through parse.raw.

Instead of escaping, it now strips p, img, and a tags.
2021-02-09 11:16:40 -05:00
Peter Jaszkowiak
5c2f0f0557 chore: eslint no-restricted-syntax 2021-02-08 18:06:44 -05:00
Peter Jaszkowiak
dab3b23575 chore: eslint no-var, vars-on-top 2021-02-08 18:06:44 -05:00
Peter Jaszkowiak
b56d9e12b5 chore: eslint prefer-arrow-callback 2021-02-08 18:06:44 -05:00
Peter Jaszkowiak
707b55b6a5 chore: eslint prefer-template 2021-02-08 18:06:44 -05:00
Julian Lam
1603566bcc fix: filtering logic of flags [breaking]
When combining filters, the old logic assumed that every filter was
exclusive, unless that filter contained multiple items, in which
case it was added to a list of "or" filters that returned all
matching flags.

A fault was discovered in that if you passed in multiple "or"
states, it did not return flags with the expected filtering.

e.g. open flags, closed flags, flags of cid 1, flags of cid 2

This could return open flags of cid 3, since all of the filters
were "OR"'d.

This logic change updates the behaviour so disparate OR sets are
intersected (ANDed).
2021-01-25 11:29:00 -05:00
Julian Lam
6b1c97db79 feat: feature flag for auto-resolving a user's flags on ban [breaking]
The default behaviour has now been changed to 'off'. Going forward, a user's flags will no longer automatically resolve on ban.
2021-01-25 11:07:29 -05:00
Julian Lam
4ede18ce5f fix: broken test caused by errant .pop(), missing await 2021-01-08 14:15:54 -05:00
Julian Lam
6a1311b4bc refactor: flags lib to have a separate getFlagIdsWithFilters method
added quick filter for unresolved flags
2021-01-08 14:15:54 -05:00
Julian Lam
1e7cf1cbc4 fix: #8971, disallow flags of privileged users (mods, gmods, admins) 2020-11-27 11:54:32 -05:00
Barış Soner Uşaklı
b8cafefce2 fix: winston usages 2020-11-26 13:56:34 -05:00
Julian Lam
6e2da9966e refactor: move plugin hook methods to plugin.hooks.* 2020-11-20 16:32:39 -05:00
Barış Soner Uşaklı
a6afcfd531 feat: #8475, allow flagging self posts
dont count flags towards self posts
dont allow flagging your own account
2020-11-17 21:28:32 -05:00
Julian Lam
0c20351702 feat: additional sorting options for flags
+ upvotes, +downvotes, +replies
2020-08-31 17:21:15 -04:00
Barış Soner Uşaklı
354e6ccc66 feat: banning a user will resolve their post flags 2020-08-22 17:34:19 -04:00
Barış Soner Uşaklı
91d9333a50 fix: username, email history disappering if content was deleted 2020-08-22 17:13:26 -04:00
Julian Lam
346db0d84d feat: flags list sorting, closes #8569 2020-08-18 21:03:59 -04:00
Julian Lam
9c70b6620e feat: pass uid into filter:flags.list 2020-08-14 16:27:02 -04:00
Julian Lam
6c00ec8435 refactor: removed rather redundant flag reporters zset 2020-07-31 11:38:05 -04:00
Julian Lam
0f2b6f1ff7 fix: bug; additional reports could be added by the same user repeatedly 2020-07-31 11:38:05 -04:00
Barış Soner Uşaklı
8bd63f61e0 feat: resolve flag on delete/purge/ban/delete account 2020-07-25 18:26:09 -04:00
Barış Soner Uşaklı
af91c26a6f refactor: get rid of bind calls 2020-07-25 09:14:13 -04:00
Julian Lam
55b0e902fb feat: consolidation of flags to reduce flagspam, #8510
Squashed commit of the following:

commit c6d0939620
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 24 13:41:32 2020 -0400

    fix: more tests

commit 32f9af2a87
Merge: e50907535 4eae927d1
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 24 10:53:04 2020 -0400

    Merge remote-tracking branch 'origin/master' into singleton-flags

commit e509075351
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 24 10:52:46 2020 -0400

    fix: controllers-admin test

commit fd5af99e30
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 17 17:26:55 2020 -0400

    fix(tests): dummy commit to trigger travisCI

commit c452a6ffcf
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 17 17:05:09 2020 -0400

    fix(openapi): openapi spec changes

commit 8089a74e89
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 17 15:48:00 2020 -0400

    fix: reversing the order of reports for display purposes

commit a099892b37
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 17 15:45:44 2020 -0400

    refactor: run all flag creation calls in a single batch

commit b24999682f
Author: Julian Lam <julian@nodebb.org>
Date:   Fri Jul 17 15:08:23 2020 -0400

    feat: handling multiple reporters per flag, #8510

commit 08c75c0200
Author: Julian Lam <julian@nodebb.org>
Date:   Thu Jul 16 20:53:18 2020 -0400

    feat: upgrade script for #8510
2020-07-24 14:10:37 -04:00
Julian Lam
e3e55f25d0 refactor: flag sanity checks, +feat: flag limits
- Added new config flag:limitPerTarget, to disallow flags after an item has
  already been flagged x times (default 0, or infinite)
- New zset flags:byTarget, score is the number of times a flag has been made
  against that item
- "already-flagged" translation key removed, now "post-already-flagged" or
  "user-already-flagged" -- this fixed bug where flagging a user you've already
  flagged would tell you you've already flagged this post already.
- Refactored Flags.canFlag to throw errors only, instead of returning boolean
- Updated ACP form inputs for reputation settings page to be more bootstrappy
- +1 upgrade script
2020-07-15 17:10:49 -04:00
Julian Lam
1441720962 feat: logic for flag note editing, #8499 2020-07-14 13:38:28 -04:00
Julian Lam
f85a45c722 feat: logic for flag note deletion, #8499 2020-07-14 13:38:28 -04:00
Barış Soner Uşaklı
e80379dc0e feat: display stack trace on winston.error 2020-06-20 23:32:12 -04:00