From 58fa361c8cb8a07664f057bd6015b673035a59fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Sch=C3=B6neberg?= Date: Fri, 17 Jun 2022 17:19:12 +0200 Subject: [PATCH] authorization: implement /access/info endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luca Schöneberg --- docs/web_api.md | 19 +++++++++++++++++++ moonraker/components/authorization.py | 15 +++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/docs/web_api.md b/docs/web_api.md index 90b46ef..3482c4c 100644 --- a/docs/web_api.md +++ b/docs/web_api.md @@ -2125,6 +2125,25 @@ to any API endpoint. The query string should be added in the form of: ?token={base32_random_token} ``` +#### Retrieve information about authorization endpoints +HTTP Request: +```http +GET /access/info +``` +JSON-RPC request: Not Available + +Returns: An object containing information about authorization endpoints, such as +default_source and available_sources. +```json +{ + "default_source": "moonraker", + "available_sources": [ + "moonraker", + "ldap" + ] +} +``` + #### Get the Current API Key HTTP request: ```http diff --git a/moonraker/components/authorization.py b/moonraker/components/authorization.py index 2f4943d..c23ddc8 100644 --- a/moonraker/components/authorization.py +++ b/moonraker/components/authorization.py @@ -220,6 +220,7 @@ class Authorization: self.permitted_paths.add("/server/redirect") self.permitted_paths.add("/access/login") self.permitted_paths.add("/access/refresh_jwt") + self.permitted_paths.add("/access/info") self.server.register_endpoint( "/access/login", ['POST'], self._handle_login, transports=['http']) @@ -244,6 +245,9 @@ class Authorization: self.server.register_endpoint( "/access/oneshot_token", ['GET'], self._handle_oneshot_request, transports=['http']) + self.server.register_endpoint( + "/access/info", ['GET'], + self._handle_default_source_request, transports=['http']) self.server.register_notification("authorization:user_created") self.server.register_notification("authorization:user_deleted") @@ -287,6 +291,17 @@ class Authorization: "action": "user_logged_out" } + async def _handle_default_source_request(self, + web_request: WebRequest + ) -> Dict[str, str | List[str]]: + sources = ["moonraker"] + if self.ldap is not None: + sources.append("ldap") + return { + "default_source": self.default_source, + "available_sources": sources + } + async def _handle_refresh_jwt(self, web_request: WebRequest ) -> Dict[str, str]: