New files: - models/passkey_credential.py: PasskeyCredential model with indexed credential_id - alembic 061: Create passkey_credentials table - services/passkey.py: Challenge token management (itsdangerous + nonce replay protection) and py_webauthn wrappers for registration/authentication - routers/passkeys.py: 6 endpoints (register begin/complete, login begin/complete, list, delete) with full security hardening Changes: - config.py: WEBAUTHN_RP_ID, RP_NAME, ORIGIN, CHALLENGE_TTL settings - main.py: Mount passkey router, add CSRF exemptions for login endpoints - auth.py: Add has_passkeys to /auth/status response - nginx.conf: Rate limiting on all passkey endpoints, Permissions-Policy updated for publickey-credentials-get/create - requirements.txt: Add webauthn>=2.1.0 Security: password re-entry for registration (V-02), single-use nonce challenges (V-01), constant-time login/begin (V-03), shared lockout counter, generic 401 errors, audit logging on all events. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from app.models.settings import Settings
|
|
from app.models.todo import Todo
|
|
from app.models.calendar import Calendar
|
|
from app.models.calendar_event import CalendarEvent
|
|
from app.models.reminder import Reminder
|
|
from app.models.project import Project
|
|
from app.models.project_task import ProjectTask
|
|
from app.models.person import Person
|
|
from app.models.location import Location
|
|
from app.models.task_comment import TaskComment
|
|
from app.models.user import User
|
|
from app.models.session import UserSession
|
|
from app.models.ntfy_sent import NtfySent
|
|
from app.models.totp_usage import TOTPUsage
|
|
from app.models.backup_code import BackupCode
|
|
from app.models.system_config import SystemConfig
|
|
from app.models.audit_log import AuditLog
|
|
from app.models.notification import Notification
|
|
from app.models.connection_request import ConnectionRequest
|
|
from app.models.user_connection import UserConnection
|
|
from app.models.calendar_member import CalendarMember
|
|
from app.models.event_lock import EventLock
|
|
from app.models.event_invitation import EventInvitation, EventInvitationOverride
|
|
from app.models.project_member import ProjectMember
|
|
from app.models.project_task_assignment import ProjectTaskAssignment
|
|
from app.models.passkey_credential import PasskeyCredential
|
|
|
|
__all__ = [
|
|
"Settings",
|
|
"Todo",
|
|
"Calendar",
|
|
"CalendarEvent",
|
|
"Reminder",
|
|
"Project",
|
|
"ProjectTask",
|
|
"Person",
|
|
"Location",
|
|
"TaskComment",
|
|
"User",
|
|
"UserSession",
|
|
"NtfySent",
|
|
"TOTPUsage",
|
|
"BackupCode",
|
|
"SystemConfig",
|
|
"AuditLog",
|
|
"Notification",
|
|
"ConnectionRequest",
|
|
"UserConnection",
|
|
"CalendarMember",
|
|
"EventLock",
|
|
"EventInvitation",
|
|
"EventInvitationOverride",
|
|
"ProjectMember",
|
|
"ProjectTaskAssignment",
|
|
"PasskeyCredential",
|
|
]
|