lib/simple_captcha/middleware.rb in galetahub-simple_captcha-0.1.2 vs lib/simple_captcha/middleware.rb in galetahub-simple_captcha-0.1.3
- old
+ new
@@ -1,10 +1,15 @@
# encoding: utf-8
module SimpleCaptcha
class Middleware
include SimpleCaptcha::ImageHelpers
+ DEFAULT_SEND_FILE_OPTIONS = {
+ :type => 'application/octet-stream'.freeze,
+ :disposition => 'attachment'.freeze,
+ }.freeze
+
def initialize(app, options={})
@app = app
self
end
@@ -15,23 +20,39 @@
@app.call(env)
end
end
protected
- def make_image(env, body = '', status = 404)
+ def make_image(env, headers = {}, status = 404)
request = Rack::Request.new(env)
code = request.params["code"]
+ body = []
if !code.blank? && Utils::simple_captcha_value(code)
- status = 200
- body = generate_simple_captcha_image(code)
- body = File.open(body, "rb")
+ #status, headers, body = @app.call(env)
+ #status = 200
+ #body = generate_simple_captcha_image(code)
+ #headers['Content-Type'] = 'image/jpeg'
+
+ return send_file(generate_simple_captcha_image(code), :type => 'image/jpeg', :disposition => 'inline', :filename => 'simple_captcha.jpg')
end
- [status, {'Content-Type' => 'image/jpeg', 'Content-Length' => body.size.to_s}, body]
+ [status, headers, body]
end
def captcha_path?(request_path)
request_path.include?('/simple_captcha')
+ end
+
+ def send_file(path, options = {})
+ raise MissingFile, "Cannot read file #{path}" unless File.file?(path) and File.readable?(path)
+
+ options[:filename] ||= File.basename(path) unless options[:url_based_filename]
+
+ status = options[:status] || 200
+ headers = {"Content-Disposition" => "#{options[:disposition]}; filename='#{options[:filename]}'", "Content-Type" => options[:type], 'Content-Transfer-Encoding' => 'binary', 'Cache-Control' => 'private'}
+ response_body = File.open(path, "rb")
+
+ [status, headers, response_body]
end
end
end