* VRFS-2680 - adding redirect logic for ssl

This commit is contained in:
Seth Call 2015-05-11 16:52:58 -05:00
parent 643595c531
commit 4709622546
16 changed files with 31 additions and 23 deletions

View File

@ -103,7 +103,7 @@ module JamRuby
def copy_url_to_file(url, filename)
uri = URI(url)
open(filename, 'w+b') do |io|
Net::HTTP.start(uri.host, uri.port) do |http|
Net::HTTP.start(uri.host, uri.port, use_ssl: url.start_with?('https') ? true : false) do |http|
request = Net::HTTP::Get.new uri
http.request request do |response|
response_code = response.code.to_i

View File

@ -224,8 +224,8 @@ module JamRuby
:cropped_s3_path_photo => cropped_s3_path,
:cropped_large_s3_path_photo => cropped_large_s3_path,
:crop_selection_photo => crop_selection,
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => false),
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => false))
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => true),
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => true))
end
def delete_photo(aws_bucket)

View File

@ -50,7 +50,7 @@ module JamRuby
end
def self.ready_to_clean
JamTrackRight.where("downloaded_since_sign=? AND updated_at <= ?", true, 5.minutes.ago).limit(1000)
JamTrackRight.where("downloaded_since_sign=? AND updated_at <= ?", true, 5.minutes.ago).limit(1000)
end
def finish_errored(error_reason, error_detail, sample_rate)
@ -98,7 +98,7 @@ module JamRuby
# but the url is short lived enough so that it wouldn't be easily shared
def sign_url(expiration_time = 120, bitrate=48)
field_name = (bitrate==48) ? "url_48" : "url_44"
s3_manager.sign_url(self[field_name], {:expires => expiration_time, :secure => false})
s3_manager.sign_url(self[field_name], {:expires => expiration_time, :secure => true})
end
def delete_s3_files

View File

@ -60,7 +60,7 @@ module JamRuby
def preview_public_url(media_type='ogg')
url = media_type == 'ogg' ? self[:preview_url] : self[:preview_mp3_url]
if url
s3_public_manager.public_url(url,{ :secure => false})
s3_public_manager.public_url(url,{ :secure => true})
else
nil
end
@ -87,7 +87,7 @@ module JamRuby
# we would verify their rights (can_download?), and generates a URL in response to the click so that they can download
# but the url is short lived enough so that it wouldn't be easily shared
def sign_url(expiration_time = 120, sample_rate=48)
s3_manager.sign_url(url_by_sample_rate(sample_rate), {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
s3_manager.sign_url(url_by_sample_rate(sample_rate), {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
end
def can_download?(user)

View File

@ -131,9 +131,10 @@ module JamRuby
end
end
uri = URI(sign_url(field))
url = sign_url(field)
uri = URI(url)
open downloaded_filename, 'wb' do |io|
Net::HTTP.start(uri.host, uri.port) do |http|
Net::HTTP.start(uri.host, uri.port, use_ssl: url.start_with?('https') ? true : false) do |http|
request = Net::HTTP::Get.new uri
http.request request do |response|
response_code = response.code.to_i

View File

@ -305,7 +305,7 @@ module JamRuby
# if the url starts with http, just return it because it's in some other store. Otherwise it's a relative path in s3 and needs be signed
def resolve_url(url_field, mime_type, expiration_time)
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => false})
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => true})
end
def sign_url(expiration_time = 120, type='ogg')
@ -321,9 +321,9 @@ module JamRuby
def sign_put(expiration_time = 3600 * 24, type='ogg')
type ||= 'ogg'
if type == 'ogg'
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/ogg', :secure => false}, :put)
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/ogg', :secure => true}, :put)
else
s3_manager.sign_url(self[:mp3_url], {:expires => expiration_time, :content_type => 'audio/mpeg', :secure => false}, :put)
s3_manager.sign_url(self[:mp3_url], {:expires => expiration_time, :content_type => 'audio/mpeg', :secure => true}, :put)
end
end

View File

@ -39,7 +39,7 @@ module JamRuby
end
def sign_url(expiration_time = 120)
s3_manager.sign_url(self[:file_url], {:expires => expiration_time, :secure => false})
s3_manager.sign_url(self[:file_url], {:expires => expiration_time, :secure => true})
end
private

View File

@ -219,7 +219,7 @@ module JamRuby
# if the url starts with http, just return it because it's in some other store. Otherwise it's a relative path in s3 and needs be signed
def resolve_url(url_field, mime_type, expiration_time)
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => false})
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => true})
end
def sign_url(expiration_time = 120, type='ogg')
@ -235,9 +235,9 @@ module JamRuby
def sign_put(expiration_time = 3600 * 24, type='ogg')
type ||= 'ogg'
if type == 'ogg'
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/ogg', :secure => false}, :put)
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/ogg', :secure => true}, :put)
else
s3_manager.sign_url(self[:mp3_url], {:expires => expiration_time, :content_type => 'audio/mpeg', :secure => false}, :put)
s3_manager.sign_url(self[:mp3_url], {:expires => expiration_time, :content_type => 'audio/mpeg', :secure => true}, :put)
end
end

View File

@ -41,7 +41,7 @@ module JamRuby
end
def sign_url(expiration_time = 120)
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
end
def can_download?(some_user)

View File

@ -148,7 +148,7 @@ module JamRuby
end
def sign_url(expiration_time = 120)
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
end
def upload_start(length, md5)

View File

@ -1222,8 +1222,8 @@ module JamRuby
:cropped_s3_path => cropped_s3_path,
:cropped_large_s3_path => cropped_large_s3_path,
:crop_selection => crop_selection,
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => false),
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => false)
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => true),
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => true)
)
end

View File

@ -72,7 +72,7 @@ module JamRuby
uri = URI(filename)
open download_filename, 'wb' do |io|
begin
Net::HTTP.start(uri.host, uri.port) do |http|
Net::HTTP.start(uri.host, uri.port, use_ssl: filename.start_with?('https') ? true : false) do |http|
request = Net::HTTP::Get.new uri
http.request request do |response|
response_code = response.code.to_i
@ -165,6 +165,7 @@ module JamRuby
uri = URI.parse(@postback_ogg_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = @postback_ogg_url.start_with?('https') ? true : false
request = Net::HTTP::Put.new(uri.request_uri)
response = nil
@ -186,6 +187,7 @@ module JamRuby
uri = URI.parse(@postback_mp3_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = @postback_mp3_url.start_with?('https') ? true : false
request = Net::HTTP::Put.new(uri.request_uri)
response = nil

View File

@ -79,6 +79,7 @@ module JamRuby
uri = URI.parse(@postback_mp3_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = @postback_mp3_url.start_with?('https') ? true : false
request = Net::HTTP::Put.new(uri.request_uri)
response = nil

View File

@ -22,6 +22,7 @@ describe JamTracksCleaner do
end
it "should clean" do
pending "re-enable cleaner after manual testing"
jam_track_right = JamTrackRight.create(:user=>@user, :jam_track=>@jam_track)
jam_track_right.signed_48=true
jam_track_right
@ -48,6 +49,6 @@ describe JamTracksCleaner do
# But not after running cleaner job:
JamRuby::JamTracksCleaner.perform
s3.exists?(url).should be_false
s3.exists?(url).should be_false
end
end

View File

@ -5,6 +5,8 @@ class ApplicationController < ActionController::Base
include SessionsHelper
include ClientHelper
force_ssl port: Rails.application.config.external_port_ssl if Rails.application.config.force_ssl
# inject username/email into bugsnag data
before_bugsnag_notify :add_user_info_to_bugsnag

View File

@ -122,13 +122,14 @@ if defined?(Bundler)
config.websocket_gateway_trusted_uri = "ws://localhost:#{config.websocket_gateway_port + 1}/websocket"
config.websocket_gateway_uri_ssl = "wss://localhost:#{config.websocket_gateway_port_ssl}/websocket"
config.websocket_gateway_trusted_uri_ssl = "wss://localhost:#{config.websocket_gateway_port_ssl + 1}/websocket"
config.force_ssl = ENV['FORCE_SSL'].nil? ? false : ENV['FORCE_SSL'] == 'true'
config.websocket_gateway_max_connections_per_user = 20
config.lock_connections = false
config.external_hostname = ENV['EXTERNAL_HOSTNAME'] || 'localhost'
config.external_port = ENV['EXTERNAL_PORT'] || 3000
config.external_protocol = ENV['EXTERNAL_PROTOCOL'] || 'http://'
config.external_port_ssl = ENV['EXTERNAL_PORT_ssl'] || 3443
config.external_root_url = "#{config.external_protocol}#{config.external_hostname}#{(config.external_port == 80 || config.external_port == 443) ? '' : ':' + config.external_port.to_s}"
config.admin_port = ENV['ADMIN_PORT'] || 3333
config.admin_root_url = "#{config.external_protocol}#{config.external_hostname}#{(config.admin_port == 80 || config.admin_port == 443) ? '' : ':' + config.admin_port.to_s}"