feat: auth by default, theme toggle, CoderPad startup, review fixes
- Require a session on every route; public routes opt out with @allow_anonymous - Split password hashing and pepper loading into passwords.py - Add a system/light/dark theme toggle backed by light-dark() colors - Ignore stale 401s from an earlier session, PATCH only changed book fields, and block overlapping journal-entry saves - Add bin/start and CoderPad Vite server settings for the pad's start/restart - Rewrite README as a mise onboarding guide; expand .gitignore - Include review-round fixes and tests
This commit is contained in:
@@ -5,7 +5,13 @@ import unittest
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
from auth import ITERATIONS, hash_password, load_pepper, needs_rehash, verify_password
|
||||
from passwords import (
|
||||
ITERATIONS,
|
||||
hash_password,
|
||||
load_pepper,
|
||||
needs_rehash,
|
||||
verify_password,
|
||||
)
|
||||
|
||||
PEPPER = b"p" * 32
|
||||
KNOWN_ANSWER = "pbkdf2_sha256$1000$AAAAAAAAAAAAAAAAAAAAAA==$9ZLLEusnEPU3Km8h+vnd4ue9fw7rHdm4QwuBX5ozynE="
|
||||
@@ -54,9 +60,9 @@ class PepperTests(unittest.TestCase):
|
||||
with tempfile.TemporaryDirectory() as tmp, mock.patch.dict(os.environ):
|
||||
os.environ.pop("PASSWORD_PEPPER", None)
|
||||
pepper_file = Path(tmp) / ".pepper"
|
||||
with self.assertLogs("auth", level="WARNING"):
|
||||
with self.assertLogs("passwords", level="WARNING"):
|
||||
first = load_pepper(pepper_file)
|
||||
with self.assertLogs("auth", level="WARNING"):
|
||||
with self.assertLogs("passwords", level="WARNING"):
|
||||
second = load_pepper(pepper_file)
|
||||
self.assertEqual(first, second)
|
||||
self.assertEqual(len(first), 64)
|
||||
|
||||
Reference in New Issue
Block a user