blob: 2363b11fd5fb5074bf71d2771ee03095c4ab667f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
require "rack/request"
require "cgi" unless defined?(CGI)
module ChefZero
class RestRequest
def initialize(env, rest_base_prefix = [])
@env = env
@rest_base_prefix = rest_base_prefix
end
attr_reader :env
attr_accessor :rest_base_prefix
def base_uri
# Load balancer awareness
if env["HTTP_X_FORWARDED_PROTO"]
scheme = env["HTTP_X_FORWARDED_PROTO"]
else
scheme = env["rack.url_scheme"]
end
@base_uri ||= "#{scheme}://#{env["HTTP_HOST"]}#{env["SCRIPT_NAME"]}"
end
def base_uri=(value)
@base_uri = value
end
def api_version
Integer(@env["HTTP_X_OPS_SERVER_API_VERSION"] || 0)
end
def api_v0?
api_version == 0
end
def requestor
@env["HTTP_X_OPS_USERID"]
end
def method
@env["REQUEST_METHOD"]
end
def rest_path
@rest_path ||= rest_base_prefix + env["PATH_INFO"].split("/").select { |part| part != "" }
end
def rest_path=(rest_path)
@rest_path = rest_path
end
def body=(body)
@body = body
end
def body
@body ||= env["rack.input"].read
end
def query_params
@query_params ||= begin
params = Rack::Request.new(env).GET
params.keys.each do |key|
params[key] = self.class.rfc2396_parser.unescape(params[key])
end
params
end
end
def to_s
result = "#{method} #{rest_path.join("/")}"
if query_params.size > 0
result << "?#{query_params.map { |k, v| "#{k}=#{v}" }.join("&")}"
end
if body.chomp != ""
result << "\n--- #{method} BODY ---\n"
result << body
result << "\n" unless body.end_with?("\n")
result << "--- END #{method} BODY ---"
end
result
end
def self.rfc2396_parser
@parser ||= URI::RFC2396_Parser.new
end
end
end
|