discourse/lib/onebox/engine/video_onebox.rb
Mark Doerr 2fb976fab1
FIX: Support Dropbox /scl/ URL format in video and image oneboxes (#38394)
Dropbox has introduced a new sharing URL format using `/scl/fi/` instead
of the legacy `/s/` path. This updates VideoOnebox and ImageOnebox to:

- Detect and transform new `/scl/` format URLs
- Convert to dl.dropboxusercontent.com domain
- Ensure raw=1 parameter is present for direct download
- Maintain backward compatibility with legacy `/s/` format
- Also...added test coverage for both old and new Dropbox formats. All
existing tests continue to pass.

Co-Authored-By: Claude Sonnet 4.5

---------

Co-authored-by: Loïc Guitaut <loic@discourse.org>
2026-03-11 10:37:57 +01:00

32 lines
906 B
Ruby

# frozen_string_literal: true
module Onebox
module Engine
class VideoOnebox
include Engine
matches_regexp(%r{^(https?:)?//.*\.(mov|mp4|webm|ogv)(\?.*)?$}i)
def always_https?
AllowlistedGenericOnebox.host_matches(uri, AllowlistedGenericOnebox.https_hosts)
end
def to_html
url = ::Onebox::Helpers.normalize_dropbox_url(@url)
escaped_url = ::Onebox::Helpers.normalize_url_for_output(url)
<<-HTML
<div class="onebox video-onebox">
<video width='100%' height='100%' controls #{@options[:disable_media_download_controls] ? 'controlslist="nodownload"' : ""}>
<source src='#{escaped_url}'>
<a href='#{escaped_url}'>#{url}</a>
</video>
</div>
HTML
end
def placeholder_html
::Onebox::Helpers.video_placeholder_html
end
end
end
end