-import * as express from 'express'
+import express from 'express'
import { query } from 'express-validator'
import { join } from 'path'
import { loadVideo } from '@server/lib/model-loaders'
const startPlaylistURLs = buildUrls(playlistPaths)
const startVideoURLs = buildUrls(videoPaths)
-const watchRegex = /([^/]+)$/
const isURLOptions = {
require_host: true,
require_tld: true
const url = req.query.url as string
+ let urlPath: string
+
+ try {
+ urlPath = new URL(url).pathname
+ } catch (err) {
+ return res.fail({
+ status: HttpStatusCode.BAD_REQUEST_400,
+ message: err.message,
+ data: {
+ url
+ }
+ })
+ }
+
const isPlaylist = startPlaylistURLs.some(u => url.startsWith(u))
const isVideo = isPlaylist ? false : startVideoURLs.some(u => url.startsWith(u))
const startIsOk = isVideo || isPlaylist
- const matches = watchRegex.exec(url)
+ const parts = urlPath.split('/')
- if (startIsOk === false || matches === null) {
+ if (startIsOk === false || parts.length === 0) {
return res.fail({
status: HttpStatusCode.BAD_REQUEST_400,
message: 'Invalid url.',
})
}
- const elementId = toCompleteUUID(matches[1])
+ const elementId = toCompleteUUID(parts.pop())
if (isIdOrUUIDValid(elementId) === false) {
return res.fail({ message: 'Invalid video or playlist id.' })
}