]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/controllers/object-storage-proxy.ts
Implement signup approval in server
[github/Chocobozzz/PeerTube.git] / server / controllers / object-storage-proxy.ts
index aa853a383abbfdbe50c4ea672ad0a785023ffa21..32b8d21dab1b39b6351201265124861a045647b2 100644 (file)
@@ -15,6 +15,7 @@ import {
 } from '@server/middlewares'
 import { HttpStatusCode } from '@shared/models'
 import { buildReinjectVideoFileTokenQuery, doReinjectVideoFileToken } from './shared/m3u8-playlist'
+import { GetObjectCommandOutput } from '@aws-sdk/client-s3'
 
 const objectStorageProxyRouter = express.Router()
 
@@ -46,11 +47,13 @@ async function proxifyWebTorrent (req: express.Request, res: express.Response) {
   logger.debug('Proxifying WebTorrent file %s from object storage.', filename)
 
   try {
-    const stream = await getWebTorrentFileReadStream({
+    const { response: s3Response, stream } = await getWebTorrentFileReadStream({
       filename,
       rangeHeader: req.header('range')
     })
 
+    setS3Headers(res, s3Response)
+
     return stream.pipe(res)
   } catch (err) {
     return handleObjectStorageFailure(res, err)
@@ -65,12 +68,14 @@ async function proxifyHLS (req: express.Request, res: express.Response) {
   logger.debug('Proxifying HLS file %s from object storage.', filename)
 
   try {
-    const stream = await getHLSFileReadStream({
+    const { response: s3Response, stream } = await getHLSFileReadStream({
       playlist: playlist.withVideo(video),
       filename,
       rangeHeader: req.header('range')
     })
 
+    setS3Headers(res, s3Response)
+
     const streamReplacer = filename.endsWith('.m3u8') && doReinjectVideoFileToken(req)
       ? new StreamReplacer(line => injectQueryToPlaylistUrls(line, buildReinjectVideoFileTokenQuery(req)))
       : new PassThrough()
@@ -102,3 +107,9 @@ function handleObjectStorageFailure (res: express.Response, err: Error) {
     type: err.name
   })
 }
+
+function setS3Headers (res: express.Response, s3Response: GetObjectCommandOutput) {
+  if (s3Response.$metadata.httpStatusCode === HttpStatusCode.PARTIAL_CONTENT_206) {
+    res.status(HttpStatusCode.PARTIAL_CONTENT_206)
+  }
+}