Class: RedfishTools::Servlet

Inherits:
WEBrick::HTTPServlet::AbstractServlet
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/redfish_tools/servlet.rb

Constant Summary collapse

BAD_HEADERS =
Set.new(["connection", "content-length", "keep-alive"])
DEFAULT_HEADERS =
{
  "content-type" => "application/json"
}.freeze
TRANSITIONS =
{
  "On"  => {
    "GracefullShutdown" => "Off",
    "ForceOff"          => "Off",
    "PushPowerButton"   => "Off",
    "Nmi"               => "Off",
    "GracefullRestart"  => "On",
    "ForceRestart"      => "On",
    "PowerCycle"        => "On",
  }.freeze,
  "Off" => {
    "On"              => "On",
    "ForceOn"         => "On",
    "PushPowerButton" => "On",
  }.freeze,
}.freeze

Instance Method Summary collapse

Instance Method Details

#do_DELETE(request, response) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/redfish_tools/servlet.rb', line 85

def do_DELETE(request, response)
  item = datastore.get(request.path)
  return response.status = 404 unless item.body

  delete_item(item)
  response.status = 204
end

#do_GET(request, response) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/redfish_tools/servlet.rb', line 44

def do_GET(request, response)
  return response.status = 404 unless datastore.get(request.path).body

  item = datastore.get(request.path)
  response.status = 200
  set_headers(response, item.headers)
  response.body = item.body.to_json
end

#do_PATCH(_request, response) ⇒ Object



81
82
83
# File 'lib/redfish_tools/servlet.rb', line 81

def do_PATCH(_request, response)
  response.status = 501
end

#do_POST(request, response) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/redfish_tools/servlet.rb', line 53

def do_POST(request, response)
  action = system_actions[request.path]
  item = datastore.get(request.path)
  return response.status = 404 unless action || item.body
  return response.status = 405 if action.nil? && item.body["Members"].nil?

  data = JSON.parse(request.body)
  if action
    body, headers, status = execute_action(action, data)
  elsif (request.path)
    body, headers, status = (item, data)
  else
    body, headers, status = new_item(item, data)
  end

  response.status = status
  set_headers(response, headers)
  response.body = body.to_json
rescue JSON::ParserError
  response.status = 400
  set_headers(response)
  response.body = error_body("Invalid JSON").to_json
end

#do_PUT(_request, response) ⇒ Object



77
78
79
# File 'lib/redfish_tools/servlet.rb', line 77

def do_PUT(_request, response)
  response.status = 501
end

#service(request, response) ⇒ Object



38
39
40
41
42
# File 'lib/redfish_tools/servlet.rb', line 38

def service(request, response)
  return response.status = 401 unless authorized?(request)

  super
end