Fixes to backend API changes. The whole app is mostly functional.
This commit is contained in:
parent
8ae433c587
commit
a987f47988
@ -12,7 +12,7 @@ This module provides session management functionality including:
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import Request, Response
|
from fastapi import Request, Response, WebSocket
|
||||||
|
|
||||||
from ..db import Session, sql
|
from ..db import Session, sql
|
||||||
from ..util import passphrase
|
from ..util import passphrase
|
||||||
@ -25,7 +25,7 @@ def expires() -> datetime:
|
|||||||
return datetime.now() + EXPIRES
|
return datetime.now() + EXPIRES
|
||||||
|
|
||||||
|
|
||||||
def infodict(request: Request, type: str) -> dict:
|
def infodict(request: Request | WebSocket, type: str) -> dict:
|
||||||
"""Extract client information from request."""
|
"""Extract client information from request."""
|
||||||
return {
|
return {
|
||||||
"ip": request.client.host if request.client else "",
|
"ip": request.client.host if request.client else "",
|
||||||
|
@ -13,7 +13,7 @@ from datetime import datetime
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
import uuid7
|
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 webauthn.helpers.exceptions import InvalidAuthenticationResponse
|
||||||
|
|
||||||
from passkey.fastapi import session
|
from passkey.fastapi import session
|
||||||
@ -54,7 +54,7 @@ async def register_chat(
|
|||||||
|
|
||||||
@app.websocket("/register")
|
@app.websocket("/register")
|
||||||
async def websocket_register_new(
|
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."""
|
"""Register a new user and with a new passkey credential."""
|
||||||
await ws.accept()
|
await ws.accept()
|
||||||
@ -75,7 +75,7 @@ async def websocket_register_new(
|
|||||||
user_uuid=user_uuid,
|
user_uuid=user_uuid,
|
||||||
key=session_key(token),
|
key=session_key(token),
|
||||||
expires=datetime.now() + session.EXPIRES,
|
expires=datetime.now() + session.EXPIRES,
|
||||||
info=infodict(request, "authenticated"),
|
info=infodict(ws, "authenticated"),
|
||||||
credential_uuid=credential.uuid,
|
credential_uuid=credential.uuid,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ async def websocket_register_add(ws: WebSocket, token: str | None = None):
|
|||||||
|
|
||||||
|
|
||||||
@app.websocket("/authenticate")
|
@app.websocket("/authenticate")
|
||||||
async def websocket_authenticate(request: Request, ws: WebSocket):
|
async def websocket_authenticate(ws: WebSocket):
|
||||||
await ws.accept()
|
await ws.accept()
|
||||||
origin = ws.headers.get("origin")
|
origin = ws.headers.get("origin")
|
||||||
try:
|
try:
|
||||||
@ -161,7 +161,7 @@ async def websocket_authenticate(request: Request, ws: WebSocket):
|
|||||||
assert stored_cred.uuid is not None
|
assert stored_cred.uuid is not None
|
||||||
token = await create_session(
|
token = await create_session(
|
||||||
user_uuid=stored_cred.user_uuid,
|
user_uuid=stored_cred.user_uuid,
|
||||||
info=infodict(request, "auth"),
|
info=infodict(ws, "auth"),
|
||||||
credential_uuid=stored_cred.uuid,
|
credential_uuid=stored_cred.uuid,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import json
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
|
import uuid7
|
||||||
from webauthn import (
|
from webauthn import (
|
||||||
generate_authentication_options,
|
generate_authentication_options,
|
||||||
generate_registration_options,
|
generate_registration_options,
|
||||||
@ -112,7 +113,7 @@ class Passkey:
|
|||||||
self,
|
self,
|
||||||
response_json: dict | str,
|
response_json: dict | str,
|
||||||
expected_challenge: bytes,
|
expected_challenge: bytes,
|
||||||
user_id: UUID,
|
user_uuid: UUID,
|
||||||
origin: str | None = None,
|
origin: str | None = None,
|
||||||
) -> Credential:
|
) -> Credential:
|
||||||
"""
|
"""
|
||||||
@ -133,8 +134,9 @@ class Passkey:
|
|||||||
expected_rp_id=self.rp_id,
|
expected_rp_id=self.rp_id,
|
||||||
)
|
)
|
||||||
return Credential(
|
return Credential(
|
||||||
|
uuid=uuid7.create(),
|
||||||
credential_id=credential.raw_id,
|
credential_id=credential.raw_id,
|
||||||
user_id=user_id,
|
user_uuid=user_uuid,
|
||||||
aaguid=UUID(registration.aaguid),
|
aaguid=UUID(registration.aaguid),
|
||||||
public_key=registration.credential_public_key,
|
public_key=registration.credential_public_key,
|
||||||
sign_count=registration.sign_count,
|
sign_count=registration.sign_count,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user