Files

52 lines
1.5 KiB
Python
Raw Permalink Normal View History

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)