diff --git a/tljh_repo2docker/builder.py b/tljh_repo2docker/builder.py index fbef6d3..083b799 100644 --- a/tljh_repo2docker/builder.py +++ b/tljh_repo2docker/builder.py @@ -3,7 +3,7 @@ from aiodocker import Docker, DockerError from jupyterhub.apihandlers import APIHandler -from jupyterhub.utils import admin_only +from jupyterhub.scopes import needs_scope from tornado import web from .docker import build_image @@ -17,7 +17,7 @@ class BuildHandler(APIHandler): """ @web.authenticated - @admin_only + @needs_scope('admin-ui') async def delete(self): data = self.get_json_body() name = data["name"] @@ -31,7 +31,7 @@ async def delete(self): self.finish(json.dumps({"status": "ok"})) @web.authenticated - @admin_only + @needs_scope('admin-ui') async def post(self): data = self.get_json_body() repo = data["repo"] diff --git a/tljh_repo2docker/images.py b/tljh_repo2docker/images.py index df1be13..ddceeb3 100644 --- a/tljh_repo2docker/images.py +++ b/tljh_repo2docker/images.py @@ -1,6 +1,6 @@ from inspect import isawaitable from jupyterhub.handlers.base import BaseHandler -from jupyterhub.utils import admin_only +from jupyterhub.scopes import needs_scope from tornado import web from .docker import list_containers, list_images @@ -12,7 +12,7 @@ class ImagesHandler(BaseHandler): """ @web.authenticated - @admin_only + @needs_scope('admin-ui') async def get(self): images = await list_images() containers = await list_containers() diff --git a/tljh_repo2docker/logs.py b/tljh_repo2docker/logs.py index e431412..7c87e16 100644 --- a/tljh_repo2docker/logs.py +++ b/tljh_repo2docker/logs.py @@ -2,9 +2,8 @@ from aiodocker import Docker from jupyterhub.apihandlers import APIHandler -from jupyterhub.utils import admin_only +from jupyterhub.scopes import needs_scope from tornado import web -from tornado.ioloop import IOLoop from tornado.iostream import StreamClosedError @@ -13,7 +12,7 @@ class LogsHandler(APIHandler): Expose a handler to follow the build logs. """ @web.authenticated - @admin_only + @needs_scope('admin-ui') async def get(self, name): self.set_header("Content-Type", "text/event-stream") self.set_header("Cache-Control", "no-cache")