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'