preserve original variable names server-side
This commit is contained in:
parent
5baee5fca4
commit
3487330d30
|
@ -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 () {
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
},
|
},
|
||||||
|
|
|
@ -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.'
|
||||||
)
|
)
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
]
|
]
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 => {
|
||||||
|
|
|
@ -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)
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
})
|
})
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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 })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user