35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
# Machine manipulation request handlers
|
|
#
|
|
# Copyright (C) 2020 Eric Callahan <arksine.code@gmail.com>
|
|
#
|
|
# This file may be distributed under the terms of the GNU GPLv3 license.
|
|
import logging
|
|
|
|
class Machine:
|
|
def __init__(self, server):
|
|
self.server = server
|
|
self.server.register_endpoint(
|
|
"/machine/reboot", "machine_reboot", ['POST'],
|
|
self._handle_machine_request)
|
|
self.server.register_endpoint(
|
|
"/machine/shutdown", "machine_shutdown", ['POST'],
|
|
self._handle_machine_request)
|
|
|
|
async def _handle_machine_request(self, path, method, args):
|
|
if path == "/machine/shutdown":
|
|
cmd = "sudo shutdown now"
|
|
elif path == "/machine/reboot":
|
|
cmd = "sudo reboot now"
|
|
else:
|
|
raise self.server.error("Unsupported machine request")
|
|
shell_command = self.server.lookup_plugin('shell_command')
|
|
scmd = shell_command.build_shell_command(cmd, None)
|
|
try:
|
|
await scmd.run(timeout=2., verbose=False)
|
|
except Exception:
|
|
logging.exception("Error running cmd '%s'" % (cmd))
|
|
return "ok"
|
|
|
|
def load_plugin(server):
|
|
return Machine(server)
|