cartodb-4.42/lib/carto/assets/html_assets_service.rb
2024-04-06 05:25:13 +00:00

57 lines
1.5 KiB
Ruby

require_dependency 'carto/storage'
require_dependency 'carto/assets/assets_service'
require 'singleton'
module Carto
class HTMLAssetsService < AssetsService
include Singleton
EXTENSION = ".html".freeze
DEFAULT_MAX_SIZE_IN_BYTES = 10 * 1024 * 1024 # 10MB
def upload(visualization, resource)
super(visualization.id, resource)
end
def fetch_file(resource)
temp_file = Tempfile.new(["html_asset_#{Time.now.utc.to_i}", EXTENSION])
begin
read = IO.copy_stream(resource, temp_file, max_size_in_bytes + 1)
if read > max_size_in_bytes
message = "resource is too big (> #{max_size_in_bytes} bytes)"
raise UnprocesableEntityError.new(message)
end
ensure
temp_file.close
end
temp_file
end
def read_source_data(asset)
if asset.storage_info[:type] == 'local'
File.open(asset.storage_info[:identifier]).read
else
URI.parse(asset.public_url).open.read
end
end
DEFAULT_LOCATION = 'html_assets'.freeze
def location
@location ||= Cartodb.get_config(:assets, 'html', 'bucket') ||
Cartodb.get_config(:assets, 'html', 'location') ||
DEFAULT_LOCATION
end
def max_size_in_bytes
return @max_size_in_bytes if @max_size_in_bytes
configured = Cartodb.get_config(:assets, 'html', 'max_size_in_bytes')
@max_size_in_bytes = configured || DEFAULT_MAX_SIZE_IN_BYTES
end
end
end