19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/xi_wechat_corp/callback/rack.rb', line 19
def call(env)
rack_request = ::Rack::Request.new(env)
if (rack_request.get? || rack_request.post?) &&
(request = @config.build_request(rack_request))
request.verify!
if rack_request.get?
::Rack::Response.new([request.challenge]).finish
else
request.decrypt
env['xi_wechat_corp.params'] = request.params
status, , body = @app.call(env)
rack_response = ::Rack::Response.new([], status, )
if rack_response.successful?
rack_response.status = 200 if status == 201
response = request.build_response(read_body(body))
xml = response.to_s
if !xml.empty?
rack_response['Content-Type'] = CONTENT_TYPE
rack_response.write xml
end
rack_response.finish
else
[status, , body]
end
end
else
@app.call(env)
end
rescue XiWechatCorp::Error => e
if XiWechatCorp.logger
XiWechatCorp.logger.error(e.message)
end
[403, {}, []]
end
|