52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
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)
|