Class: Puppet::Network::HTTP::RackXMLRPC
- Inherits:
-
RackHttpHandler
- Object
- RackHttpHandler
- Puppet::Network::HTTP::RackXMLRPC
- Defined in:
- lib/vendor/puppet/network/http/rack/xmlrpc.rb
Instance Method Summary collapse
- #build_client_request(request) ⇒ Object
-
#initialize(handlers) ⇒ RackXMLRPC
constructor
A new instance of RackXMLRPC.
- #process(request, response) ⇒ Object
Constructor Details
#initialize(handlers) ⇒ RackXMLRPC
Returns a new instance of RackXMLRPC.
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/vendor/puppet/network/http/rack/xmlrpc.rb', line 6 def initialize(handlers) @xmlrpc_server = Puppet::Network::XMLRPCServer.new handlers.each do |name| Puppet.debug " -> register xmlrpc namespace #{name}" unless handler = Puppet::Network::Handler.handler(name) raise ArgumentError, "Invalid XMLRPC handler #{name}" end @xmlrpc_server.add_handler(handler.interface, handler.new({})) end super() end |
Instance Method Details
#build_client_request(request) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/vendor/puppet/network/http/rack/xmlrpc.rb', line 42 def build_client_request(request) ip = request.ip # if we find SSL info in the headers, use them to get a hostname. # try this with :ssl_client_header, which defaults should work for # Apache with StdEnvVars. if dn = request.env[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/) node = dn_matchdata[1].to_str authenticated = (request.env[Puppet[:ssl_client_verify_header]] == 'SUCCESS') else begin node = Resolv.getname(ip) rescue => detail Puppet.err "Could not resolve #{ip}: #{detail}" node = "unknown" end authenticated = false end Puppet::Network::ClientRequest.new(node, ip, authenticated) end |
#process(request, response) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/vendor/puppet/network/http/rack/xmlrpc.rb', line 18 def process(request, response) # errors are sent as text/plain response['Content-Type'] = 'text/plain' if not request.post? response.status = 405 response.write 'Method Not Allowed' return end if request.media_type != "text/xml" response.status = 400 response.write 'Bad Request' return end # get auth/certificate data client_request = build_client_request(request) response_body = @xmlrpc_server.process(request.body.read, client_request) response.status = 200 response['Content-Type'] = 'text/xml; charset=utf-8' response.write response_body end |