From 40346ead2b0b7afa475aef057d3673b6c7574b7a Mon Sep 17 00:00:00 2001 From: Wicklow <123956049+wickloww@users.noreply.github.com> Date: Thu, 29 Jun 2023 07:48:55 +0000 Subject: Feature/password protected videos (#5836) * Add server endpoints * Refactoring test suites * Update server and add openapi documentation * fix compliation and tests * upload/import password protected video on client * add server error code * Add video password to update resolver * add custom message when sharing pw protected video * improve confirm component * Add new alert in component * Add ability to watch protected video on client * Cannot have password protected replay privacy * Add migration * Add tests * update after review * Update check params tests * Add live videos test * Add more filter test * Update static file privacy test * Update object storage tests * Add test on feeds * Add missing word * Fix tests * Fix tests on live videos * add embed support on password protected videos * fix style * Correcting data leaks * Unable to add password protected privacy on replay * Updated code based on review comments * fix validator and command * Updated code based on review comments --- .../shared-video-miniature/video-download.component.ts | 15 +++++++++------ .../video-filters-header.component.html | 2 +- .../shared-video-miniature/video-miniature.component.html | 1 + .../shared-video-miniature/video-miniature.component.ts | 4 ++++ .../shared-video-miniature/videos-list.component.ts | 3 ++- 5 files changed, 17 insertions(+), 8 deletions(-) (limited to 'client/src/app/shared/shared-video-miniature') diff --git a/client/src/app/shared/shared-video-miniature/video-download.component.ts b/client/src/app/shared/shared-video-miniature/video-download.component.ts index cac82d8d0..146ea7dfe 100644 --- a/client/src/app/shared/shared-video-miniature/video-download.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-download.component.ts @@ -1,13 +1,13 @@ import { mapValues } from 'lodash-es' import { firstValueFrom } from 'rxjs' import { tap } from 'rxjs/operators' -import { Component, ElementRef, Inject, LOCALE_ID, ViewChild } from '@angular/core' +import { Component, ElementRef, Inject, Input, LOCALE_ID, ViewChild } from '@angular/core' import { HooksService } from '@app/core' import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap' import { logger } from '@root-helpers/logger' -import { videoRequiresAuth } from '@root-helpers/video' +import { videoRequiresFileToken } from '@root-helpers/video' import { objectKeysTyped, pick } from '@shared/core-utils' -import { VideoCaption, VideoFile, VideoPrivacy } from '@shared/models' +import { VideoCaption, VideoFile } from '@shared/models' import { BytesPipe, NumberFormatterPipe, VideoDetails, VideoFileTokenService, VideoService } from '../shared-main' type DownloadType = 'video' | 'subtitles' @@ -21,6 +21,8 @@ type FileMetadata = { [key: string]: { label: string, value: string | number } } export class VideoDownloadComponent { @ViewChild('modal', { static: true }) modal: ElementRef + @Input() videoPassword: string + downloadType: 'direct' | 'torrent' = 'direct' resolutionId: number | string = -1 @@ -89,8 +91,8 @@ export class VideoDownloadComponent { this.subtitleLanguageId = this.videoCaptions[0].language.id } - if (videoRequiresAuth(this.video)) { - this.videoFileTokenService.getVideoFileToken(this.video.uuid) + if (this.isConfidentialVideo()) { + this.videoFileTokenService.getVideoFileToken({ videoUUID: this.video.uuid, videoPassword: this.videoPassword }) .subscribe(({ token }) => this.videoFileToken = token) } @@ -201,7 +203,8 @@ export class VideoDownloadComponent { } isConfidentialVideo () { - return this.video.privacy.id === VideoPrivacy.PRIVATE || this.video.privacy.id === VideoPrivacy.INTERNAL + return videoRequiresFileToken(this.video) + } switchToType (type: DownloadType) { diff --git a/client/src/app/shared/shared-video-miniature/video-filters-header.component.html b/client/src/app/shared/shared-video-miniature/video-filters-header.component.html index 3d39c6fdc..3fbfaed28 100644 --- a/client/src/app/shared/shared-video-miniature/video-filters-header.component.html +++ b/client/src/app/shared/shared-video-miniature/video-filters-header.component.html @@ -125,7 +125,7 @@ diff --git a/client/src/app/shared/shared-video-miniature/video-miniature.component.html b/client/src/app/shared/shared-video-miniature/video-miniature.component.html index 3f0180695..9e0a4f79b 100644 --- a/client/src/app/shared/shared-video-miniature/video-miniature.component.html +++ b/client/src/app/shared/shared-video-miniature/video-miniature.component.html @@ -5,6 +5,7 @@ > Unlisted Private + Password protected
diff --git a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts index 2384b34d7..d453f37a1 100644 --- a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts @@ -171,6 +171,10 @@ export class VideoMiniatureComponent implements OnInit { return this.video.privacy.id === VideoPrivacy.PRIVATE } + isPasswordProtectedVideo () { + return this.video.privacy.id === VideoPrivacy.PASSWORD_PROTECTED + } + getStateLabel (video: Video) { if (!video.state) return '' diff --git a/client/src/app/shared/shared-video-miniature/videos-list.component.ts b/client/src/app/shared/shared-video-miniature/videos-list.component.ts index 7b832263e..45df0be38 100644 --- a/client/src/app/shared/shared-video-miniature/videos-list.component.ts +++ b/client/src/app/shared/shared-video-miniature/videos-list.component.ts @@ -241,6 +241,7 @@ export class VideosListComponent implements OnInit, OnChanges, OnDestroy { } reloadVideos () { + console.log('reload') this.pagination.currentPage = 1 this.loadMoreVideos(true) } @@ -420,7 +421,7 @@ export class VideosListComponent implements OnInit, OnChanges, OnDestroy { if (reset) this.videos = [] this.videos = this.videos.concat(data) - + console.log('subscribe') if (this.groupByDate) this.buildGroupedDateLabels() this.onDataSubject.next(data) -- cgit v1.2.3