New storage scheme

This commit is contained in:
mirai
2026-01-06 21:42:50 +08:00
parent 264d19e932
commit 467d942877
9 changed files with 1287 additions and 23 deletions
+2 -2
View File
@@ -3,7 +3,7 @@ from contextlib import suppress
from cryptography.fernet import Fernet
from sanic import Sanic
from sanic_ext import Extend
import os
from .managers import ConnectionManager
from .stores import MessageStore, UserSessionStore
from .srp_auth import SRPAuthManager
@@ -19,7 +19,7 @@ def create_app(password: str = "", name: str = "cmd-chat-server") -> Sanic:
app.ctx.session_store = UserSessionStore()
app.ctx.connection_manager = ConnectionManager()
app.ctx.srp_manager = SRPAuthManager(password)
app.ctx.fernet_key = Fernet.generate_key()
app.ctx.room_salt = os.urandom(16)
app.ctx.cleanup_task = None
register_lifecycle(app)
-4
View File
@@ -9,7 +9,6 @@ class MessageStore:
def add(self, message: Message) -> None:
self._messages.append(message)
def get_all(self) -> list[Message]:
return self._messages.copy()
@@ -17,7 +16,6 @@ class MessageStore:
count = len(self._messages)
self._messages.clear()
def count(self) -> int:
return len(self._messages)
@@ -29,7 +27,6 @@ class UserSessionStore:
def add(self, session: UserSession) -> None:
self._sessions[session.user_id] = session
def get(self, user_id: str) -> Optional[UserSession]:
return self._sessions.get(user_id)
@@ -41,7 +38,6 @@ class UserSessionStore:
if user_id in self._sessions:
del self._sessions[user_id]
def cleanup_stale(self, timeout_seconds: int = 3600) -> int:
stale_ids = [
uid for uid, s in self._sessions.items() if s.is_stale(timeout_seconds)
+1 -1
View File
@@ -35,6 +35,7 @@ async def srp_init(request: Request, app: Sanic) -> HTTPResponse:
"user_id": user_id,
"B": base64.b64encode(B).decode(),
"salt": base64.b64encode(salt).decode(),
"room_salt": base64.b64encode(app.ctx.room_salt).decode(),
}
)
@@ -66,7 +67,6 @@ async def srp_verify(request: Request, app: Sanic) -> HTTPResponse:
)
app.ctx.session_store.add(session)
return response.json(
{
"H_AMK": base64.b64encode(H_AMK).decode(),