From e8de6af512eead4a68c139f165cd979597ab105b Mon Sep 17 00:00:00 2001 From: Markov Date: Mon, 23 Feb 2026 11:49:44 +0100 Subject: [PATCH] feat: regenerate-token endpoint --- src/tracker/api/members.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/tracker/api/members.py b/src/tracker/api/members.py index 1b493cd..9582ce5 100644 --- a/src/tracker/api/members.py +++ b/src/tracker/api/members.py @@ -197,6 +197,22 @@ async def update_member(slug: str, req: MemberUpdate, db: AsyncSession = Depends return _member_to_out(member) +@router.post("/members/{slug}/regenerate-token") +async def regenerate_token(slug: str, db: AsyncSession = Depends(get_db)): + result = await db.execute( + select(Member).where(Member.slug == slug) + ) + member = result.scalar_one_or_none() + if not member: + raise HTTPException(404, "Member not found") + if member.type != "agent": + raise HTTPException(400, "Only agent tokens can be regenerated") + token = f"tb-{secrets.token_urlsafe(32)}" + member.token = token + await db.commit() + return {"token": token} + + @router.patch("/members/me/status") async def update_my_status(status: str, db: AsyncSession = Depends(get_db)): """Quick status update (used by agents)."""