Variants are currently broken. So we process the original file with the most common avatar dimensions and stripping metadata, then hash and upload only that version.
28 lines
817 B
Ruby
28 lines
817 B
Ruby
class AvatarsController < ApplicationController
|
|
def show
|
|
if user = User.find_by(cn: params[:username])
|
|
http_status :not_found and return unless user.avatar.attached?
|
|
|
|
sha256_hash = params[:hash]
|
|
format = params[:format]&.to_sym || :png
|
|
# size = params[:size]&.to_sym || :original
|
|
|
|
unless user.avatar.filename.to_s == "#{sha256_hash}.#{format}"
|
|
http_status :not_found and return
|
|
end
|
|
|
|
# TODO See note for avatar_variant in user model
|
|
# blob = if size == :original
|
|
# user.avatar.blob
|
|
# else
|
|
# user.avatar_variant(size: size)&.blob
|
|
# end
|
|
|
|
data = user.avatar.blob.download
|
|
send_data data, type: "image/#{format}", disposition: "inline"
|
|
else
|
|
http_status :not_found
|
|
end
|
|
end
|
|
end
|