31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 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
|