Add regex for validating source URL (#285)

This commit is contained in:
Kieran
2024-06-06 11:54:39 -07:00
committed by GitHub
parent a20d06072f
commit 582eb53698
3 changed files with 64 additions and 1 deletions
+8
View File
@@ -115,6 +115,7 @@ defmodule Pinchflat.Sources.Source do
|> validate_number(:retention_period_days, greater_than_or_equal_to: 0)
# Ensures it ends with `.{{ ext }}` or `.%(ext)s` or similar (with a little wiggle room)
|> validate_format(:output_path_template_override, MediaProfile.ext_regex(), message: "must end with .{{ ext }}")
|> validate_format(:original_url, youtube_channel_or_playlist_regex(), message: "must be a channel or playlist URL")
|> cast_assoc(:metadata, with: &SourceMetadata.changeset/2, required: false)
|> unique_constraint([:collection_id, :media_profile_id, :title_filter_regex], error_key: :original_url)
end
@@ -141,6 +142,13 @@ defmodule Pinchflat.Sources.Source do
~w(__meta__ __struct__ metadata tasks media_items)a
end
def youtube_channel_or_playlist_regex do
# Validate that the original URL is not a video URL
# Also matches if the string does NOT contain youtube.com or youtu.be. This preserves my tenuous support
# for non-youtube sources.
~r<^(?:(?!youtube\.com/(watch|shorts|embed)|youtu\.be).)*$>
end
defimpl Jason.Encoder, for: Source do
def encode(value, opts) do
value