mirror of
https://github.com/esphome/esphome.git
synced 2024-11-27 01:08:03 +01:00
Add endpoint to fetch secrets keys (#2873)
This commit is contained in:
parent
a66e94a0b0
commit
c128880033
2 changed files with 28 additions and 4 deletions
|
@ -27,7 +27,7 @@ import tornado.process
|
|||
import tornado.web
|
||||
import tornado.websocket
|
||||
|
||||
from esphome import const, platformio_api, util
|
||||
from esphome import const, platformio_api, util, yaml_util
|
||||
from esphome.helpers import mkdir_p, get_bool_env, run_system_command
|
||||
from esphome.storage_json import (
|
||||
EsphomeStorageJSON,
|
||||
|
@ -836,6 +836,28 @@ class LogoutHandler(BaseHandler):
|
|||
self.redirect("./login")
|
||||
|
||||
|
||||
class SecretKeysRequestHandler(BaseHandler):
|
||||
@authenticated
|
||||
def get(self):
|
||||
|
||||
filename = None
|
||||
|
||||
for secret_filename in const.SECRETS_FILES:
|
||||
relative_filename = settings.rel_path(secret_filename)
|
||||
if os.path.isfile(relative_filename):
|
||||
filename = relative_filename
|
||||
break
|
||||
|
||||
if filename is None:
|
||||
self.send_error(404)
|
||||
return
|
||||
|
||||
secret_keys = list(yaml_util.load_yaml(filename, clear_secrets=False))
|
||||
|
||||
self.set_header("content-type", "application/json")
|
||||
self.write(json.dumps(secret_keys))
|
||||
|
||||
|
||||
def get_base_frontend_path():
|
||||
if ENV_DEV not in os.environ:
|
||||
import esphome_dashboard
|
||||
|
@ -939,6 +961,7 @@ def make_app(debug=get_bool_env(ENV_DEV)):
|
|||
(f"{rel}static/(.*)", StaticFileHandler, {"path": get_static_path()}),
|
||||
(f"{rel}devices", ListDevicesHandler),
|
||||
(f"{rel}import", ImportRequestHandler),
|
||||
(f"{rel}secret_keys", SecretKeysRequestHandler),
|
||||
],
|
||||
**app_settings,
|
||||
)
|
||||
|
|
|
@ -329,7 +329,8 @@ ESPHomeLoader.add_constructor("!lambda", ESPHomeLoader.construct_lambda)
|
|||
ESPHomeLoader.add_constructor("!force", ESPHomeLoader.construct_force)
|
||||
|
||||
|
||||
def load_yaml(fname):
|
||||
def load_yaml(fname, clear_secrets=True):
|
||||
if clear_secrets:
|
||||
_SECRET_VALUES.clear()
|
||||
_SECRET_CACHE.clear()
|
||||
return _load_yaml_internal(fname)
|
||||
|
|
Loading…
Reference in a new issue