0.33.0

Added

  • P3-S1: PasswordPolicy — настраиваемая политика паролей (MinLength, RequireUpper, RequireDigit, RequireSymbol, CheckHIBP). HIBP-проверка через k-anonymity API (SHA-1 prefix range lookup). Единая функция ValidatePassword заменяет 3 вызова len < 8 в user.go и oauth.go. DefaultPasswordPolicy — обратная совместимость (min 8).
  • P3-S3: rand.Read error handlinggenerateRandomString, generateAuthCode, GenerateRefreshToken, GeneratePKCEVerifier возвращают (string, error) с проверкой rand.Read. generateFamilyID — panic при ошибке (криптография без энтропии). generateOrLoadSecretslog.Error + os.Exit(1).
  • P3-S4 (H-7): SafeOpenFile/SafeReadFile — платформенно-зависимое безопасное открытие файлов с build tags. Linux: unix.Openat2 с RESOLVE_BENEATH|RESOLVE_NO_SYMLINKS + O_NOFOLLOW. macOS/Unix: unix.Open с O_NOFOLLOW. Windows: fallback через os.Open. read_file.go, edit_file.go, grep.go переведены на SafeOpenFile/SafeReadFile.
  • 23 новых теста: password_policy_test.go (11), tokens_test.go (+5), safeopen_test.go (7).

Security

  • Закрыто H-7 (security.md): TOCTOU/symlink при открытии файлов — устранён через safeopen.
  • Закрыто L-2 (security.md): игнорирование ошибок rand.Read — все вызовы теперь обрабатывают ошибки.
  • Закрыто L-4 (security.md): минимальная валидация паролей — расширяемая политика + HIBP.