Fixes to backend API changes. The whole app is mostly functional.

This commit is contained in:
Leo Vasanko 2025-08-01 13:48:38 -06:00
parent 8ae433c587
commit a987f47988
3 changed files with 11 additions and 9 deletions

View File

@ -12,7 +12,7 @@ This module provides session management functionality including:
from datetime import datetime, timedelta
from uuid import UUID
from fastapi import Request, Response
from fastapi import Request, Response, WebSocket
from ..db import Session, sql
from ..util import passphrase
@ -25,7 +25,7 @@ def expires() -> datetime:
return datetime.now() + EXPIRES
def infodict(request: Request, type: str) -> dict:
def infodict(request: Request | WebSocket, type: str) -> dict:
"""Extract client information from request."""
return {
"ip": request.client.host if request.client else "",

View File

@ -13,7 +13,7 @@ from datetime import datetime
from uuid import UUID
import uuid7
from fastapi import Cookie, FastAPI, Query, Request, WebSocket, WebSocketDisconnect
from fastapi import Cookie, FastAPI, Query, WebSocket, WebSocketDisconnect
from webauthn.helpers.exceptions import InvalidAuthenticationResponse
from passkey.fastapi import session
@ -54,7 +54,7 @@ async def register_chat(
@app.websocket("/register")
async def websocket_register_new(
request: Request, ws: WebSocket, user_name: str = Query(""), auth=Cookie(None)
ws: WebSocket, user_name: str = Query(""), auth=Cookie(None)
):
"""Register a new user and with a new passkey credential."""
await ws.accept()
@ -75,7 +75,7 @@ async def websocket_register_new(
user_uuid=user_uuid,
key=session_key(token),
expires=datetime.now() + session.EXPIRES,
info=infodict(request, "authenticated"),
info=infodict(ws, "authenticated"),
credential_uuid=credential.uuid,
)
@ -142,7 +142,7 @@ async def websocket_register_add(ws: WebSocket, token: str | None = None):
@app.websocket("/authenticate")
async def websocket_authenticate(request: Request, ws: WebSocket):
async def websocket_authenticate(ws: WebSocket):
await ws.accept()
origin = ws.headers.get("origin")
try:
@ -161,7 +161,7 @@ async def websocket_authenticate(request: Request, ws: WebSocket):
assert stored_cred.uuid is not None
token = await create_session(
user_uuid=stored_cred.user_uuid,
info=infodict(request, "auth"),
info=infodict(ws, "auth"),
credential_uuid=stored_cred.uuid,
)

View File

@ -11,6 +11,7 @@ import json
from datetime import datetime
from uuid import UUID
import uuid7
from webauthn import (
generate_authentication_options,
generate_registration_options,
@ -112,7 +113,7 @@ class Passkey:
self,
response_json: dict | str,
expected_challenge: bytes,
user_id: UUID,
user_uuid: UUID,
origin: str | None = None,
) -> Credential:
"""
@ -133,8 +134,9 @@ class Passkey:
expected_rp_id=self.rp_id,
)
return Credential(
uuid=uuid7.create(),
credential_id=credential.raw_id,
user_id=user_id,
user_uuid=user_uuid,
aaguid=UUID(registration.aaguid),
public_key=registration.credential_public_key,
sign_count=registration.sign_count,