diff options
author | Chocobozzz <me@florianbigard.com> | 2022-10-19 10:43:53 +0200 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2022-10-24 14:48:24 +0200 |
commit | 9ab330b90decf4edf152ff8e1d2948c065766b2c (patch) | |
tree | 29d924f50f7307e8e828a57ecb9ea78623487ce0 /server/models/video/video.ts | |
parent | 3545e72c686ff1725bbdfd8d16d693e2f4aa75a3 (diff) | |
download | PeerTube-9ab330b90decf4edf152ff8e1d2948c065766b2c.tar.gz PeerTube-9ab330b90decf4edf152ff8e1d2948c065766b2c.tar.zst PeerTube-9ab330b90decf4edf152ff8e1d2948c065766b2c.zip |
Use private ACL for private videos in s3
Diffstat (limited to 'server/models/video/video.ts')
-rw-r--r-- | server/models/video/video.ts | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 82362917e..c568075d8 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts | |||
@@ -30,6 +30,7 @@ import { removeHLSFileObjectStorage, removeHLSObjectStorage, removeWebTorrentObj | |||
30 | import { tracer } from '@server/lib/opentelemetry/tracing' | 30 | import { tracer } from '@server/lib/opentelemetry/tracing' |
31 | import { getHLSDirectory, getHLSRedundancyDirectory, getHlsResolutionPlaylistFilename } from '@server/lib/paths' | 31 | import { getHLSDirectory, getHLSRedundancyDirectory, getHlsResolutionPlaylistFilename } from '@server/lib/paths' |
32 | import { VideoPathManager } from '@server/lib/video-path-manager' | 32 | import { VideoPathManager } from '@server/lib/video-path-manager' |
33 | import { isVideoInPrivateDirectory } from '@server/lib/video-privacy' | ||
33 | import { getServerActor } from '@server/models/application/application' | 34 | import { getServerActor } from '@server/models/application/application' |
34 | import { ModelCache } from '@server/models/model-cache' | 35 | import { ModelCache } from '@server/models/model-cache' |
35 | import { buildVideoEmbedPath, buildVideoWatchPath, pick } from '@shared/core-utils' | 36 | import { buildVideoEmbedPath, buildVideoWatchPath, pick } from '@shared/core-utils' |
@@ -1764,9 +1765,7 @@ export class VideoModel extends Model<Partial<AttributesOnly<VideoModel>>> { | |||
1764 | const playlist = this.VideoStreamingPlaylists.find(p => p.type === VideoStreamingPlaylistType.HLS) | 1765 | const playlist = this.VideoStreamingPlaylists.find(p => p.type === VideoStreamingPlaylistType.HLS) |
1765 | if (!playlist) return undefined | 1766 | if (!playlist) return undefined |
1766 | 1767 | ||
1767 | playlist.Video = this | 1768 | return playlist.withVideo(this) |
1768 | |||
1769 | return playlist | ||
1770 | } | 1769 | } |
1771 | 1770 | ||
1772 | setHLSPlaylist (playlist: MStreamingPlaylist) { | 1771 | setHLSPlaylist (playlist: MStreamingPlaylist) { |
@@ -1868,16 +1867,39 @@ export class VideoModel extends Model<Partial<AttributesOnly<VideoModel>>> { | |||
1868 | return setAsUpdated('video', this.id, transaction) | 1867 | return setAsUpdated('video', this.id, transaction) |
1869 | } | 1868 | } |
1870 | 1869 | ||
1871 | requiresAuth (paramId: string) { | 1870 | // --------------------------------------------------------------------------- |
1871 | |||
1872 | requiresAuth (options: { | ||
1873 | urlParamId: string | ||
1874 | checkBlacklist: boolean | ||
1875 | }) { | ||
1876 | const { urlParamId, checkBlacklist } = options | ||
1877 | |||
1878 | if (this.privacy === VideoPrivacy.PRIVATE || this.privacy === VideoPrivacy.INTERNAL) { | ||
1879 | return true | ||
1880 | } | ||
1881 | |||
1872 | if (this.privacy === VideoPrivacy.UNLISTED) { | 1882 | if (this.privacy === VideoPrivacy.UNLISTED) { |
1873 | if (!isUUIDValid(paramId)) return true | 1883 | if (urlParamId && !isUUIDValid(urlParamId)) return true |
1874 | 1884 | ||
1875 | return false | 1885 | return false |
1876 | } | 1886 | } |
1877 | 1887 | ||
1878 | return this.privacy === VideoPrivacy.PRIVATE || this.privacy === VideoPrivacy.INTERNAL || !!this.VideoBlacklist | 1888 | if (checkBlacklist && this.VideoBlacklist) return true |
1889 | |||
1890 | if (this.privacy !== VideoPrivacy.PUBLIC) { | ||
1891 | throw new Error(`Unknown video privacy ${this.privacy} to know if the video requires auth`) | ||
1892 | } | ||
1893 | |||
1894 | return false | ||
1879 | } | 1895 | } |
1880 | 1896 | ||
1897 | hasPrivateStaticPath () { | ||
1898 | return isVideoInPrivateDirectory(this.privacy) | ||
1899 | } | ||
1900 | |||
1901 | // --------------------------------------------------------------------------- | ||
1902 | |||
1881 | async setNewState (newState: VideoState, isNewVideo: boolean, transaction: Transaction) { | 1903 | async setNewState (newState: VideoState, isNewVideo: boolean, transaction: Transaction) { |
1882 | if (this.state === newState) throw new Error('Cannot use same state ' + newState) | 1904 | if (this.state === newState) throw new Error('Cannot use same state ' + newState) |
1883 | 1905 | ||