require "sinatra" require "mini_magick" MiniMagick.logger.level = Logger::DEBUG ROOT = ENV.fetch("ROOT") KEY = ENV.fetch("KEY") DITHER = ENV["DITHER"] != "0" FORMAT = "png" get "/*" do |path| halt 404, {"Content-Type" => "text/plain"}, "not found" unless File.exist?("#{ROOT}/#{path}.enc") content_type "image/#{FORMAT}" geometry = params["geo"] unless params["geo"] == "" geometry.gsub!(/\d+/) { |n| n.to_i * 2 } if geometry && !DITHER decrypted = %x( openssl \ aes-256-cbc \ -d \ -in #{ROOT}/#{path}.enc \ -pass file:#{KEY} \ -iter 1000000 ) convert = MiniMagick::Tool::Convert.new convert.stdin convert.background("white") convert.layers("flatten") if geometry if geometry.match?(/^\d+x\d+$/) convert.resize "#{geometry}^" convert.gravity "center" convert.extent geometry else convert.resize geometry end end if DITHER convert.ordered_dither "o8x8" convert.monochrome end convert << "#{FORMAT.upcase}:-" convert.call(stdin: decrypted) end