mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-03-12 13:15:16 +09:00
53 lines
1.4 KiB
Ruby
53 lines
1.4 KiB
Ruby
class Accounts::LogosController < ApplicationController
|
|
include ActiveStorage::Streaming, ActionView::Helpers::AssetUrlHelper
|
|
|
|
allow_unauthenticated_access only: :show
|
|
before_action :ensure_can_administer, only: :destroy
|
|
|
|
def show
|
|
if stale?(etag: Current.account)
|
|
expires_in 5.minutes, public: true, stale_while_revalidate: 1.week
|
|
|
|
if Current.account&.logo&.attached?
|
|
logo = Current.account.logo.variant(logo_variant).processed
|
|
send_png_file ActiveStorage::Blob.service.path_for(logo.key)
|
|
else
|
|
send_stock_icon
|
|
end
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
Current.account.logo.destroy
|
|
redirect_to edit_account_url
|
|
end
|
|
|
|
private
|
|
LARGE_SQUARE_PNG_VARIANT = { resize_to_limit: [ 512, 512 ], format: :png }
|
|
SMALL_SQUARE_PNG_VARIANT = { resize_to_limit: [ 192, 192 ], format: :png }
|
|
|
|
def send_png_file(path)
|
|
send_file path, content_type: "image/png", disposition: :inline
|
|
end
|
|
|
|
def send_stock_icon
|
|
if small_logo?
|
|
send_png_file logo_path("app-icon-192.png")
|
|
else
|
|
send_png_file logo_path("app-icon.png")
|
|
end
|
|
end
|
|
|
|
def logo_variant
|
|
small_logo? ? SMALL_SQUARE_PNG_VARIANT : LARGE_SQUARE_PNG_VARIANT
|
|
end
|
|
|
|
def small_logo?
|
|
params[:size] == "small"
|
|
end
|
|
|
|
def logo_path(filename)
|
|
Rails.root.join("app/assets/images/logos/#{filename}")
|
|
end
|
|
end
|