preserve original variable names server-side

This commit is contained in:
Rigel Kent 2020-06-09 16:07:10 +02:00
parent 5baee5fca4
commit 3487330d30
No known key found for this signature in database
GPG Key ID: 5E53E96A494E452F
34 changed files with 89 additions and 89 deletions

View File

@ -37,7 +37,7 @@ export class AdminComponent implements OnInit {
} }
hasVideoBlocklistRight () { hasVideoBlocklistRight () {
return this.auth.getUser().hasRight(UserRight.MANAGE_VIDEO_BLOCKS) return this.auth.getUser().hasRight(UserRight.MANAGE_VIDEO_BLACKLIST)
} }
hasConfigRight () { hasConfigRight () {

View File

@ -25,7 +25,7 @@ export class ModerationComponent implements OnInit {
} }
hasVideoBlocklistRight () { hasVideoBlocklistRight () {
return this.auth.getUser().hasRight(UserRight.MANAGE_VIDEO_BLOCKS) return this.auth.getUser().hasRight(UserRight.MANAGE_VIDEO_BLACKLIST)
} }
hasAccountsBlocklistRight () { hasAccountsBlocklistRight () {

View File

@ -57,7 +57,7 @@ export const ModerationRoutes: Routes = [
component: VideoBlockListComponent, component: VideoBlockListComponent,
canActivate: [ UserRightGuard ], canActivate: [ UserRightGuard ],
data: { data: {
userRight: UserRight.MANAGE_VIDEO_BLOCKS, userRight: UserRight.MANAGE_VIDEO_BLACKLIST,
meta: { meta: {
title: 'Videos blocked' title: 'Videos blocked'
} }

View File

@ -107,7 +107,7 @@ export class VideoAbuseListComponent extends RestTable implements OnInit, AfterV
this.videoBlocklistService.blockVideo(videoAbuse.video.id, undefined, true) this.videoBlocklistService.blockVideo(videoAbuse.video.id, undefined, true)
.subscribe( .subscribe(
() => { () => {
this.notifier.success(this.i18n('Video blocklisted.')) this.notifier.success(this.i18n('Video blocked.'))
this.updateVideoAbuseState(videoAbuse, VideoAbuseState.ACCEPTED) this.updateVideoAbuseState(videoAbuse, VideoAbuseState.ACCEPTED)
}, },
@ -123,7 +123,7 @@ export class VideoAbuseListComponent extends RestTable implements OnInit, AfterV
this.videoBlocklistService.unblockVideo(videoAbuse.video.id) this.videoBlocklistService.unblockVideo(videoAbuse.video.id)
.subscribe( .subscribe(
() => { () => {
this.notifier.success(this.i18n('Video unblocklisted.')) this.notifier.success(this.i18n('Video unblocked.'))
this.updateVideoAbuseState(videoAbuse, VideoAbuseState.ACCEPTED) this.updateVideoAbuseState(videoAbuse, VideoAbuseState.ACCEPTED)
}, },

View File

@ -3,7 +3,7 @@ import { SortMeta } from 'primeng/api'
import { Notifier, ServerService } from '@app/core' import { Notifier, ServerService } from '@app/core'
import { ConfirmService } from '../../../core' import { ConfirmService } from '../../../core'
import { RestPagination, RestTable, VideoBlockService } from '../../../shared' import { RestPagination, RestTable, VideoBlockService } from '../../../shared'
import { VideoBlocklist, VideoBlockType } from '../../../../../../shared' import { VideoBlacklist, VideoBlacklistType } from '../../../../../../shared'
import { I18n } from '@ngx-translate/i18n-polyfill' import { I18n } from '@ngx-translate/i18n-polyfill'
import { DropdownAction } from '../../../shared/buttons/action-dropdown.component' import { DropdownAction } from '../../../shared/buttons/action-dropdown.component'
import { Video } from '../../../shared/video/video.model' import { Video } from '../../../shared/video/video.model'
@ -18,13 +18,13 @@ import { VideoService } from '@app/shared/video/video.service'
styleUrls: [ '../moderation.component.scss', './video-block-list.component.scss' ] styleUrls: [ '../moderation.component.scss', './video-block-list.component.scss' ]
}) })
export class VideoBlockListComponent extends RestTable implements OnInit { export class VideoBlockListComponent extends RestTable implements OnInit {
blocklist: (VideoBlocklist & { reasonHtml?: string })[] = [] blocklist: (VideoBlacklist & { reasonHtml?: string })[] = []
totalRecords = 0 totalRecords = 0
sort: SortMeta = { field: 'createdAt', order: -1 } sort: SortMeta = { field: 'createdAt', order: -1 }
pagination: RestPagination = { count: this.rowsPerPage, start: 0 } pagination: RestPagination = { count: this.rowsPerPage, start: 0 }
listBlockTypeFilter: VideoBlockType = undefined blocklistTypeFilter: VideoBlacklistType = undefined
videoBlocklistActions: DropdownAction<VideoBlocklist>[][] = [] videoBlocklistActions: DropdownAction<VideoBlacklist>[][] = []
constructor ( constructor (
private notifier: Notifier, private notifier: Notifier,
@ -99,7 +99,7 @@ export class VideoBlockListComponent extends RestTable implements OnInit {
.subscribe(config => { .subscribe(config => {
// don't filter if auto-blacklist is not enabled as this will be the only list // don't filter if auto-blacklist is not enabled as this will be the only list
if (config.autoBlacklist.videos.ofUsers.enabled) { if (config.autoBlacklist.videos.ofUsers.enabled) {
this.listBlockTypeFilter = VideoBlockType.MANUAL this.blocklistTypeFilter = VideoBlacklistType.MANUAL
} }
}) })
@ -141,7 +141,7 @@ export class VideoBlockListComponent extends RestTable implements OnInit {
return 'VideoBlockListComponent' return 'VideoBlockListComponent'
} }
getVideoUrl (videoBlock: VideoBlocklist) { getVideoUrl (videoBlock: VideoBlacklist) {
return Video.buildClientUrl(videoBlock.video.uuid) return Video.buildClientUrl(videoBlock.video.uuid)
} }
@ -155,7 +155,7 @@ export class VideoBlockListComponent extends RestTable implements OnInit {
return this.markdownRenderer.textMarkdownToHTML(text) return this.markdownRenderer.textMarkdownToHTML(text)
} }
async unblockVideo (entry: VideoBlocklist) { async unblockVideo (entry: VideoBlacklist) {
const confirmMessage = this.i18n( const confirmMessage = this.i18n(
'Do you really want to unblock this video? It will be available again in the videos list.' 'Do you really want to unblock this video? It will be available again in the videos list.'
) )

View File

@ -52,7 +52,7 @@ export class UserCreateComponent extends UserEdit implements OnInit {
role: this.userValidatorsService.USER_ROLE, role: this.userValidatorsService.USER_ROLE,
videoQuota: this.userValidatorsService.USER_VIDEO_QUOTA, videoQuota: this.userValidatorsService.USER_VIDEO_QUOTA,
videoQuotaDaily: this.userValidatorsService.USER_VIDEO_QUOTA_DAILY, videoQuotaDaily: this.userValidatorsService.USER_VIDEO_QUOTA_DAILY,
byPassAutoBlacklist: null byPassAutoBlock: null
}, defaultValues) }, defaultValues)
} }

View File

@ -164,7 +164,7 @@
<div class="form-group"> <div class="form-group">
<my-peertube-checkbox <my-peertube-checkbox
inputName="byPassAutoBlacklist" formControlName="byPassAutoBlacklist" inputName="byPassAutoBlock" formControlName="byPassAutoBlock"
i18n-labelText labelText="Doesn't need review before a video goes public" i18n-labelText labelText="Doesn't need review before a video goes public"
></my-peertube-checkbox> ></my-peertube-checkbox>
</div> </div>

View File

@ -88,7 +88,7 @@ export abstract class UserEdit extends FormReactive implements OnInit {
} }
protected buildAdminFlags (formValue: any) { protected buildAdminFlags (formValue: any) {
return formValue.byPassAutoBlacklist ? UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK : UserAdminFlag.NONE return formValue.byPassAutoBlock ? UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST : UserAdminFlag.NONE
} }
protected buildQuotaOptions () { protected buildQuotaOptions () {

View File

@ -56,7 +56,7 @@ export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy {
role: this.userValidatorsService.USER_ROLE, role: this.userValidatorsService.USER_ROLE,
videoQuota: this.userValidatorsService.USER_VIDEO_QUOTA, videoQuota: this.userValidatorsService.USER_VIDEO_QUOTA,
videoQuotaDaily: this.userValidatorsService.USER_VIDEO_QUOTA_DAILY, videoQuotaDaily: this.userValidatorsService.USER_VIDEO_QUOTA_DAILY,
byPassAutoBlacklist: null byPassAutoBlock: null
}, defaultValues) }, defaultValues)
this.paramsSub = this.route.params.subscribe(routeParams => { this.paramsSub = this.route.params.subscribe(routeParams => {
@ -125,7 +125,7 @@ export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy {
role: userJson.role.toString(), role: userJson.role.toString(),
videoQuota: userJson.videoQuota, videoQuota: userJson.videoQuota,
videoQuotaDaily: userJson.videoQuotaDaily, videoQuotaDaily: userJson.videoQuotaDaily,
byPassAutoBlacklist: userJson.adminFlags & UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK byPassAutoBlock: userJson.adminFlags & UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST
}) })
} }
} }

View File

@ -49,7 +49,7 @@ export class MyAccountNotificationPreferencesComponent implements OnInit {
this.rightNotifications = { this.rightNotifications = {
videoAbuseAsModerator: UserRight.MANAGE_VIDEO_ABUSES, videoAbuseAsModerator: UserRight.MANAGE_VIDEO_ABUSES,
videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLOCKS, videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST,
newUserRegistration: UserRight.MANAGE_USERS, newUserRegistration: UserRight.MANAGE_USERS,
newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW, newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW,
autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION

View File

@ -33,7 +33,7 @@ export class MenuComponent implements OnInit {
[UserRight.MANAGE_USERS]: '/admin/users', [UserRight.MANAGE_USERS]: '/admin/users',
[UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends', [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends',
[UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses', [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses',
[UserRight.MANAGE_VIDEO_BLOCKS]: '/admin/moderation/video-blocks', [UserRight.MANAGE_VIDEO_BLACKLIST]: '/admin/moderation/video-blocks',
[UserRight.MANAGE_JOBS]: '/admin/jobs', [UserRight.MANAGE_JOBS]: '/admin/jobs',
[UserRight.MANAGE_CONFIGURATION]: '/admin/config' [UserRight.MANAGE_CONFIGURATION]: '/admin/config'
} }
@ -131,7 +131,7 @@ export class MenuComponent implements OnInit {
UserRight.MANAGE_USERS, UserRight.MANAGE_USERS,
UserRight.MANAGE_SERVER_FOLLOW, UserRight.MANAGE_SERVER_FOLLOW,
UserRight.MANAGE_VIDEO_ABUSES, UserRight.MANAGE_VIDEO_ABUSES,
UserRight.MANAGE_VIDEO_BLOCKS, UserRight.MANAGE_VIDEO_BLACKLIST,
UserRight.MANAGE_JOBS, UserRight.MANAGE_JOBS,
UserRight.MANAGE_CONFIGURATION UserRight.MANAGE_CONFIGURATION
] ]

View File

@ -96,7 +96,7 @@ export class UserNotification implements UserNotificationServer {
this.videoUrl = this.buildVideoUrl(this.video) this.videoUrl = this.buildVideoUrl(this.video)
break break
case UserNotificationType.UNBLOCK_ON_MY_VIDEO: case UserNotificationType.UNBLACKLIST_ON_MY_VIDEO:
this.videoUrl = this.buildVideoUrl(this.video) this.videoUrl = this.buildVideoUrl(this.video)
break break
@ -112,7 +112,7 @@ export class UserNotification implements UserNotificationServer {
this.videoUrl = this.buildVideoUrl(this.videoAbuse.video) this.videoUrl = this.buildVideoUrl(this.videoAbuse.video)
break break
case UserNotificationType.VIDEO_AUTO_BLOCK_FOR_MODERATORS: case UserNotificationType.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS:
this.videoAutoBlacklistUrl = '/admin/moderation/video-auto-blacklist/list' this.videoAutoBlacklistUrl = '/admin/moderation/video-auto-blacklist/list'
// Backward compatibility where we did not assign videoBlacklist to this type of notification before // Backward compatibility where we did not assign videoBlacklist to this type of notification before
if (!this.videoBlacklist) this.videoBlacklist = { id: null, video: this.video } if (!this.videoBlacklist) this.videoBlacklist = { id: null, video: this.video }
@ -120,7 +120,7 @@ export class UserNotification implements UserNotificationServer {
this.videoUrl = this.buildVideoUrl(this.videoBlacklist.video) this.videoUrl = this.buildVideoUrl(this.videoBlacklist.video)
break break
case UserNotificationType.BLOCK_ON_MY_VIDEO: case UserNotificationType.BLACKLIST_ON_MY_VIDEO:
this.videoUrl = this.buildVideoUrl(this.videoBlacklist.video) this.videoUrl = this.buildVideoUrl(this.videoBlacklist.video)
break break

View File

@ -26,7 +26,7 @@
</ng-template> </ng-template>
</ng-container> </ng-container>
<ng-container *ngSwitchCase="UserNotificationType.UNBLOCK_ON_MY_VIDEO"> <ng-container *ngSwitchCase="UserNotificationType.UNBLACKLIST_ON_MY_VIDEO">
<my-global-icon iconName="undo"></my-global-icon> <my-global-icon iconName="undo"></my-global-icon>
<div class="message" i18n> <div class="message" i18n>
@ -34,7 +34,7 @@
</div> </div>
</ng-container> </ng-container>
<ng-container *ngSwitchCase="UserNotificationType.BLOCK_ON_MY_VIDEO"> <ng-container *ngSwitchCase="UserNotificationType.BLACKLIST_ON_MY_VIDEO">
<my-global-icon iconName="no"></my-global-icon> <my-global-icon iconName="no"></my-global-icon>
<div class="message" i18n> <div class="message" i18n>
@ -50,11 +50,11 @@
</div> </div>
</ng-container> </ng-container>
<ng-container *ngSwitchCase="UserNotificationType.VIDEO_AUTO_BLOCK_FOR_MODERATORS"> <ng-container *ngSwitchCase="UserNotificationType.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS">
<my-global-icon iconName="no"></my-global-icon> <my-global-icon iconName="no"></my-global-icon>
<div class="message" i18n> <div class="message" i18n>
The recently added video <a (click)="markAsRead(notification)" [routerLink]="notification.videoUrl">{{ notification.videoBlacklist.video.name }}</a> has been <a (click)="markAsRead(notification)" [routerLink]="notification.videoAutoBlacklistUrl">auto-blocked</a> The recently added video <a (click)="markAsRead(notification)" [routerLink]="notification.videoUrl">{{ notification.videoBlacklist.video.name }}</a> has been <a (click)="markAsRead(notification)" [routerLink]="notification.videoAutoBlacklistUrl">automatically blocked</a>
</div> </div>
</ng-container> </ng-container>

View File

@ -3,7 +3,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { SortMeta } from 'primeng/api' import { SortMeta } from 'primeng/api'
import { from as observableFrom, Observable } from 'rxjs' import { from as observableFrom, Observable } from 'rxjs'
import { VideoBlocklist, VideoBlockType, ResultList } from '../../../../../shared' import { VideoBlacklist, VideoBlacklistType, ResultList } from '../../../../../shared'
import { environment } from '../../../environments/environment' import { environment } from '../../../environments/environment'
import { RestExtractor, RestPagination, RestService } from '../rest' import { RestExtractor, RestPagination, RestService } from '../rest'
@ -21,8 +21,8 @@ export class VideoBlockService {
pagination: RestPagination pagination: RestPagination
sort: SortMeta sort: SortMeta
search?: string search?: string
type?: VideoBlockType type?: VideoBlacklistType
}): Observable<ResultList<VideoBlocklist>> { }): Observable<ResultList<VideoBlacklist>> {
const { pagination, sort, search, type } = options const { pagination, sort, search, type } = options
let params = new HttpParams() let params = new HttpParams()
@ -33,8 +33,8 @@ export class VideoBlockService {
type: { type: {
prefix: 'type:', prefix: 'type:',
handler: v => { handler: v => {
if (v === 'manual') return VideoBlockType.MANUAL if (v === 'manual') return VideoBlacklistType.MANUAL
if (v === 'auto') return VideoBlockType.AUTO_BEFORE_PUBLISHED if (v === 'auto') return VideoBlacklistType.AUTO_BEFORE_PUBLISHED
return undefined return undefined
} }
@ -44,7 +44,7 @@ export class VideoBlockService {
params = this.restService.addObjectParams(params, filters) params = this.restService.addObjectParams(params, filters)
} }
return this.authHttp.get<ResultList<VideoBlocklist>>(VideoBlockService.BASE_VIDEOS_URL + 'blacklist', { params }) return this.authHttp.get<ResultList<VideoBlacklist>>(VideoBlockService.BASE_VIDEOS_URL + 'blacklist', { params })
.pipe( .pipe(
map(res => this.restExtractor.convertResultListDateToHuman(res)), map(res => this.restExtractor.convertResultListDateToHuman(res)),
catchError(res => this.restExtractor.handleError(res)) catchError(res => this.restExtractor.handleError(res))

View File

@ -164,11 +164,11 @@ export class Video implements VideoServerModel {
} }
isBlockableBy (user: AuthUser) { isBlockableBy (user: AuthUser) {
return this.blacklisted !== true && user && user.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) === true return this.blacklisted !== true && user && user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) === true
} }
isUnblockableBy (user: AuthUser) { isUnblockableBy (user: AuthUser) {
return this.blacklisted === true && user && user.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) === true return this.blacklisted === true && user && user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) === true
} }
isUpdatableBy (user: AuthUser) { isUpdatableBy (user: AuthUser) {

View File

@ -335,7 +335,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
this.videoCaptionService.listCaptions(videoId) this.videoCaptionService.listCaptions(videoId)
]) ])
.pipe( .pipe(
// If 401, the video is private or blocklisted so redirect to 404 // If 401, the video is private or blocked so redirect to 404
catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ])) catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]))
) )
.subscribe(([ video, captionsResult ]) => { .subscribe(([ video, captionsResult ]) => {
@ -364,7 +364,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
this.playlistService.getVideoPlaylist(playlistId) this.playlistService.getVideoPlaylist(playlistId)
.pipe( .pipe(
// If 401, the video is private or blocklisted so redirect to 404 // If 401, the video is private or blocked so redirect to 404
catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ])) catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]))
) )
.subscribe(playlist => { .subscribe(playlist => {

View File

@ -23,14 +23,14 @@ const blacklistRouter = express.Router()
blacklistRouter.post('/:videoId/blacklist', blacklistRouter.post('/:videoId/blacklist',
authenticate, authenticate,
ensureUserHasRight(UserRight.MANAGE_VIDEO_BLOCKS), ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST),
asyncMiddleware(videosBlacklistAddValidator), asyncMiddleware(videosBlacklistAddValidator),
asyncMiddleware(addVideoToBlacklistController) asyncMiddleware(addVideoToBlacklistController)
) )
blacklistRouter.get('/blacklist', blacklistRouter.get('/blacklist',
authenticate, authenticate,
ensureUserHasRight(UserRight.MANAGE_VIDEO_BLOCKS), ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST),
paginationValidator, paginationValidator,
blacklistSortValidator, blacklistSortValidator,
setBlacklistSort, setBlacklistSort,
@ -41,14 +41,14 @@ blacklistRouter.get('/blacklist',
blacklistRouter.put('/:videoId/blacklist', blacklistRouter.put('/:videoId/blacklist',
authenticate, authenticate,
ensureUserHasRight(UserRight.MANAGE_VIDEO_BLOCKS), ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST),
asyncMiddleware(videosBlacklistUpdateValidator), asyncMiddleware(videosBlacklistUpdateValidator),
asyncMiddleware(updateVideoBlacklistController) asyncMiddleware(updateVideoBlacklistController)
) )
blacklistRouter.delete('/:videoId/blacklist', blacklistRouter.delete('/:videoId/blacklist',
authenticate, authenticate,
ensureUserHasRight(UserRight.MANAGE_VIDEO_BLOCKS), ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST),
asyncMiddleware(videosBlacklistRemoveValidator), asyncMiddleware(videosBlacklistRemoveValidator),
asyncMiddleware(removeVideoFromBlacklistController) asyncMiddleware(removeVideoFromBlacklistController)
) )

View File

@ -1,7 +1,7 @@
import validator from 'validator' import validator from 'validator'
import { exists } from './misc' import { exists } from './misc'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
import { VideoBlockType } from '../../../shared/models/videos' import { VideoBlacklistType } from '../../../shared/models/videos'
const VIDEO_BLACKLIST_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_BLACKLIST const VIDEO_BLACKLIST_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_BLACKLIST
@ -10,7 +10,7 @@ function isVideoBlacklistReasonValid (value: string) {
} }
function isVideoBlacklistTypeValid (value: any) { function isVideoBlacklistTypeValid (value: any) {
return exists(value) && validator.isInt('' + value) && VideoBlockType[value] !== undefined return exists(value) && validator.isInt('' + value) && VideoBlacklistType[value] !== undefined
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
import * as Sequelize from 'sequelize' import * as Sequelize from 'sequelize'
import { VideoBlockType } from '../../../shared/models/videos' import { VideoBlacklistType } from '../../../shared/models/videos'
async function up (utils: { async function up (utils: {
transaction: Sequelize.Transaction transaction: Sequelize.Transaction
@ -18,7 +18,7 @@ async function up (utils: {
} }
{ {
const query = 'UPDATE "videoBlacklist" SET "type" = ' + VideoBlockType.MANUAL const query = 'UPDATE "videoBlacklist" SET "type" = ' + VideoBlacklistType.MANUAL
await utils.sequelize.query(query) await utils.sequelize.query(query)
} }

View File

@ -387,7 +387,7 @@ class Notifier {
} }
private async notifyModeratorsOfVideoAutoBlacklist (videoBlacklist: MVideoBlacklistLightVideo) { private async notifyModeratorsOfVideoAutoBlacklist (videoBlacklist: MVideoBlacklistLightVideo) {
const moderators = await UserModel.listWithRight(UserRight.MANAGE_VIDEO_BLOCKS) const moderators = await UserModel.listWithRight(UserRight.MANAGE_VIDEO_BLACKLIST)
if (moderators.length === 0) return if (moderators.length === 0) return
logger.info('Notifying %s moderators of video auto-blacklist %s.', moderators.length, videoBlacklist.Video.url) logger.info('Notifying %s moderators of video auto-blacklist %s.', moderators.length, videoBlacklist.Video.url)
@ -398,7 +398,7 @@ class Notifier {
async function notificationCreator (user: MUserWithNotificationSetting) { async function notificationCreator (user: MUserWithNotificationSetting) {
const notification = await UserNotificationModel.create<UserNotificationModelForApi>({ const notification = await UserNotificationModel.create<UserNotificationModelForApi>({
type: UserNotificationType.VIDEO_AUTO_BLOCK_FOR_MODERATORS, type: UserNotificationType.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS,
userId: user.id, userId: user.id,
videoBlacklistId: videoBlacklist.id videoBlacklistId: videoBlacklist.id
}) })
@ -426,7 +426,7 @@ class Notifier {
async function notificationCreator (user: MUserWithNotificationSetting) { async function notificationCreator (user: MUserWithNotificationSetting) {
const notification = await UserNotificationModel.create<UserNotificationModelForApi>({ const notification = await UserNotificationModel.create<UserNotificationModelForApi>({
type: UserNotificationType.BLOCK_ON_MY_VIDEO, type: UserNotificationType.BLACKLIST_ON_MY_VIDEO,
userId: user.id, userId: user.id,
videoBlacklistId: videoBlacklist.id videoBlacklistId: videoBlacklist.id
}) })
@ -454,7 +454,7 @@ class Notifier {
async function notificationCreator (user: MUserWithNotificationSetting) { async function notificationCreator (user: MUserWithNotificationSetting) {
const notification = await UserNotificationModel.create<UserNotificationModelForApi>({ const notification = await UserNotificationModel.create<UserNotificationModelForApi>({
type: UserNotificationType.UNBLOCK_ON_MY_VIDEO, type: UserNotificationType.UNBLACKLIST_ON_MY_VIDEO,
userId: user.id, userId: user.id,
videoId: video.id videoId: video.id
}) })

View File

@ -8,7 +8,7 @@ import {
MVideoFullLight, MVideoFullLight,
MVideoWithBlacklistLight MVideoWithBlacklistLight
} from '@server/typings/models' } from '@server/typings/models'
import { UserRight, VideoBlacklistCreate, VideoBlockType } from '../../shared/models' import { UserRight, VideoBlacklistCreate, VideoBlacklistType } from '../../shared/models'
import { UserAdminFlag } from '../../shared/models/users/user-flag.model' import { UserAdminFlag } from '../../shared/models/users/user-flag.model'
import { logger } from '../helpers/logger' import { logger } from '../helpers/logger'
import { CONFIG } from '../initializers/config' import { CONFIG } from '../initializers/config'
@ -39,7 +39,7 @@ async function autoBlacklistVideoIfNeeded (parameters: {
videoId: video.id, videoId: video.id,
unfederated: true, unfederated: true,
reason: 'Auto-blacklisted. Moderator review required.', reason: 'Auto-blacklisted. Moderator review required.',
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
} }
const [ videoBlacklist ] = await VideoBlacklistModel.findOrCreate<MVideoBlacklistVideo>({ const [ videoBlacklist ] = await VideoBlacklistModel.findOrCreate<MVideoBlacklistVideo>({
where: { where: {
@ -64,7 +64,7 @@ async function blacklistVideo (videoInstance: MVideoAccountLight, options: Video
videoId: videoInstance.id, videoId: videoInstance.id,
unfederated: options.unfederate === true, unfederated: options.unfederate === true,
reason: options.reason, reason: options.reason,
type: VideoBlockType.MANUAL type: VideoBlacklistType.MANUAL
} }
) )
blacklist.Video = videoInstance blacklist.Video = videoInstance
@ -94,7 +94,7 @@ async function unblacklistVideo (videoBlacklist: MVideoBlacklist, video: MVideoF
Notifier.Instance.notifyOnVideoUnblacklist(video) Notifier.Instance.notifyOnVideoUnblacklist(video)
if (videoBlacklistType === VideoBlockType.AUTO_BEFORE_PUBLISHED) { if (videoBlacklistType === VideoBlacklistType.AUTO_BEFORE_PUBLISHED) {
Notifier.Instance.notifyOnVideoPublishedAfterRemovedFromAutoBlacklist(video) Notifier.Instance.notifyOnVideoPublishedAfterRemovedFromAutoBlacklist(video)
// Delete on object so new video notifications will send // Delete on object so new video notifications will send
@ -126,7 +126,7 @@ function autoBlacklistNeeded (parameters: {
if (!CONFIG.AUTO_BLACKLIST.VIDEOS.OF_USERS.ENABLED || !user) return false if (!CONFIG.AUTO_BLACKLIST.VIDEOS.OF_USERS.ENABLED || !user) return false
if (isRemote || isNew === false) return false if (isRemote || isNew === false) return false
if (user.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) || user.hasAdminFlag(UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK)) return false if (user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) || user.hasAdminFlag(UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST)) return false
return true return true
} }

View File

@ -739,11 +739,11 @@ export class UserModel extends Model<UserModel> {
const videoUserId = video.VideoChannel.Account.userId const videoUserId = video.VideoChannel.Account.userId
if (video.isBlacklisted()) { if (video.isBlacklisted()) {
return videoUserId === this.id || this.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) return videoUserId === this.id || this.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST)
} }
if (video.privacy === VideoPrivacy.PRIVATE) { if (video.privacy === VideoPrivacy.PRIVATE) {
return video.VideoChannel && videoUserId === this.id || this.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) return video.VideoChannel && videoUserId === this.id || this.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST)
} }
if (video.privacy === VideoPrivacy.INTERNAL) return true if (video.privacy === VideoPrivacy.INTERNAL) return true

View File

@ -3,7 +3,7 @@ import { getBlacklistSort, SortType, throwIfNotValid, searchAttribute } from '..
import { VideoModel } from './video' import { VideoModel } from './video'
import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel' import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel'
import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist' import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist'
import { VideoBlocklist, VideoBlockType } from '../../../shared/models/videos' import { VideoBlacklist, VideoBlacklistType } from '../../../shared/models/videos'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
import { FindOptions } from 'sequelize' import { FindOptions } from 'sequelize'
import { ThumbnailModel } from './thumbnail' import { ThumbnailModel } from './thumbnail'
@ -34,7 +34,7 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
@Default(null) @Default(null)
@Is('VideoBlacklistType', value => throwIfNotValid(value, isVideoBlacklistTypeValid, 'type')) @Is('VideoBlacklistType', value => throwIfNotValid(value, isVideoBlacklistTypeValid, 'type'))
@Column @Column
type: VideoBlockType type: VideoBlacklistType
@CreatedAt @CreatedAt
createdAt: Date createdAt: Date
@ -59,7 +59,7 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
count: number count: number
sort: SortType sort: SortType
search?: string search?: string
type?: VideoBlockType type?: VideoBlacklistType
}) { }) {
const { start, count, sort, search, type } = parameters const { start, count, sort, search, type } = parameters
@ -119,7 +119,7 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
return VideoBlacklistModel.findOne(query) return VideoBlacklistModel.findOne(query)
} }
toFormattedJSON (this: MVideoBlacklistFormattable): VideoBlocklist { toFormattedJSON (this: MVideoBlacklistFormattable): VideoBlacklist {
return { return {
id: this.id, id: this.id,
createdAt: this.createdAt, createdAt: this.createdAt,

View File

@ -188,7 +188,7 @@ describe('Test users API validators', function () {
videoQuota: -1, videoQuota: -1,
videoQuotaDaily: -1, videoQuotaDaily: -1,
role: UserRole.USER, role: UserRole.USER,
adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST
} }
it('Should fail with a too small username', async function () { it('Should fail with a too small username', async function () {

View File

@ -24,7 +24,7 @@ import {
checkBadSortPagination, checkBadSortPagination,
checkBadStartPagination checkBadStartPagination
} from '../../../../shared/extra-utils/requests/check-api-params' } from '../../../../shared/extra-utils/requests/check-api-params'
import { VideoBlockType, VideoDetails } from '../../../../shared/models/videos' import { VideoBlacklistType, VideoDetails } from '../../../../shared/models/videos'
import { expect } from 'chai' import { expect } from 'chai'
describe('Test video blacklist API validators', function () { describe('Test video blacklist API validators', function () {
@ -243,7 +243,7 @@ describe('Test video blacklist API validators', function () {
}) })
it('Should succeed with the correct parameters', async function () { it('Should succeed with the correct parameters', async function () {
await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken, type: VideoBlockType.MANUAL }) await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken, type: VideoBlacklistType.MANUAL })
}) })
}) })

View File

@ -265,7 +265,7 @@ describe('Test users', function () {
username: user.username, username: user.username,
password: user.password, password: user.password,
videoQuota: 2 * 1024 * 1024, videoQuota: 2 * 1024 * 1024,
adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST
}) })
}) })
@ -292,7 +292,7 @@ describe('Test users', function () {
} }
expect(userMe.adminFlags).to.be.undefined expect(userMe.adminFlags).to.be.undefined
expect(userGet.adminFlags).to.equal(UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK) expect(userGet.adminFlags).to.equal(UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST)
expect(userMe.specialPlaylists).to.have.lengthOf(1) expect(userMe.specialPlaylists).to.have.lengthOf(1)
expect(userMe.specialPlaylists[0].type).to.equal(VideoPlaylistType.WATCH_LATER) expect(userMe.specialPlaylists[0].type).to.equal(VideoPlaylistType.WATCH_LATER)

View File

@ -25,7 +25,7 @@ import {
} from '../../../../shared/extra-utils/index' } from '../../../../shared/extra-utils/index'
import { doubleFollow } from '../../../../shared/extra-utils/server/follows' import { doubleFollow } from '../../../../shared/extra-utils/server/follows'
import { waitJobs } from '../../../../shared/extra-utils/server/jobs' import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
import { VideoBlocklist, VideoBlockType } from '../../../../shared/models/videos' import { VideoBlacklist, VideoBlacklistType } from '../../../../shared/models/videos'
import { UserAdminFlag } from '../../../../shared/models/users/user-flag.model' import { UserAdminFlag } from '../../../../shared/models/users/user-flag.model'
import { User, UserRole } from '../../../../shared/models/users' import { User, UserRole } from '../../../../shared/models/users'
import { getMagnetURI, getYoutubeVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports' import { getMagnetURI, getYoutubeVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports'
@ -127,7 +127,7 @@ describe('Test video blacklist', function () {
const res = await getBlacklistedVideosList({ const res = await getBlacklistedVideosList({
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
type: VideoBlockType.MANUAL type: VideoBlacklistType.MANUAL
}) })
expect(res.body.total).to.equal(2) expect(res.body.total).to.equal(2)
@ -141,7 +141,7 @@ describe('Test video blacklist', function () {
const res = await getBlacklistedVideosList({ const res = await getBlacklistedVideosList({
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
}) })
expect(res.body.total).to.equal(0) expect(res.body.total).to.equal(0)
@ -219,7 +219,7 @@ describe('Test video blacklist', function () {
}) })
describe('When removing a blacklisted video', function () { describe('When removing a blacklisted video', function () {
let videoToRemove: VideoBlocklist let videoToRemove: VideoBlacklist
let blacklist = [] let blacklist = []
it('Should not have any video in videos list on server 1', async function () { it('Should not have any video in videos list on server 1', async function () {
@ -328,7 +328,7 @@ describe('Test video blacklist', function () {
it('Should have the correct video blacklist unfederate attribute', async function () { it('Should have the correct video blacklist unfederate attribute', async function () {
const res = await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken, sort: 'createdAt' }) const res = await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken, sort: 'createdAt' })
const blacklistedVideos: VideoBlocklist[] = res.body.data const blacklistedVideos: VideoBlacklist[] = res.body.data
const video3Blacklisted = blacklistedVideos.find(b => b.video.uuid === video3UUID) const video3Blacklisted = blacklistedVideos.find(b => b.video.uuid === video3UUID)
const video4Blacklisted = blacklistedVideos.find(b => b.video.uuid === video4UUID) const video4Blacklisted = blacklistedVideos.find(b => b.video.uuid === video4UUID)
@ -396,7 +396,7 @@ describe('Test video blacklist', function () {
url: servers[0].url, url: servers[0].url,
accessToken: servers[0].accessToken, accessToken: servers[0].accessToken,
username: user.username, username: user.username,
adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK, adminFlags: UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST,
password: user.password, password: user.password,
role: UserRole.USER role: UserRole.USER
}) })
@ -413,7 +413,7 @@ describe('Test video blacklist', function () {
const res = await getBlacklistedVideosList({ const res = await getBlacklistedVideosList({
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
}) })
expect(res.body.total).to.equal(1) expect(res.body.total).to.equal(1)
@ -434,7 +434,7 @@ describe('Test video blacklist', function () {
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
sort: 'createdAt', sort: 'createdAt',
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
}) })
expect(res.body.total).to.equal(2) expect(res.body.total).to.equal(2)
@ -453,7 +453,7 @@ describe('Test video blacklist', function () {
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
sort: 'createdAt', sort: 'createdAt',
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
}) })
expect(res.body.total).to.equal(3) expect(res.body.total).to.equal(3)
@ -466,7 +466,7 @@ describe('Test video blacklist', function () {
const res = await getBlacklistedVideosList({ const res = await getBlacklistedVideosList({
url: servers[0].url, url: servers[0].url,
token: servers[0].accessToken, token: servers[0].accessToken,
type: VideoBlockType.AUTO_BEFORE_PUBLISHED type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
}) })
expect(res.body.total).to.equal(3) expect(res.body.total).to.equal(3)

View File

@ -455,7 +455,7 @@ async function checkNewVideoAbuseForModerators (base: CheckerBaseParams, videoUU
} }
async function checkVideoAutoBlacklistForModerators (base: CheckerBaseParams, videoUUID: string, videoName: string, type: CheckerType) { async function checkVideoAutoBlacklistForModerators (base: CheckerBaseParams, videoUUID: string, videoName: string, type: CheckerType) {
const notificationType = UserNotificationType.VIDEO_AUTO_BLOCK_FOR_MODERATORS const notificationType = UserNotificationType.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
function notificationChecker (notification: UserNotification, type: CheckerType) { function notificationChecker (notification: UserNotification, type: CheckerType) {
if (type === 'presence') { if (type === 'presence') {
@ -486,8 +486,8 @@ async function checkNewBlacklistOnMyVideo (
blacklistType: 'blacklist' | 'unblacklist' blacklistType: 'blacklist' | 'unblacklist'
) { ) {
const notificationType = blacklistType === 'blacklist' const notificationType = blacklistType === 'blacklist'
? UserNotificationType.BLOCK_ON_MY_VIDEO ? UserNotificationType.BLACKLIST_ON_MY_VIDEO
: UserNotificationType.UNBLOCK_ON_MY_VIDEO : UserNotificationType.UNBLACKLIST_ON_MY_VIDEO
function notificationChecker (notification: UserNotification) { function notificationChecker (notification: UserNotification) {
expect(notification).to.not.be.undefined expect(notification).to.not.be.undefined

View File

@ -1,5 +1,5 @@
import * as request from 'supertest' import * as request from 'supertest'
import { VideoBlockType } from '../../models/videos' import { VideoBlacklistType } from '../../models/videos'
import { makeGetRequest } from '..' import { makeGetRequest } from '..'
function addVideoToBlacklist ( function addVideoToBlacklist (
@ -45,7 +45,7 @@ function getBlacklistedVideosList (parameters: {
url: string url: string
token: string token: string
sort?: string sort?: string
type?: VideoBlockType type?: VideoBlacklistType
specialStatus?: number specialStatus?: number
}) { }) {
const { url, token, sort, type, specialStatus = 200 } = parameters const { url, token, sort, type, specialStatus = 200 } = parameters

View File

@ -1,4 +1,4 @@
export enum UserAdminFlag { export enum UserAdminFlag {
NONE = 0, NONE = 0,
BYPASS_VIDEO_AUTO_BLOCK = 1 << 0 BYPASS_VIDEO_AUTO_BLACKLIST = 1 << 0
} }

View File

@ -5,8 +5,8 @@ export enum UserNotificationType {
NEW_COMMENT_ON_MY_VIDEO = 2, NEW_COMMENT_ON_MY_VIDEO = 2,
NEW_VIDEO_ABUSE_FOR_MODERATORS = 3, NEW_VIDEO_ABUSE_FOR_MODERATORS = 3,
BLOCK_ON_MY_VIDEO = 4, BLACKLIST_ON_MY_VIDEO = 4,
UNBLOCK_ON_MY_VIDEO = 5, UNBLACKLIST_ON_MY_VIDEO = 5,
MY_VIDEO_PUBLISHED = 6, MY_VIDEO_PUBLISHED = 6,
@ -17,7 +17,7 @@ export enum UserNotificationType {
NEW_FOLLOW = 10, NEW_FOLLOW = 10,
COMMENT_MENTION = 11, COMMENT_MENTION = 11,
VIDEO_AUTO_BLOCK_FOR_MODERATORS = 12, VIDEO_AUTO_BLACKLIST_FOR_MODERATORS = 12,
NEW_INSTANCE_FOLLOWER = 13, NEW_INSTANCE_FOLLOWER = 13,

View File

@ -20,7 +20,7 @@ export enum UserRight {
MANAGE_ACCOUNTS_BLOCKLIST, MANAGE_ACCOUNTS_BLOCKLIST,
MANAGE_SERVERS_BLOCKLIST, MANAGE_SERVERS_BLOCKLIST,
MANAGE_VIDEO_BLOCKS, MANAGE_VIDEO_BLACKLIST,
REMOVE_ANY_VIDEO, REMOVE_ANY_VIDEO,
REMOVE_ANY_VIDEO_CHANNEL, REMOVE_ANY_VIDEO_CHANNEL,

View File

@ -19,7 +19,7 @@ const userRoleRights: { [ id in UserRole ]: UserRight[] } = {
], ],
[UserRole.MODERATOR]: [ [UserRole.MODERATOR]: [
UserRight.MANAGE_VIDEO_BLOCKS, UserRight.MANAGE_VIDEO_BLACKLIST,
UserRight.MANAGE_VIDEO_ABUSES, UserRight.MANAGE_VIDEO_ABUSES,
UserRight.REMOVE_ANY_VIDEO, UserRight.REMOVE_ANY_VIDEO,
UserRight.REMOVE_ANY_VIDEO_CHANNEL, UserRight.REMOVE_ANY_VIDEO_CHANNEL,

View File

@ -1,15 +1,15 @@
import { Video } from '../video.model' import { Video } from '../video.model'
export enum VideoBlockType { export enum VideoBlacklistType {
MANUAL = 1, MANUAL = 1,
AUTO_BEFORE_PUBLISHED = 2 AUTO_BEFORE_PUBLISHED = 2
} }
export interface VideoBlocklist { export interface VideoBlacklist {
id: number id: number
unfederated: boolean unfederated: boolean
reason?: string reason?: string
type: VideoBlockType type: VideoBlacklistType
video: Video video: Video