diff --git a/jsc_custom/apihandler/frontend.py b/jsc_custom/apihandler/frontend.py new file mode 100644 index 0000000000000000000000000000000000000000..ad9cc42468c6f142a0c3ca94d1a4d55e483b2f43 --- /dev/null +++ b/jsc_custom/apihandler/frontend.py @@ -0,0 +1,166 @@ +import json + +from jupyterhub.handlers import default_handlers +from tornado import web + +from ..misc import get_custom_config +from ..misc import get_incidents +from ..misc import get_reservations +from ..spawner import jhub_hostname +from ..spawner.utils import async_decrypted_user_options +from .misc import NoXSRFCheckAPIHandler + + +class FHostnameAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + self.write(jhub_hostname) + self.set_status(200) + return + + +class FSystemConfigAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + self.write(json.dumps(get_custom_config().get("systems", {}))) + self.set_status(200) + return + + +class FMapSystemsAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("mapSystems", {}))) + self.set_status(200) + return + + +class FMapPartitionsAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("mapPartitions", {}))) + self.set_status(200) + return + + +class FDefaultPartitionsAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("defaultPartitions", {}))) + self.set_status(200) + return + + +class FServicesAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("services", {}))) + self.set_status(200) + return + + +class FResourcesAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("resources", {}))) + self.set_status(200) + return + + +class FUserModulesAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("userModules", {}))) + self.set_status(200) + return + + +class FBackendServicesAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_custom_config().get("backendServices", {}))) + self.set_status(200) + return + + +class FIncidentCheckAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + self.write(json.dumps(get_incidents(user))) + self.set_status(200) + return + + +class FReservationsAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + self.write(json.dumps(get_reservations())) + self.set_status(200) + return + + +class FUserOptionsAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.get_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is not None: + user_options = await async_decrypted_user_options(user) + self.write(json.dumps(user_options)) + self.set_status(200) + return + + +class FUserAPIHandler(NoXSRFCheckAPIHandler): + async def get(self, user_name=""): + self.set_header("Cache-Control", "no-cache") + user = self.find_user(user_name) + if user is None: + raise web.HTTPError(404) + + ret = {} + custom_config = get_custom_config() + ret["mapSystems"] = (custom_config.get("mapSystems", {}),) + ret["mapPartitions"] = (custom_config.get("mapPartitions", {}),) + ret["defaultPartitions"] = (custom_config.get("defaultPartitions", {}),) + ret["serviceConfig"] = (custom_config.get("services", {}),) + ret["userModules"] = (custom_config.get("userModules", {}),) + ret["resourcesConfig"] = (custom_config.get("resources", {}),) + ret["backendServices"] = (custom_config.get("backendServices", {}),) + ret["incidents"] = get_incidents(user) + ret["reservations"] = (get_reservations(),) + ret["decrypted_user_options"] = await async_decrypted_user_options + self.write(json.dumps(ret)) + self.set_status(200) + return + + +default_handlers.append((r"/api/f/incidents", FHostnameAPIHandler)) +default_handlers.append((r"/api/f/systemconfig", FSystemConfigAPIHandler)) +default_handlers.append((r"/api/f/mapsystems", FMapSystemsAPIHandler)) +default_handlers.append((r"/api/f/mappartitions", FMapPartitionsAPIHandler)) +default_handlers.append((r"/api/f/defaultpartitions", FDefaultPartitionsAPIHandler)) +default_handlers.append((r"/api/f/services", FServicesAPIHandler)) +default_handlers.append((r"/api/f/resources", FResourcesAPIHandler)) +default_handlers.append((r"/api/f/usermodules", FUserModulesAPIHandler)) +default_handlers.append((r"/api/f/backendservices", FBackendServicesAPIHandler)) +default_handlers.append((r"/api/f/incidents", FIncidentCheckAPIHandler)) +default_handlers.append((r"/api/f/reservations", FReservationsAPIHandler)) +default_handlers.append((r"/api/f/useroptions", FUserOptionsAPIHandler)) +default_handlers.append((r"/api/f/users", FUserAPIHandler))