~cytrogen/masto-fe

75e5a6e43738c278390c03c96d5d3e8575a2783c — Eugen Rochko 3 years ago edc7ca5
Change user backups to use expiring URLs for download when possible (#24136)

A app/controllers/backups_controller.rb => app/controllers/backups_controller.rb +27 -0
@@ 0,0 1,27 @@
# frozen_string_literal: true

class BackupsController < ApplicationController
  include RoutingHelper

  skip_before_action :require_functional!

  before_action :authenticate_user!
  before_action :set_backup

  def download
    case Paperclip::Attachment.default_options[:storage]
    when :s3
      redirect_to @backup.dump.expiring_url(10)
    when :fog
      redirect_to @backup.dump.expiring_url(Time.now.utc + 10)
    when :filesystem
      redirect_to full_asset_url(@backup.dump.url)
    end
  end

  private

  def set_backup
    @backup = current_user.backups.find(params[:id])
  end
end

M app/models/backup.rb => app/models/backup.rb +1 -1
@@ 18,6 18,6 @@
class Backup < ApplicationRecord
  belongs_to :user, inverse_of: :backups

  has_attached_file :dump
  has_attached_file :dump, s3_permissions: 'private'
  validates_attachment_content_type :dump, content_type: /\Aapplication/
end

M app/views/settings/exports/show.html.haml => app/views/settings/exports/show.html.haml +1 -1
@@ 64,6 64,6 @@
            %td= l backup.created_at
            - if backup.processed?
              %td= number_to_human_size backup.dump_file_size
              %td= table_link_to 'download', t('exports.archive_takeout.download'), backup.dump.url
              %td= table_link_to 'download', t('exports.archive_takeout.download'), download_backup_url(backup)
            - else
              %td{ colspan: 2 }= t('exports.archive_takeout.in_progress')

M app/views/user_mailer/backup_ready.html.haml => app/views/user_mailer/backup_ready.html.haml +1 -1
@@ 55,5 55,5 @@
                            %tbody
                              %tr
                                %td.button-primary
                                  = link_to full_asset_url(@backup.dump.url) do
                                  = link_to download_backup_url(@backup) do
                                    %span= t 'exports.archive_takeout.download'

M app/views/user_mailer/backup_ready.text.erb => app/views/user_mailer/backup_ready.text.erb +1 -1
@@ 4,4 4,4 @@

<%= t 'user_mailer.backup_ready.explanation' %>

=> <%= full_asset_url(@backup.dump.url) %>
=> <%= download_backup_url(@backup) %>

M config/routes.rb => config/routes.rb +1 -0
@@ 220,6 220,7 @@ Rails.application.routes.draw do
  resource :statuses_cleanup, controller: :statuses_cleanup, only: [:show, :update]

  get '/media_proxy/:id/(*any)', to: 'media_proxy#show', as: :media_proxy, format: false
  get '/backups/:id/download', to: 'backups#download', as: :download_backup, format: false

  resource :authorize_interaction, only: [:show, :create]
  resource :share, only: [:show, :create]