# File lib/dragonfly/server.rb, line 26 def before_serve(&block) self.before_serve_callback = block end
# File lib/dragonfly/server.rb, line 31 def call(env) if dragonfly_url == env["PATH_INFO"] dragonfly_response elsif (params = url_mapper.params_for(env["PATH_INFO"], env["QUERY_STRING"])) && params['job'] job = Job.deserialize(params['job'], app) validate_job!(job) job.validate_sha!(params['sha']) if protect_from_dos_attacks response = Response.new(job, env) catch(:halt) do if before_serve_callback && response.will_be_served? before_serve_callback.call(job, env) end response.to_response end else [404, {'Content-Type' => 'text/plain', 'X-Cascade' => 'pass'}, ['Not found']] end rescue Job::NoSHAGiven => e [400, {"Content-Type" => 'text/plain'}, ["You need to give a SHA parameter"]] rescue Job::IncorrectSHA => e [400, {"Content-Type" => 'text/plain'}, ["The SHA parameter you gave (#{e}) is incorrect"]] rescue JobNotAllowed => e log.warn(e.message) [403, {"Content-Type" => 'text/plain'}, ["Forbidden"]] rescue Serializer::BadString, Serializer::MaliciousString, Job::InvalidArray => e log.warn(e.message) [404, {'Content-Type' => 'text/plain'}, ['Not found']] end
# File lib/dragonfly/server.rb, line 60 def url_for(job, opts={}) opts = opts.dup host = opts.delete(:host) || url_host params = stringify_keys(opts) params['job'] = job.serialize params['sha'] = job.sha if protect_from_dos_attacks url = url_mapper.url_for(params) "#{host}#{url}" end
Generated with the Darkfish Rdoc Generator 2.