diff --git a/jupyter_rtc_core/app.py b/jupyter_rtc_core/app.py index 0b8f46b..dff5b36 100644 --- a/jupyter_rtc_core/app.py +++ b/jupyter_rtc_core/app.py @@ -3,7 +3,7 @@ import asyncio from traitlets import Instance, Type -from .handlers import RouteHandler, YRoomSessionHandler +from .handlers import RouteHandler, YRoomSessionHandler, FileIDIndexHandler from .websockets import GlobalAwarenessWebsocket, YRoomWebsocket from .rooms.yroom_manager import YRoomManager @@ -21,9 +21,10 @@ class RtcExtensionApp(ExtensionApp): # # ydoc websocket (r"api/collaboration/room/(.*)", YRoomWebsocket), # handler that just adds compatibility with Jupyter Collaboration's frontend - (r"api/collaboration/session/(.*)", YRoomSessionHandler) + (r"api/collaboration/session/(.*)", YRoomSessionHandler), + (r"api/fileid/index", FileIDIndexHandler) ] - + yroom_manager_class = Type( klass=YRoomManager, help="""YRoom Manager Class.""", diff --git a/jupyter_rtc_core/handlers.py b/jupyter_rtc_core/handlers.py index f3cd186..73e3422 100644 --- a/jupyter_rtc_core/handlers.py +++ b/jupyter_rtc_core/handlers.py @@ -4,6 +4,35 @@ from jupyter_server.base.handlers import APIHandler import tornado +from jupyter_server.auth.decorator import authorized +from jupyter_server.base.handlers import APIHandler +from tornado import web +from tornado.escape import json_encode + +from jupyter_server_fileid.manager import BaseFileIdManager + +# TODO: This handler belongs in Jupyter Server FileID. +# Putting it here for now so we don't have to wait for upstream releases. +class FileIDIndexHandler(APIHandler): + auth_resource = "contents" + + @property + def file_id_manager(self) -> BaseFileIdManager: + return self.settings.get("file_id_manager") + + @web.authenticated + @authorized + def post(self): + try: + path = self.get_argument("path") + id = self.file_id_manager.index(path) + self.write(json_encode({"id": id, "path": path})) + except web.MissingArgumentError: + raise web.HTTPError( + 400, log_message="'path' parameter was not provided in the request." + ) + + class RouteHandler(APIHandler): # The following decorator should be present on all verb methods (head, get, post, # patch, put, delete, options) to ensure only authorized user can request the