import { VideoDetails } from '../../../shared/video/video-details.model'
import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { I18n } from '@ngx-translate/i18n-polyfill'
-import { Notifier } from '@app/core'
+import { AuthService, Notifier } from '@app/core'
+import { VideoPrivacy } from '@shared/models'
@Component({
selector: 'my-video-download',
constructor (
private notifier: Notifier,
private modalService: NgbModal,
+ private auth: AuthService,
private i18n: I18n
) { }
return
}
+ const suffix = this.video.privacy.id === VideoPrivacy.PRIVATE
+ ? '?access_token=' + this.auth.getAccessToken()
+ : ''
+
switch (this.downloadType) {
case 'direct':
- return file.fileDownloadUrl
+ return file.fileDownloadUrl + suffix
case 'torrent':
- return file.torrentDownloadUrl
+ return file.torrentDownloadUrl + suffix
}
}
WEBSERVER
} from '../initializers/constants'
import { cacheRoute } from '../middlewares/cache'
-import { asyncMiddleware, videosGetValidator } from '../middlewares'
+import { asyncMiddleware, videosDownloadValidator } from '../middlewares'
import { VideoModel } from '../models/video/video'
import { UserModel } from '../models/account/user'
import { VideoCommentModel } from '../models/video/video-comment'
)
staticRouter.use(
STATIC_DOWNLOAD_PATHS.TORRENTS + ':id-:resolution([0-9]+).torrent',
- asyncMiddleware(videosGetValidator),
+ asyncMiddleware(videosDownloadValidator),
asyncMiddleware(downloadTorrent)
)
staticRouter.use(
STATIC_DOWNLOAD_PATHS.TORRENTS + ':id-:resolution([0-9]+)-hls.torrent',
- asyncMiddleware(videosGetValidator),
+ asyncMiddleware(videosDownloadValidator),
asyncMiddleware(downloadHLSVideoFileTorrent)
)
staticRouter.use(
STATIC_DOWNLOAD_PATHS.VIDEOS + ':id-:resolution([0-9]+).:extension',
- asyncMiddleware(videosGetValidator),
+ asyncMiddleware(videosDownloadValidator),
asyncMiddleware(downloadVideoFile)
)
staticRouter.use(
STATIC_DOWNLOAD_PATHS.HLS_VIDEOS + ':id-:resolution([0-9]+)-fragmented.:extension',
- asyncMiddleware(videosGetValidator),
+ asyncMiddleware(videosDownloadValidator),
asyncMiddleware(downloadHLSVideoFile)
)
model: require('../lib/oauth-model')
})
-function authenticate (req: express.Request, res: express.Response, next: express.NextFunction) {
- oAuthServer.authenticate()(req, res, err => {
+function authenticate (req: express.Request, res: express.Response, next: express.NextFunction, authenticateInQuery = false) {
+ const options = authenticateInQuery ? { allowBearerTokensInQueryString: true } : {}
+
+ oAuthServer.authenticate(options)(req, res, err => {
if (err) {
logger.warn('Cannot authenticate.', { err })
})
}
-function authenticatePromiseIfNeeded (req: express.Request, res: express.Response) {
+function authenticatePromiseIfNeeded (req: express.Request, res: express.Response, authenticateInQuery = false) {
return new Promise(resolve => {
// Already authenticated? (or tried to)
if (res.locals.oauth && res.locals.oauth.token.User) return resolve()
if (res.locals.authenticated === false) return res.sendStatus(401)
- authenticate(req, res, () => {
- return resolve()
- })
+ authenticate(req, res, () => resolve(), authenticateInQuery)
})
}
})
}
-const videosCustomGetValidator = (fetchType: 'all' | 'only-video' | 'only-video-with-rights') => {
+const videosCustomGetValidator = (fetchType: 'all' | 'only-video' | 'only-video-with-rights', authenticateInQuery = false) => {
return [
param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'),
// Video private or blacklisted
if (video.privacy === VideoPrivacy.PRIVATE || videoAll.VideoBlacklist) {
- await authenticatePromiseIfNeeded(req, res)
+ await authenticatePromiseIfNeeded(req, res, authenticateInQuery)
const user = res.locals.oauth ? res.locals.oauth.token.User : null
}
const videosGetValidator = videosCustomGetValidator('all')
+const videosDownloadValidator = videosCustomGetValidator('all', true)
const videosRemoveValidator = [
param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'),
videosAddValidator,
videosUpdateValidator,
videosGetValidator,
+ videosDownloadValidator,
checkVideoFollowConstraints,
videosCustomGetValidator,
videosRemoveValidator,