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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/floe/builtin_runner/methods.rb', line 33
def self.http(params, _secrets, _context)
params["Method"] ||= "GET"
error = http_verify_params(params)
return BuiltinRunner.error!({}, :cause => error) if error
method, url, , query, body =
params.values_at("Method", "Url", "Headers", "QueryParameters", "Body")
ssl = {
"verify" => params.dig("Ssl", "Verify"),
"verify_hostname" => params.dig("Ssl", "VerifyHostname"),
"hostname" => params.dig("Ssl", "Hostname"),
"ca_file" => params.dig("Ssl", "CaFile"),
"ca_path" => params.dig("Ssl", "CaPath"),
"verify_mode" => params.dig("Ssl", "VerifyMode"),
"verify_depth" => params.dig("Ssl", "VerifyDepth"),
"version" => params.dig("Ssl", "Version"),
"min_version" => params.dig("Ssl", "MinVersion"),
"max_version" => params.dig("Ssl", "MaxVersion"),
"ciphers" => params.dig("Ssl", "Ciphers")
}.compact
request = {
"timeout" => params.dig("Options", "Timeout"),
"read_timeout" => params.dig("Options", "ReadTimeout"),
"open_timeout" => params.dig("Options", "OpenTimeout"),
"write_timeout" => params.dig("Options", "WriteTimeout")
}.compact
proxy = {
"uri" => params.dig("Proxy", "Uri"),
"user" => params.dig("Proxy", "User"),
"password" => params.dig("Proxy", "Password")
}.compact
connection_options = {
:url => url,
:params => query,
:headers => ,
:request => (request unless request.empty?),
:proxy => (proxy unless proxy.empty?),
:ssl => (ssl unless ssl.empty?)
}
require "faraday"
connection = ::Faraday.new(connection_options)
if params.dig("Options", "Encoding") == "JSON"
connection.request(:json)
connection.response(:json)
end
if params.dig("Options", "FollowRedirects") != false
require "faraday/follow_redirects"
connection.response(:follow_redirects)
end
response = connection.send(method.downcase) do |faraday_request|
faraday_request.body = body if body
end
output = {"Status" => response.status, "Body" => response.body, "Headers" => response.}
if response.success?
BuiltinRunner.success!({}, :output => output)
else
BuiltinRunner.error!({}, :error => "States.Http.StatusCode.#{response.status}", :cause => response.reason_phrase, :details => output)
end
rescue ::Faraday::ConnectionFailed => err
BuiltinRunner.error!({}, :cause => err.to_s)
end
|