diff --git a/API.md b/API.md index 12bbb3df1..8a309ed99 100644 --- a/API.md +++ b/API.md @@ -619,6 +619,7 @@ Get all available add-ons. - GET `/addons/{addon}/changelog` - GET `/addons/{addon}/documentation` - POST `/addons/{addon}/options` +- POST `/addons/{addon}/options/validate` ```json { diff --git a/supervisor/api/__init__.py b/supervisor/api/__init__.py index d711384fd..7dcb548ba 100644 --- a/supervisor/api/__init__.py +++ b/supervisor/api/__init__.py @@ -268,6 +268,9 @@ class RestAPI(CoreSysAttributes): web.post("/addons/{addon}/restart", api_addons.restart), web.post("/addons/{addon}/update", api_addons.update), web.post("/addons/{addon}/options", api_addons.options), + web.post( + "/addons/{addon}/options/validate", api_addons.options_validate + ), web.post("/addons/{addon}/rebuild", api_addons.rebuild), web.get("/addons/{addon}/logs", api_addons.logs), web.get("/addons/{addon}/icon", api_addons.icon), diff --git a/supervisor/api/addons.py b/supervisor/api/addons.py index c01e442ac..b0ae1c2ef 100644 --- a/supervisor/api/addons.py +++ b/supervisor/api/addons.py @@ -5,6 +5,7 @@ from typing import Any, Awaitable, Dict, List from aiohttp import web import voluptuous as vol +from voluptuous.humanize import humanize_error from ..addons import AnyAddon from ..addons.addon import Addon @@ -315,6 +316,15 @@ class APIAddons(CoreSysAttributes): addon.save_persist() + @api_process + async def options_validate(self, request: web.Request) -> None: + """Validate user options for add-on.""" + addon = self._extract_addon_installed(request) + try: + addon.schema(addon.options) + except vol.Invalid as ex: + raise APIError(humanize_error(addon.options, ex)) from None + @api_process async def security(self, request: web.Request) -> None: """Store security options for add-on."""