lib/kanoko/application/convert.rb in kanoko-0.1.0 vs lib/kanoko/application/convert.rb in kanoko-0.1.1

- old
+ new

@@ -29,26 +29,34 @@ # # run MyApp module Kanoko module Application class Convert < Sinatra::Application + # /123abc456def=/resize/200x200/crop/100x100/path/to/src get '/:hash/*' do - request_uri = URI.parse env["REQUEST_URI"] + request_uri = URI.parse(env["REQUEST_URI"] || "/#{params[:captures].join('/')}") hash = params[:hash] unless params[:splat] logger.error "invalid url #{request_uri}" return 400 end + splat = params[:splat][0] - function = Function.new splat - hint_src = splat[function.to_path.length..-1] + argument = ArgumentParser.new splat + + hint_src = splat[argument.path.length..-1] + unless hint_src + logger.error "invalid url #{request_uri}" + return 400 + end + hint_index = request_uri.to_s.index(hint_src) src_path = request_uri.to_s[hint_index..-1] - unless hash == Kanoko.make_hash(*(function.to_a.flatten), src_path) - logger.error "hash check failed #{[*(function.to_a.flatten), src_path]}" + unless hash == Kanoko.make_hash(*(argument.to_a.flatten), src_path) + logger.error "hash check failed #{[*(argument.to_a.flatten), src_path]}" return 400 end res = http_get(URI.parse("#{(request.secure? ? 'https' : 'http')}://#{src_path}")) if res.nil? @@ -59,54 +67,18 @@ Tempfile.open("src") do |src_file| src_file.write res.body src_file.fdatasync Tempfile.open("dst") do |dst_file| - default_env = {"OMP_NUM_THREADS" => "1"} - command = 'convert' - default_options = [ - '-depth', '8' - ] - options = [] - - function.each do |name, arg| - func_options = case name.to_sym - when :crop - [ - '-crop', arg - ] - - when :fill - [ - '-gravity', 'north', - '-extent', arg, - '-background', 'transparent', - ] - - when :resize - [ - '-define', "jpeg:size=#{arg}", - '-thumbnail', arg, - ] - - else - logger.error "undefined func #{name}" - return 400 - end - - options.concat func_options - end - system_command = [ - default_env, - command, - default_options, - options, + {"OMP_NUM_THREADS" => "1"}, + 'convert', + '-depth', '8', + argument.options, src_file.path, dst_file.path ].flatten - result = system *system_command unless result logger.error "command fail $?=#{$?.inspect}" return 500 @@ -150,10 +122,14 @@ else headers[key] ||= value end end end + + error 404 do + "" + end end end end -require 'kanoko/application/convert/function' +require 'kanoko/application/convert/argument_parser'