From 3a28bafc0f233710cff868319eb7f70672f53bad Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Fri, 25 Dec 2015 01:52:14 +0530 Subject: [PATCH] FEATURE: onebox internal audio or video files --- .../javascripts/discourse/lib/utilities.js | 3 +++ config/routes.rb | 2 +- lib/onebox/engine/discourse_local_onebox.rb | 12 +++++++++++ .../engine/discourse_local_onebox_spec.rb | 20 +++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/lib/utilities.js b/app/assets/javascripts/discourse/lib/utilities.js index edf14360889..5865cba2d22 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js +++ b/app/assets/javascripts/discourse/lib/utilities.js @@ -247,6 +247,9 @@ Discourse.Utilities = { getUploadMarkdown: function(upload) { if (Discourse.Utilities.isAnImage(upload.original_filename)) { return ''; + } else if (!Discourse.SiteSettings.prevent_anons_from_downloading_files && (/\.(mov|mp4|webm|ogv|mp3|ogg|wav)$/i).test(upload.original_filename)) { + // is Audio/Video + return "http://" + Discourse.BaseUrl + upload.url; } else { return '' + upload.original_filename + ' (' + I18n.toHumanSize(upload.filesize) + ')'; } diff --git a/config/routes.rb b/config/routes.rb index 6f1c3180bf0..0206708c439 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -333,7 +333,7 @@ Discourse::Application.routes.draw do # used to download original images get "uploads/:site/:sha" => "uploads#show", constraints: { site: /\w+/, sha: /[a-f0-9]{40}/ } - # used to dowwload attachments + # used to download attachments get "uploads/:site/original/:tree:sha" => "uploads#show", constraints: { site: /\w+/, tree: /(\w+\/)+/i, sha: /[a-f0-9]{40}/ } # used to download attachments (old route) get "uploads/:site/:id/:sha" => "uploads#show", constraints: { site: /\w+/, id: /\d+/, sha: /[a-f0-9]{16}/ } diff --git a/lib/onebox/engine/discourse_local_onebox.rb b/lib/onebox/engine/discourse_local_onebox.rb index 06d54494687..5fd48971b77 100644 --- a/lib/onebox/engine/discourse_local_onebox.rb +++ b/lib/onebox/engine/discourse_local_onebox.rb @@ -16,6 +16,8 @@ module Onebox begin route = Rails.application.routes.recognize_path(uri.path) case route[:controller] + when 'uploads' + super when 'topics' # super will use matches_regexp to match the domain name super @@ -38,6 +40,16 @@ module Onebox # Figure out what kind of onebox to show based on the URL case route[:controller] + when 'uploads' + + url.gsub!("http:", "https:") if SiteSetting.use_https + if File.extname(uri.path) =~ /^.(mov|mp4|webm|ogv)$/ + return "" + elsif File.extname(uri.path) =~ /^.(mp3|ogg|wav)$/ + return "" + else + return false + end when 'topics' linked = "#{url}" diff --git a/spec/components/onebox/engine/discourse_local_onebox_spec.rb b/spec/components/onebox/engine/discourse_local_onebox_spec.rb index 3318a429b6a..2121100cf27 100644 --- a/spec/components/onebox/engine/discourse_local_onebox_spec.rb +++ b/spec/components/onebox/engine/discourse_local_onebox_spec.rb @@ -74,4 +74,24 @@ describe Onebox::Engine::DiscourseLocalOnebox do expect(html).to include("topic-info") end end + + context "for a link to an internal audio or video file" do + + it "returns nil if file type is not audio or video" do + url = "#{Discourse.base_url}/uploads/default/original/3X/5/c/24asdf42.pdf" + expect(Onebox.preview(url).to_s).to eq("") + end + + it "returns some onebox goodness for audio file" do + url = "#{Discourse.base_url}/uploads/default/original/3X/5/c/24asdf42.mp3" + html = Onebox.preview(url).to_s + expect(html).to eq("") + end + + it "returns some onebox goodness for video file" do + url = "#{Discourse.base_url}/uploads/default/original/3X/5/c/24asdf42.mp4" + html = Onebox.preview(url).to_s + expect(html).to eq("") + end + end end