Browse Source

Get collection resources from S3

pull/2671/head
Kat 2 years ago
parent
commit
8c789baf52
  1. 104
      app/controllers/start_controller.rb
  2. 27
      app/helpers/collection_resources_helper.rb
  3. 10
      app/models/forms/bulk_upload_lettings/prepare_your_file.rb
  4. 10
      app/models/forms/bulk_upload_sales/prepare_your_file.rb
  5. 1
      config/environments/development.rb
  6. 1
      config/environments/production.rb
  7. 1
      config/environments/review.rb
  8. 1
      config/environments/staging.rb
  9. 1
      config/environments/test.rb
  10. 10
      spec/helpers/collection_resources_helper_spec.rb

104
app/controllers/start_controller.rb

@ -1,4 +1,6 @@
class StartController < ApplicationController
include CollectionResourcesHelper
def index
if current_user
@homepage_presenter = HomepagePresenter.new(current_user)
@ -7,114 +9,76 @@ class StartController < ApplicationController
end
def download_24_25_sales_form
send_file(
Rails.root.join("public/files/2024_25_sales_paper_form.pdf"),
filename: "2024-25 Sales paper form.pdf",
type: "application/pdf",
)
download_resource("2024_25_sales_paper_form.pdf", "2024-25 Sales paper form.pdf")
end
def download_23_24_sales_form
send_file(
Rails.root.join("public/files/2023_24_sales_paper_form.pdf"),
filename: "2023-24 Sales paper form.pdf",
type: "application/pdf",
)
download_resource("2023_24_sales_paper_form.pdf", "2023-24 Sales paper form.pdf")
end
def download_24_25_lettings_form
send_file(
Rails.root.join("public/files/2024_25_lettings_paper_form.pdf"),
filename: "2024-25 Lettings paper form.pdf",
type: "application/pdf",
)
download_resource("2024_25_lettings_paper_form.pdf", "2024-25 Lettings paper form.pdf")
end
def download_23_24_lettings_form
send_file(
Rails.root.join("public/files/2023_24_lettings_paper_form.pdf"),
filename: "2023-24 Lettings paper form.pdf",
type: "application/pdf",
)
download_resource("2023_24_lettings_paper_form.pdf", "2023-24 Lettings paper form.pdf")
end
def download_24_25_lettings_bulk_upload_template
send_file(
Rails.root.join("public/files/bulk-upload-lettings-template-2024-25.xlsx"),
filename: "2024-25-lettings-bulk-upload-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-lettings-template-2024-25.xlsx", "2024-25-lettings-bulk-upload-template.xlsx")
end
def download_24_25_lettings_bulk_upload_specification
send_file(
Rails.root.join("public/files/bulk-upload-lettings-specification-2024-25.xlsx"),
filename: "2024-25-lettings-bulk-upload-specification.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-lettings-specification-2024-25.xlsx", "2024-25-lettings-bulk-upload-specification.xlsx")
end
def download_24_25_sales_bulk_upload_template
send_file(
Rails.root.join("public/files/bulk-upload-sales-template-2024-25.xlsx"),
filename: "2024-25-sales-bulk-upload-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-sales-template-2024-25.xlsx", "2024-25-sales-bulk-upload-template.xlsx")
end
def download_24_25_sales_bulk_upload_specification
send_file(
Rails.root.join("public/files/bulk-upload-sales-specification-2024-25.xlsx"),
filename: "2024-25-sales-bulk-upload-specification.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-sales-specification-2024-25.xlsx", "2024-25-sales-bulk-upload-specification.xlsx")
end
def download_23_24_lettings_bulk_upload_template
send_file(
Rails.root.join("public/files/bulk-upload-lettings-template-2023-24.xlsx"),
filename: "2023-24-lettings-bulk-upload-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-lettings-template-2023-24.xlsx", "2023-24-lettings-bulk-upload-template.xlsx")
end
def download_23_24_lettings_bulk_upload_legacy_template
send_file(
Rails.root.join("public/files/bulk-upload-lettings-legacy-template-2023-24.xlsx"),
filename: "2023-24-lettings-bulk-upload-legacy-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-lettings-legacy-template-2023-24.xlsx", "2023-24-lettings-bulk-upload-legacy-template.xlsx")
end
def download_23_24_lettings_bulk_upload_specification
send_file(
Rails.root.join("public/files/bulk-upload-lettings-specification-2023-24.xlsx"),
filename: "2023-24-lettings-bulk-upload-specification.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-lettings-specification-2023-24.xlsx", "2023-24-lettings-bulk-upload-specification.xlsx")
end
def download_23_24_sales_bulk_upload_template
send_file(
Rails.root.join("public/files/bulk-upload-sales-template-2023-24.xlsx"),
filename: "2023-24-sales-bulk-upload-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-sales-template-2023-24.xlsx", "2023-24-sales-bulk-upload-template.xlsx")
end
def download_23_24_sales_bulk_upload_legacy_template
send_file(
Rails.root.join("public/files/bulk-upload-sales-legacy-template-2023-24.xlsx"),
filename: "2023-24-sales-bulk-upload-legacy-template.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-sales-legacy-template-2023-24.xlsx", "2023-24-sales-bulk-upload-legacy-template.xlsx")
end
def download_23_24_sales_bulk_upload_specification
send_file(
Rails.root.join("public/files/bulk-upload-sales-specification-2023-24.xlsx"),
filename: "2023-24-sales-bulk-upload-specification.xlsx",
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
download_resource("bulk-upload-sales-specification-2023-24.xlsx", "2023-24-sales-bulk-upload-specification.xlsx")
end
private
def download_resource(file, filename)
url = "https://#{Rails.application.config.collection_resources_s3_bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new(uri)
http.request(request)
end
if response.is_a?(Net::HTTPSuccess)
send_data(response.body, disposition: "attachment", filename:)
else
render_not_found
end
end
end

27
app/helpers/collection_resources_helper.rb

@ -1,15 +1,26 @@
module CollectionResourcesHelper
HUMAN_READABLE_CONTENT_TYPE = { "application/pdf": "PDF",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "Microsoft Excel",
"application/vnd.ms-excel": "Microsoft Excel (Old Format)",
"application/msword": "Microsoft Word",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": "Microsoft Word (DOCX)",
"image/jpeg": "JPEG Image",
"image/png": "PNG Image",
"text/plain": "Text Document",
"text/html": "HTML Document" }.freeze
def file_type_size_and_pages(file, number_of_pages: nil)
extension_mapping = {
"xlsx" => "Microsoft Excel",
"pdf" => "PDF",
}
extension = File.extname(file)[1..]
file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil
url = "https://#{Rails.application.config.collection_resources_s3_bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
file_type = extension_mapping.fetch(extension, extension)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request_head(uri)
end
return [file_pages].compact.join(", ") unless response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection)
file_size = number_to_human_size(File.size("public/files/#{file}"), precision: 0, significant: false)
file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil
file_size = number_to_human_size(response["Content-Length"].to_i)
file_type = HUMAN_READABLE_CONTENT_TYPE[response["Content-Type"].to_sym] || "Unknown File Type"
[file_type, file_size, file_pages].compact.join(", ")
end
end

10
app/models/forms/bulk_upload_lettings/prepare_your_file.rb

@ -35,25 +35,25 @@ module Forms
def legacy_template_path
case year
when 2023
"/files/bulk-upload-lettings-legacy-template-2023-24.xlsx"
download_23_24_lettings_bulk_upload_legacy_template_path
end
end
def template_path
case year
when 2023
"/files/bulk-upload-lettings-template-2023-24.xlsx"
download_23_24_lettings_bulk_upload_template_path
when 2024
"/files/bulk-upload-lettings-template-2024-25.xlsx"
download_24_25_lettings_bulk_upload_template_path
end
end
def specification_path
case year
when 2023
"/files/bulk-upload-lettings-specification-2023-24.xlsx"
download_23_24_lettings_bulk_upload_specification_path
when 2024
"/files/bulk-upload-lettings-specification-2024-25.xlsx"
download_24_25_lettings_bulk_upload_specification_path
end
end

10
app/models/forms/bulk_upload_sales/prepare_your_file.rb

@ -34,25 +34,25 @@ module Forms
def legacy_template_path
case year
when 2023
"/files/bulk-upload-sales-legacy-template-2023-24.xlsx"
download_23_24_sales_bulk_upload_legacy_template_path
end
end
def template_path
case year
when 2023
"/files/bulk-upload-sales-template-2023-24.xlsx"
download_23_24_sales_bulk_upload_template_path
when 2024
"/files/bulk-upload-sales-template-2024-25.xlsx"
download_24_25_sales_bulk_upload_template_path
end
end
def specification_path
case year
when 2023
"/files/bulk-upload-sales-specification-2023-24.xlsx"
download_23_24_sales_bulk_upload_specification_path
when 2024
"/files/bulk-upload-sales-specification-2024-25.xlsx"
download_24_25_sales_bulk_upload_specification_path
end
end

1
config/environments/development.rb

@ -85,4 +85,5 @@ Rails.application.configure do
config.active_record.yaml_column_permitted_classes = [Time, BigDecimal]
config.active_job.queue_adapter = :inline
config.collection_resources_s3_bucket_name = "core-dev-collection-resources"
end

1
config/environments/production.rb

@ -147,4 +147,5 @@ Rails.application.configure do
end
}
end
config.collection_resources_s3_bucket_name = "core-prod-collection-resources"
end

1
config/environments/review.rb

@ -127,4 +127,5 @@ Rails.application.configure do
# see https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017
config.active_record.yaml_column_permitted_classes = [Time, BigDecimal]
config.collection_resources_s3_bucket_name = "core-dev-collection-resources"
end

1
config/environments/staging.rb

@ -127,4 +127,5 @@ Rails.application.configure do
# see https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017
config.active_record.yaml_column_permitted_classes = [Time, BigDecimal]
config.collection_resources_s3_bucket_name = "core-staging-collection-resources"
end

1
config/environments/test.rb

@ -67,4 +67,5 @@ Rails.application.configure do
config.active_record.yaml_column_permitted_classes = [Time, BigDecimal]
config.active_job.queue_adapter = :test
config.collection_resources_s3_bucket_name = "core-test-collection-resources"
end

10
spec/helpers/collection_resources_helper_spec.rb

@ -6,12 +6,22 @@ RSpec.describe CollectionResourcesHelper do
describe "when displaying file metadata" do
context "with pages" do
before do
stub_request(:head, "https://core-test-collection-resources.s3.amazonaws.com/2023_24_lettings_paper_form.pdf")
.to_return(status: 200, body: "", headers: { "Content-Length" => 292_864, "Content-Type" => "application/pdf" })
end
it "returns correct metadata" do
expect(file_type_size_and_pages("2023_24_lettings_paper_form.pdf", number_of_pages: 8)).to eq("PDF, 286 KB, 8 pages")
end
end
context "without pages" do
before do
stub_request(:head, "https://core-test-collection-resources.s3.amazonaws.com/bulk-upload-lettings-template-2023-24.xlsx")
.to_return(status: 200, body: "", headers: { "Content-Length" => 19_456, "Content-Type" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" })
end
it "returns correct metadata" do
expect(file_type_size_and_pages("bulk-upload-lettings-template-2023-24.xlsx")).to eq("Microsoft Excel, 19 KB")
end

Loading…
Cancel
Save