Files
once-campfire/app/controllers/accounts/logos_controller.rb
Kevin McConnell df76a227dc Hello world
First open source release of Campfire 🎉
2025-08-21 09:31:59 +01:00

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