29 lines
825 B
Python
29 lines
825 B
Python
from urllib.parse import urlparse, parse_qs
|
|
from core.errors import bad_request
|
|
|
|
|
|
YOUTUBE_DOMAINS = ("youtube.com", "www.youtube.com", "youtu.be")
|
|
|
|
|
|
def validate_youtube_url(url: str):
|
|
try:
|
|
parsed = urlparse(url)
|
|
except Exception:
|
|
bad_request("Invalid YouTube URL", "INVALID_URL")
|
|
|
|
if parsed.netloc not in YOUTUBE_DOMAINS:
|
|
bad_request("Invalid YouTube URL", "INVALID_URL")
|
|
|
|
if parsed.netloc == "youtu.be":
|
|
if not parsed.path.strip("/"):
|
|
bad_request("Invalid YouTube video URL", "INVALID_URL")
|
|
return
|
|
|
|
if parsed.path == "/watch":
|
|
qs = parse_qs(parsed.query)
|
|
if "v" not in qs or not qs["v"][0]:
|
|
bad_request("Invalid YouTube video URL", "INVALID_URL")
|
|
return
|
|
|
|
bad_request("Invalid YouTube video URL", "INVALID_URL")
|