From d95d15598847c7f020aa056e7e6e0c02d2bbf732 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 1 Jul 2020 16:05:30 +0200 Subject: Use 3 tables to represent abuses --- shared/models/activitypub/activity.ts | 10 ++-- shared/models/activitypub/objects/abuse-object.ts | 12 +++++ .../models/activitypub/objects/common-objects.ts | 4 +- shared/models/activitypub/objects/index.ts | 4 +- .../activitypub/objects/video-abuse-object.ts | 10 ---- shared/models/blocklist/account-block.model.ts | 7 --- shared/models/blocklist/index.ts | 2 - shared/models/blocklist/server-block.model.ts | 9 ---- shared/models/index.ts | 3 +- .../models/moderation/abuse/abuse-create.model.ts | 26 +++++++++++ shared/models/moderation/abuse/abuse-filter.ts | 1 + .../models/moderation/abuse/abuse-reason.model.ts | 33 ++++++++++++++ .../models/moderation/abuse/abuse-state.model.ts | 5 ++ .../models/moderation/abuse/abuse-update.model.ts | 7 +++ .../models/moderation/abuse/abuse-video-is.type.ts | 1 + shared/models/moderation/abuse/abuse.model.ts | 53 ++++++++++++++++++++++ shared/models/moderation/abuse/index.ts | 6 +++ shared/models/moderation/account-block.model.ts | 7 +++ shared/models/moderation/index.ts | 3 ++ shared/models/moderation/server-block.model.ts | 9 ++++ shared/models/users/user-notification.model.ts | 15 +++++- shared/models/users/user-right.enum.ts | 2 +- shared/models/users/user-role.ts | 2 +- shared/models/videos/abuse/index.ts | 6 --- .../videos/abuse/video-abuse-create.model.ts | 8 ---- .../videos/abuse/video-abuse-reason.model.ts | 33 -------------- .../models/videos/abuse/video-abuse-state.model.ts | 5 -- .../videos/abuse/video-abuse-update.model.ts | 6 --- .../videos/abuse/video-abuse-video-is.type.ts | 1 - shared/models/videos/abuse/video-abuse.model.ts | 38 ---------------- shared/models/videos/index.ts | 1 - 31 files changed, 188 insertions(+), 141 deletions(-) create mode 100644 shared/models/activitypub/objects/abuse-object.ts delete mode 100644 shared/models/activitypub/objects/video-abuse-object.ts delete mode 100644 shared/models/blocklist/account-block.model.ts delete mode 100644 shared/models/blocklist/index.ts delete mode 100644 shared/models/blocklist/server-block.model.ts create mode 100644 shared/models/moderation/abuse/abuse-create.model.ts create mode 100644 shared/models/moderation/abuse/abuse-filter.ts create mode 100644 shared/models/moderation/abuse/abuse-reason.model.ts create mode 100644 shared/models/moderation/abuse/abuse-state.model.ts create mode 100644 shared/models/moderation/abuse/abuse-update.model.ts create mode 100644 shared/models/moderation/abuse/abuse-video-is.type.ts create mode 100644 shared/models/moderation/abuse/abuse.model.ts create mode 100644 shared/models/moderation/abuse/index.ts create mode 100644 shared/models/moderation/account-block.model.ts create mode 100644 shared/models/moderation/index.ts create mode 100644 shared/models/moderation/server-block.model.ts delete mode 100644 shared/models/videos/abuse/index.ts delete mode 100644 shared/models/videos/abuse/video-abuse-create.model.ts delete mode 100644 shared/models/videos/abuse/video-abuse-reason.model.ts delete mode 100644 shared/models/videos/abuse/video-abuse-state.model.ts delete mode 100644 shared/models/videos/abuse/video-abuse-update.model.ts delete mode 100644 shared/models/videos/abuse/video-abuse-video-is.type.ts delete mode 100644 shared/models/videos/abuse/video-abuse.model.ts (limited to 'shared/models') diff --git a/shared/models/activitypub/activity.ts b/shared/models/activitypub/activity.ts index 31b9e4673..5b4ce214a 100644 --- a/shared/models/activitypub/activity.ts +++ b/shared/models/activitypub/activity.ts @@ -1,12 +1,12 @@ import { ActivityPubActor } from './activitypub-actor' import { ActivityPubSignature } from './activitypub-signature' -import { CacheFileObject, VideoTorrentObject, ActivityFlagReasonObject } from './objects' +import { ActivityFlagReasonObject, CacheFileObject, VideoTorrentObject } from './objects' +import { AbuseObject } from './objects/abuse-object' import { DislikeObject } from './objects/dislike-object' -import { VideoAbuseObject } from './objects/video-abuse-object' -import { VideoCommentObject } from './objects/video-comment-object' -import { ViewObject } from './objects/view-object' import { APObject } from './objects/object.model' import { PlaylistObject } from './objects/playlist-object' +import { VideoCommentObject } from './objects/video-comment-object' +import { ViewObject } from './objects/view-object' export type Activity = ActivityCreate | @@ -53,7 +53,7 @@ export interface BaseActivity { export interface ActivityCreate extends BaseActivity { type: 'Create' - object: VideoTorrentObject | VideoAbuseObject | ViewObject | DislikeObject | VideoCommentObject | CacheFileObject | PlaylistObject + object: VideoTorrentObject | AbuseObject | ViewObject | DislikeObject | VideoCommentObject | CacheFileObject | PlaylistObject } export interface ActivityUpdate extends BaseActivity { diff --git a/shared/models/activitypub/objects/abuse-object.ts b/shared/models/activitypub/objects/abuse-object.ts new file mode 100644 index 000000000..ad45cc064 --- /dev/null +++ b/shared/models/activitypub/objects/abuse-object.ts @@ -0,0 +1,12 @@ +import { ActivityFlagReasonObject } from './common-objects' + +export interface AbuseObject { + type: 'Flag' + content: string + object: string | string[] + + tag?: ActivityFlagReasonObject[] + + startAt?: number + endAt?: number +} diff --git a/shared/models/activitypub/objects/common-objects.ts b/shared/models/activitypub/objects/common-objects.ts index 096d422ea..711ce45f4 100644 --- a/shared/models/activitypub/objects/common-objects.ts +++ b/shared/models/activitypub/objects/common-objects.ts @@ -1,4 +1,4 @@ -import { VideoAbusePredefinedReasonsString } from '@shared/models/videos' +import { AbusePredefinedReasonsString } from '@shared/models' export interface ActivityIdentifierObject { identifier: string @@ -85,7 +85,7 @@ export interface ActivityMentionObject { export interface ActivityFlagReasonObject { type: 'Hashtag' - name: VideoAbusePredefinedReasonsString + name: AbusePredefinedReasonsString } export type ActivityTagObject = diff --git a/shared/models/activitypub/objects/index.ts b/shared/models/activitypub/objects/index.ts index fba61e12f..a6a20e87a 100644 --- a/shared/models/activitypub/objects/index.ts +++ b/shared/models/activitypub/objects/index.ts @@ -1,6 +1,6 @@ +export * from './abuse-object' export * from './cache-file-object' export * from './common-objects' -export * from './video-abuse-object' +export * from './dislike-object' export * from './video-torrent-object' export * from './view-object' -export * from './dislike-object' diff --git a/shared/models/activitypub/objects/video-abuse-object.ts b/shared/models/activitypub/objects/video-abuse-object.ts deleted file mode 100644 index 73add8ef4..000000000 --- a/shared/models/activitypub/objects/video-abuse-object.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ActivityFlagReasonObject } from './common-objects' - -export interface VideoAbuseObject { - type: 'Flag' - content: string - object: string | string[] - tag?: ActivityFlagReasonObject[] - startAt?: number - endAt?: number -} diff --git a/shared/models/blocklist/account-block.model.ts b/shared/models/blocklist/account-block.model.ts deleted file mode 100644 index a942ed614..000000000 --- a/shared/models/blocklist/account-block.model.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Account } from '../actors' - -export interface AccountBlock { - byAccount: Account - blockedAccount: Account - createdAt: Date | string -} diff --git a/shared/models/blocklist/index.ts b/shared/models/blocklist/index.ts deleted file mode 100644 index fc7873270..000000000 --- a/shared/models/blocklist/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './account-block.model' -export * from './server-block.model' diff --git a/shared/models/blocklist/server-block.model.ts b/shared/models/blocklist/server-block.model.ts deleted file mode 100644 index a8b8af0b7..000000000 --- a/shared/models/blocklist/server-block.model.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Account } from '../actors' - -export interface ServerBlock { - byAccount: Account - blockedServer: { - host: string - } - createdAt: Date | string -} diff --git a/shared/models/index.ts b/shared/models/index.ts index 3d4bdedde..a68f57148 100644 --- a/shared/models/index.ts +++ b/shared/models/index.ts @@ -1,7 +1,7 @@ export * from './activitypub' export * from './actors' export * from './avatars' -export * from './blocklist' +export * from './moderation' export * from './bulk' export * from './redundancy' export * from './users' @@ -14,4 +14,3 @@ export * from './search' export * from './server' export * from './oauth-client-local.model' export * from './result-list.model' -export * from './server/server-config.model' diff --git a/shared/models/moderation/abuse/abuse-create.model.ts b/shared/models/moderation/abuse/abuse-create.model.ts new file mode 100644 index 000000000..c0d04e46d --- /dev/null +++ b/shared/models/moderation/abuse/abuse-create.model.ts @@ -0,0 +1,26 @@ +import { AbusePredefinedReasonsString } from './abuse-reason.model' + +export interface AbuseCreate { + accountId: number + + reason: string + predefinedReasons?: AbusePredefinedReasonsString[] + + video?: { + id: number + startAt?: number + endAt?: number + } + + comment?: { + id: number + } +} + +// FIXME: deprecated in 2.3. Remove it +export interface VideoAbuseCreate { + reason: string + predefinedReasons?: AbusePredefinedReasonsString[] + startAt?: number + endAt?: number +} diff --git a/shared/models/moderation/abuse/abuse-filter.ts b/shared/models/moderation/abuse/abuse-filter.ts new file mode 100644 index 000000000..03303bbab --- /dev/null +++ b/shared/models/moderation/abuse/abuse-filter.ts @@ -0,0 +1 @@ +export type AbuseFilter = 'video' | 'comment' diff --git a/shared/models/moderation/abuse/abuse-reason.model.ts b/shared/models/moderation/abuse/abuse-reason.model.ts new file mode 100644 index 000000000..36875969d --- /dev/null +++ b/shared/models/moderation/abuse/abuse-reason.model.ts @@ -0,0 +1,33 @@ +export enum AbusePredefinedReasons { + VIOLENT_OR_REPULSIVE = 1, + HATEFUL_OR_ABUSIVE, + SPAM_OR_MISLEADING, + PRIVACY, + RIGHTS, + SERVER_RULES, + THUMBNAILS, + CAPTIONS +} + +export type AbusePredefinedReasonsString = + 'violentOrRepulsive' | + 'hatefulOrAbusive' | + 'spamOrMisleading' | + 'privacy' | + 'rights' | + 'serverRules' | + 'thumbnails' | + 'captions' + +export const abusePredefinedReasonsMap: { + [key in AbusePredefinedReasonsString]: AbusePredefinedReasons +} = { + violentOrRepulsive: AbusePredefinedReasons.VIOLENT_OR_REPULSIVE, + hatefulOrAbusive: AbusePredefinedReasons.HATEFUL_OR_ABUSIVE, + spamOrMisleading: AbusePredefinedReasons.SPAM_OR_MISLEADING, + privacy: AbusePredefinedReasons.PRIVACY, + rights: AbusePredefinedReasons.RIGHTS, + serverRules: AbusePredefinedReasons.SERVER_RULES, + thumbnails: AbusePredefinedReasons.THUMBNAILS, + captions: AbusePredefinedReasons.CAPTIONS +} diff --git a/shared/models/moderation/abuse/abuse-state.model.ts b/shared/models/moderation/abuse/abuse-state.model.ts new file mode 100644 index 000000000..b00cccad8 --- /dev/null +++ b/shared/models/moderation/abuse/abuse-state.model.ts @@ -0,0 +1,5 @@ +export enum AbuseState { + PENDING = 1, + REJECTED = 2, + ACCEPTED = 3 +} diff --git a/shared/models/moderation/abuse/abuse-update.model.ts b/shared/models/moderation/abuse/abuse-update.model.ts new file mode 100644 index 000000000..4360fe7ac --- /dev/null +++ b/shared/models/moderation/abuse/abuse-update.model.ts @@ -0,0 +1,7 @@ +import { AbuseState } from './abuse-state.model' + +export interface AbuseUpdate { + moderationComment?: string + + state?: AbuseState +} diff --git a/shared/models/moderation/abuse/abuse-video-is.type.ts b/shared/models/moderation/abuse/abuse-video-is.type.ts new file mode 100644 index 000000000..74937f3b9 --- /dev/null +++ b/shared/models/moderation/abuse/abuse-video-is.type.ts @@ -0,0 +1 @@ +export type AbuseVideoIs = 'deleted' | 'blacklisted' diff --git a/shared/models/moderation/abuse/abuse.model.ts b/shared/models/moderation/abuse/abuse.model.ts new file mode 100644 index 000000000..9ff150c4a --- /dev/null +++ b/shared/models/moderation/abuse/abuse.model.ts @@ -0,0 +1,53 @@ +import { Account } from '../../actors/account.model' +import { AbuseState } from './abuse-state.model' +import { AbusePredefinedReasonsString } from './abuse-reason.model' +import { VideoConstant } from '../../videos/video-constant.model' +import { VideoChannel } from '../../videos/channel/video-channel.model' + +export interface VideoAbuse { + id: number + name: string + uuid: string + nsfw: boolean + deleted: boolean + blacklisted: boolean + + startAt: number | null + endAt: number | null + + thumbnailPath?: string + channel?: VideoChannel +} + +export interface VideoCommentAbuse { + id: number + account?: Account + text: string + deleted: boolean +} + +export interface Abuse { + id: number + reason: string + predefinedReasons?: AbusePredefinedReasonsString[] + reporterAccount: Account + + state: VideoConstant + moderationComment?: string + + video?: VideoAbuse + comment?: VideoCommentAbuse + + createdAt: Date + updatedAt: Date + + // FIXME: deprecated in 2.3, remove this + startAt: null + endAt: null + + count?: number + nth?: number + + countReportsForReporter?: number + countReportsForReportee?: number +} diff --git a/shared/models/moderation/abuse/index.ts b/shared/models/moderation/abuse/index.ts new file mode 100644 index 000000000..32a6b4e6c --- /dev/null +++ b/shared/models/moderation/abuse/index.ts @@ -0,0 +1,6 @@ +export * from './abuse-create.model' +export * from './abuse-reason.model' +export * from './abuse-state.model' +export * from './abuse-update.model' +export * from './abuse-video-is.type' +export * from './abuse.model' diff --git a/shared/models/moderation/account-block.model.ts b/shared/models/moderation/account-block.model.ts new file mode 100644 index 000000000..a942ed614 --- /dev/null +++ b/shared/models/moderation/account-block.model.ts @@ -0,0 +1,7 @@ +import { Account } from '../actors' + +export interface AccountBlock { + byAccount: Account + blockedAccount: Account + createdAt: Date | string +} diff --git a/shared/models/moderation/index.ts b/shared/models/moderation/index.ts new file mode 100644 index 000000000..8b6042e97 --- /dev/null +++ b/shared/models/moderation/index.ts @@ -0,0 +1,3 @@ +export * from './abuse' +export * from './account-block.model' +export * from './server-block.model' diff --git a/shared/models/moderation/server-block.model.ts b/shared/models/moderation/server-block.model.ts new file mode 100644 index 000000000..a8b8af0b7 --- /dev/null +++ b/shared/models/moderation/server-block.model.ts @@ -0,0 +1,9 @@ +import { Account } from '../actors' + +export interface ServerBlock { + byAccount: Account + blockedServer: { + host: string + } + createdAt: Date | string +} diff --git a/shared/models/users/user-notification.model.ts b/shared/models/users/user-notification.model.ts index e9be1ca7f..39090f5a1 100644 --- a/shared/models/users/user-notification.model.ts +++ b/shared/models/users/user-notification.model.ts @@ -64,9 +64,20 @@ export interface UserNotification { video: VideoInfo } - videoAbuse?: { + abuse?: { id: number - video: VideoInfo + + video?: VideoInfo + + comment?: { + threadId: number + + video: { + uuid: string + } + } + + account?: ActorInfo } videoBlacklist?: { diff --git a/shared/models/users/user-right.enum.ts b/shared/models/users/user-right.enum.ts index 2f88a65de..4a7ae4373 100644 --- a/shared/models/users/user-right.enum.ts +++ b/shared/models/users/user-right.enum.ts @@ -11,7 +11,7 @@ export enum UserRight { MANAGE_SERVER_REDUNDANCY, - MANAGE_VIDEO_ABUSES, + MANAGE_ABUSES, MANAGE_JOBS, diff --git a/shared/models/users/user-role.ts b/shared/models/users/user-role.ts index 2b08b5850..772988c0c 100644 --- a/shared/models/users/user-role.ts +++ b/shared/models/users/user-role.ts @@ -20,7 +20,7 @@ const userRoleRights: { [ id in UserRole ]: UserRight[] } = { [UserRole.MODERATOR]: [ UserRight.MANAGE_VIDEO_BLACKLIST, - UserRight.MANAGE_VIDEO_ABUSES, + UserRight.MANAGE_ABUSES, UserRight.REMOVE_ANY_VIDEO, UserRight.REMOVE_ANY_VIDEO_CHANNEL, UserRight.REMOVE_ANY_VIDEO_PLAYLIST, diff --git a/shared/models/videos/abuse/index.ts b/shared/models/videos/abuse/index.ts deleted file mode 100644 index f70bc736f..000000000 --- a/shared/models/videos/abuse/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './video-abuse-create.model' -export * from './video-abuse-reason.model' -export * from './video-abuse-state.model' -export * from './video-abuse-update.model' -export * from './video-abuse-video-is.type' -export * from './video-abuse.model' diff --git a/shared/models/videos/abuse/video-abuse-create.model.ts b/shared/models/videos/abuse/video-abuse-create.model.ts deleted file mode 100644 index c93cb8b2c..000000000 --- a/shared/models/videos/abuse/video-abuse-create.model.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { VideoAbusePredefinedReasonsString } from './video-abuse-reason.model' - -export interface VideoAbuseCreate { - reason: string - predefinedReasons?: VideoAbusePredefinedReasonsString[] - startAt?: number - endAt?: number -} diff --git a/shared/models/videos/abuse/video-abuse-reason.model.ts b/shared/models/videos/abuse/video-abuse-reason.model.ts deleted file mode 100644 index 9064f0c1a..000000000 --- a/shared/models/videos/abuse/video-abuse-reason.model.ts +++ /dev/null @@ -1,33 +0,0 @@ -export enum VideoAbusePredefinedReasons { - VIOLENT_OR_REPULSIVE = 1, - HATEFUL_OR_ABUSIVE, - SPAM_OR_MISLEADING, - PRIVACY, - RIGHTS, - SERVER_RULES, - THUMBNAILS, - CAPTIONS -} - -export type VideoAbusePredefinedReasonsString = - 'violentOrRepulsive' | - 'hatefulOrAbusive' | - 'spamOrMisleading' | - 'privacy' | - 'rights' | - 'serverRules' | - 'thumbnails' | - 'captions' - -export const videoAbusePredefinedReasonsMap: { - [key in VideoAbusePredefinedReasonsString]: VideoAbusePredefinedReasons -} = { - violentOrRepulsive: VideoAbusePredefinedReasons.VIOLENT_OR_REPULSIVE, - hatefulOrAbusive: VideoAbusePredefinedReasons.HATEFUL_OR_ABUSIVE, - spamOrMisleading: VideoAbusePredefinedReasons.SPAM_OR_MISLEADING, - privacy: VideoAbusePredefinedReasons.PRIVACY, - rights: VideoAbusePredefinedReasons.RIGHTS, - serverRules: VideoAbusePredefinedReasons.SERVER_RULES, - thumbnails: VideoAbusePredefinedReasons.THUMBNAILS, - captions: VideoAbusePredefinedReasons.CAPTIONS -} diff --git a/shared/models/videos/abuse/video-abuse-state.model.ts b/shared/models/videos/abuse/video-abuse-state.model.ts deleted file mode 100644 index 529f034bd..000000000 --- a/shared/models/videos/abuse/video-abuse-state.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum VideoAbuseState { - PENDING = 1, - REJECTED = 2, - ACCEPTED = 3 -} diff --git a/shared/models/videos/abuse/video-abuse-update.model.ts b/shared/models/videos/abuse/video-abuse-update.model.ts deleted file mode 100644 index 9b32aae48..000000000 --- a/shared/models/videos/abuse/video-abuse-update.model.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { VideoAbuseState } from './video-abuse-state.model' - -export interface VideoAbuseUpdate { - moderationComment?: string - state?: VideoAbuseState -} diff --git a/shared/models/videos/abuse/video-abuse-video-is.type.ts b/shared/models/videos/abuse/video-abuse-video-is.type.ts deleted file mode 100644 index e86018993..000000000 --- a/shared/models/videos/abuse/video-abuse-video-is.type.ts +++ /dev/null @@ -1 +0,0 @@ -export type VideoAbuseVideoIs = 'deleted' | 'blacklisted' diff --git a/shared/models/videos/abuse/video-abuse.model.ts b/shared/models/videos/abuse/video-abuse.model.ts deleted file mode 100644 index 38605dcac..000000000 --- a/shared/models/videos/abuse/video-abuse.model.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Account } from '../../actors/index' -import { VideoConstant } from '../video-constant.model' -import { VideoAbuseState } from './video-abuse-state.model' -import { VideoChannel } from '../channel/video-channel.model' -import { VideoAbusePredefinedReasonsString } from './video-abuse-reason.model' - -export interface VideoAbuse { - id: number - reason: string - predefinedReasons?: VideoAbusePredefinedReasonsString[] - reporterAccount: Account - - state: VideoConstant - moderationComment?: string - - video: { - id: number - name: string - uuid: string - nsfw: boolean - deleted: boolean - blacklisted: boolean - thumbnailPath?: string - channel?: VideoChannel - } - - createdAt: Date - updatedAt: Date - - startAt: number - endAt: number - - count?: number - nth?: number - - countReportsForReporter?: number - countReportsForReportee?: number -} diff --git a/shared/models/videos/index.ts b/shared/models/videos/index.ts index e1d96b40a..20b9638ab 100644 --- a/shared/models/videos/index.ts +++ b/shared/models/videos/index.ts @@ -1,4 +1,3 @@ -export * from './abuse' export * from './blacklist' export * from './caption' export * from './channel' -- cgit v1.2.3