Add optional photo providers, layout studio and scoped integrations

This commit is contained in:
Pigway
2026-10-08 23:18:11 +08:00
parent 3643fae86a
commit 69a0841868
38 changed files with 2843 additions and 41 deletions
+51
View File
@@ -0,0 +1,51 @@
from fastapi import Depends
from pigway_frame_flow.core.auth import require
from pigway_frame_flow.extensions.api import AISecret
from pigway_frame_flow.extensions.secrets import save_secret
from pigway_frame_flow.providers.external import (
ExternalProviderConfig,
)
def install_providers(app, service):
providers = service.providers
@app.get(
"/api/v1/providers/external",
tags=["Providers"],
dependencies=[Depends(require("devices:read"))],
)
def list_providers():
return providers.list()
@app.put(
"/api/v1/providers/external/{id}",
tags=["Providers"],
dependencies=[Depends(require("admin"))],
)
def configure(id: str, payload: ExternalProviderConfig):
return providers.save(id, payload)
@app.get(
"/api/v1/providers/external/{id}/data",
tags=["Providers"],
dependencies=[Depends(require("devices:read"))],
)
def provider_data(id: str):
return providers.get(id)
@app.put(
"/api/v1/providers/external/{id}/key",
status_code=204,
tags=["Providers"],
dependencies=[Depends(require("admin"))],
)
def provider_key(id: str, payload: AISecret):
providers.config(id)
save_secret(
service.settings.config_dir / ("provider-" + id + ".secret"),
payload.key.get_secret_value(),
)
service.settings.additional_secrets.append(payload.key.get_secret_value())
providers.cache.pop(id, None)