mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-11-06 13:12:27 +01:00
feat(runtime): bind remote and owned resources to authority
This commit is contained in:
@@ -814,10 +814,13 @@ def _external_execution_bridge(
|
||||
raise ValueError("external execution bridge returned an invalid payload")
|
||||
return str(payload.get("description") or tool), payload["result"]
|
||||
|
||||
from src.agent_runtime.remote_resources import configuration_incarnation
|
||||
return AgentExecutionBridge(
|
||||
route_tool=route_tool,
|
||||
supported_tools=supported,
|
||||
name="request_local_http",
|
||||
endpoint_id=url,
|
||||
configuration_id=configuration_incarnation((url, token, tuple(sorted(supported)))),
|
||||
)
|
||||
|
||||
|
||||
@@ -3418,6 +3421,7 @@ def setup_chat_routes(
|
||||
_request_authority = request_authority_for_http(
|
||||
request, message, owner=_user, session_id=session, workspace=workspace,
|
||||
history=_turn_history, policy=tool_policy,
|
||||
client_runtime_context=client_runtime_context,
|
||||
active_document=bool(active_doc),
|
||||
image_attachment=any(str(a.get('mime') or '').startswith('image/')
|
||||
for a in (ctx.preprocessed.attachment_meta or [])),
|
||||
|
||||
@@ -13,6 +13,7 @@ import asyncio
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi import HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from core.middleware import require_admin
|
||||
@@ -77,6 +78,19 @@ def _save_config(cfg: dict):
|
||||
safe_chmod(str(VAULT_FILE), 0o600)
|
||||
|
||||
|
||||
def _bind_config_owner(cfg: dict, request: Request):
|
||||
from src.auth_helpers import effective_user
|
||||
from src.owner_identity import effective_storage_owner
|
||||
owner = effective_storage_owner(effective_user(request))
|
||||
if not owner or (cfg.get("owner") and cfg["owner"] != owner):
|
||||
raise HTTPException(403, "Vault configuration requires its explicit owner")
|
||||
if not cfg.get("owner"):
|
||||
# Legacy credentials cannot silently acquire a new ownership binding.
|
||||
cfg.pop("session", None)
|
||||
cfg.pop("unlocked_at", None)
|
||||
cfg["owner"] = owner
|
||||
|
||||
|
||||
async def _run_bw(args: list, session: str = None, input_text: str = None,
|
||||
bw_password: str = None) -> tuple:
|
||||
env = {}
|
||||
@@ -144,6 +158,7 @@ def setup_vault_routes():
|
||||
"""Save vault URL + email. Runs 'bw config server' to point at Vaultwarden."""
|
||||
require_admin(request)
|
||||
cfg = _load_config()
|
||||
_bind_config_owner(cfg, request)
|
||||
cfg["server_url"] = req.server_url.strip().rstrip("/")
|
||||
cfg["email"] = req.email.strip()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user