feat(brain): Skills holen OAuth-Tokens vom Brain + Anti-Friedhof-Check
P1+P2-Infrastruktur:
- Neuer Endpoint GET /oauth/{service}/token liefert aktuelles access_token
mit Auto-Refresh (< 60s Restzeit). Skills rufen das ueber
BRAIN_INTERNAL_URL ab statt client_secret hardzucoden.
- run_skill setzt BRAIN_INTERNAL_URL als ENV (Default http://localhost:8080,
override via Brain-Env). Skills laufen im Brain-Container, localhost passt.
- skills.create_skill: _check_anti_graveyard rejected Versions-Suffixe
(-v2, _v3, -new, -fixed, -old, -alt, -copy, -final, -clean) und
Prefix-Kollisionen (z.B. spotify-aria wenn spotify schon existiert) — die
zwei Patterns hinter dem alten Skill-Friedhof.
Tool-Description fuer skill_create um PFLICHT-VORHER-Block ergaenzt
(skill_list, kein Versionssuffix, oauth_get_token, config_schema) damit
ARIA die Regeln direkt im Schema sieht.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -939,6 +939,26 @@ async def oauth_revoke_endpoint(service: str):
|
||||
return {"ok": oauth_mod.revoke(service)}
|
||||
|
||||
|
||||
@app.get("/oauth/{service}/token")
|
||||
async def oauth_token_endpoint(service: str):
|
||||
"""Liefert das aktuelle access_token fuer einen Service (mit Auto-Refresh
|
||||
wenn < 60s Restzeit). Nur fuer interne Skill-Aufrufe gedacht — Skills
|
||||
sollen NIEMALS hardcoded client_secrets haben, sondern dieses Endpoint
|
||||
pollen. Antwort: {access_token, expires_at, expires_in_sec}.
|
||||
Bei nicht-autorisiert: 401 mit klarer Message."""
|
||||
try:
|
||||
rec = oauth_mod.get_token(service)
|
||||
except RuntimeError as exc:
|
||||
raise HTTPException(401, str(exc))
|
||||
expires_at = int(rec.get("expires_at") or 0)
|
||||
import time as _t
|
||||
return {
|
||||
"access_token": rec.get("access_token"),
|
||||
"expires_at": expires_at,
|
||||
"expires_in_sec": max(0, expires_at - int(_t.time())),
|
||||
}
|
||||
|
||||
|
||||
class OAuthAuthorizeIn(BaseModel):
|
||||
service: str
|
||||
scopes: Optional[List[str]] = None
|
||||
|
||||
Reference in New Issue
Block a user