Make the watch route generate a full YouTube URL (fixes #402)
This commit is contained in:
parent
7f28275fb0
commit
732baccd63
3 changed files with 23 additions and 4 deletions
|
@ -94,7 +94,7 @@ class App extends \Slim\App
|
|||
|
||||
$this->any(
|
||||
'/watch',
|
||||
[$frontController, 'info']
|
||||
[$frontController, 'watch']
|
||||
);
|
||||
|
||||
$this->any(
|
||||
|
|
|
@ -169,10 +169,8 @@ abstract class BaseController
|
|||
*/
|
||||
protected function getVideoPageUrl(Request $request): string
|
||||
{
|
||||
$url = $request->getQueryParam('url') ?: $request->getQueryParam('v');
|
||||
|
||||
// Prevent SSRF attacks.
|
||||
$parts = Url::validateUrl($url, new Options());
|
||||
$parts = Url::validateUrl($request->getQueryParam('url'), new Options());
|
||||
|
||||
return $parts['url'];
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ use Alltube\Middleware\CspMiddleware;
|
|||
use Exception;
|
||||
use Graby\HttpClient\Plugin\ServerSideRequestForgeryProtection\Exception\InvalidURLException;
|
||||
use Slim\Http\StatusCode;
|
||||
use Slim\Http\Uri;
|
||||
use stdClass;
|
||||
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
|
||||
use Throwable;
|
||||
|
@ -345,4 +346,24 @@ class FrontController extends BaseController
|
|||
return $this->displayError($request, $response, $message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Route that mimics YouTube video URLs ("/watch?v=foo")
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
* @return Response
|
||||
*/
|
||||
public function watch(Request $request, Response $response): Response
|
||||
{
|
||||
// We build a full YouTube URL from the video ID.
|
||||
$youtubeUri = Uri::createFromString('https://www.youtube.com/watch')
|
||||
->withQuery(http_build_query(['v' => $request->getQueryParam('v')]));
|
||||
|
||||
// Then pass it to the info route.
|
||||
return $response->withRedirect(
|
||||
Uri::createFromString($this->router->pathFor('info'))
|
||||
->withQuery(http_build_query(['url' => strval($youtubeUri)]))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue