diff options
Diffstat (limited to 'meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py')
-rw-r--r-- | meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py | 88 |
1 files changed, 69 insertions, 19 deletions
diff --git a/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py b/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py index 6d59fd6..52c98d9 100644 --- a/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py +++ b/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/rest.py @@ -20,14 +20,24 @@ from ctypes import * -from bottle import route, run, template, request, response +from bottle import route, run, template, request, response, ServerAdapter from bottle import abort +from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer import json -from rest_fruid import * -from rest_server import * -from rest_sensors import * -from rest_bmc import * -from rest_gpios import * +import ssl +import socket +import os +import rest_fruid +import rest_server +import rest_sensors +import rest_bmc +import rest_gpios +import rest_modbus +import rest_slotid + +CONSTANTS = { + 'certificate': '/usr/lib/ssl/certs/rest_server.pem', +} # Handler for root resource endpoint @route('/api') @@ -50,7 +60,8 @@ def rest_sys(): "Description": "Wedge System", }, "Actions": [], - "Resources": [ "mb", "bmc", "server", "sensors", "gpios"], + "Resources": [ "mb", "bmc", "server", "sensors", "gpios", + "modbus_registers", "slotid"], } return result @@ -70,33 +81,72 @@ def rest_sys(): # Handler for sys/mb/fruid resource endpoint @route('/api/sys/mb/fruid') -def rest_fruid(): - return get_fruid() +def rest_fruid_hdl(): + return rest_fruid.get_fruid() # Handler for sys/bmc resource endpoint @route('/api/sys/bmc') -def rest_bmc(): - return get_bmc() +def rest_bmc_hdl(): + return rest_bmc.get_bmc() # Handler for sys/server resource endpoint @route('/api/sys/server') -def rest_bmc(): - return get_server() +def rest_server_hdl(): + return rest_server.get_server() # Handler for uServer resource endpoint @route('/api/sys/server', method='POST') -def rest_server(): +def rest_server_act_hdl(): data = json.load(request.body) - return server_action(data) + return rest_server.server_action(data) # Handler for sensors resource endpoint @route('/api/sys/sensors') -def rest_sensors(): - return get_sensors() +def rest_sensors_hdl(): + return rest_sensors.get_sensors() # Handler for sensors resource endpoint @route('/api/sys/gpios') -def rest_gpios(): - return get_gpios() +def rest_gpios_hdl(): + return rest_gpios.get_gpios() + +@route('/api/sys/modbus_registers') +def modbus_registers_hdl(): + return rest_modbus.get_modbus_registers() + +# Handler for sensors resource endpoint +@route('/api/sys/slotid') +def rest_slotid_hdl(): + return rest_slotid.get_slotid() run(host = "::", port = 8080) + +# SSL Wrapper for Rest API +class SSLWSGIRefServer(ServerAdapter): + def run(self, handler): + if self.quiet: + class QuietHandler(WSGIRequestHandler): + def log_request(*args, **kw): pass + self.options['handler_class'] = QuietHandler + + # IPv6 Support + server_cls = self.options.get('server_class', WSGIServer) + + if ':' in self.host: + if getattr(server_cls, 'address_family') == socket.AF_INET: + class server_cls(server_cls): + address_family = socket.AF_INET6 + + srv = make_server(self.host, self.port, handler, + server_class=server_cls, **self.options) + srv.socket = ssl.wrap_socket ( + srv.socket, + certfile=CONSTANTS['certificate'], + server_side=True) + srv.serve_forever() + +# Use SSL if the certificate exists. Otherwise, run without SSL. +if os.access(CONSTANTS['certificate'], os.R_OK): + run(server=SSLWSGIRefServer(host="::", port=8443)) +else: + run(host = "::", port = 8080) |