Coverage for src / local_deep_research / security / __init__.py: 63%
30 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-25 01:07 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-25 01:07 +0000
1"""Security utilities for Local Deep Research."""
3from .data_sanitizer import (
4 DataSanitizer,
5 filter_research_metadata,
6 redact_data,
7 sanitize_data,
8 strip_settings_snapshot,
9)
10from .security_settings import get_security_default
11from .file_integrity import FileIntegrityManager, FAISSIndexVerifier
12from .notification_validator import (
13 NotificationURLValidator,
14 NotificationURLValidationError,
15)
16from .safe_requests import safe_get, safe_post, SafeSession
17from .security_headers import SecurityHeaders
18from .ssrf_validator import validate_url, get_safe_url, is_ip_blocked
19from .url_validator import URLValidator
20from .module_whitelist import (
21 get_safe_module_class,
22 ModuleNotAllowedError,
23 ALLOWED_MODULES,
24)
26# PathValidator requires werkzeug (Flask dependency), import conditionally
27try:
28 from .path_validator import PathValidator
30 _has_path_validator = True
31except ImportError:
32 PathValidator = None # type: ignore
33 _has_path_validator = False
35# FileUploadValidator requires pdfplumber, import conditionally
36try:
37 from .file_upload_validator import FileUploadValidator
39 _has_file_upload_validator = True
40except ImportError:
41 FileUploadValidator = None # type: ignore
42 _has_file_upload_validator = False
44# Rate limiter requires flask_limiter, import conditionally
45try:
46 from .rate_limiter import init_rate_limiter, upload_rate_limit
48 _has_rate_limiter = True
49except ImportError:
50 init_rate_limiter = None # type: ignore
51 _has_rate_limiter = False
53 # Provide a no-op decorator when flask_limiter is not available
54 def upload_rate_limit(f):
55 """No-op decorator when flask_limiter is not installed."""
56 return f
59__all__ = [
60 "PathValidator",
61 "DataSanitizer",
62 "sanitize_data",
63 "redact_data",
64 "filter_research_metadata",
65 "strip_settings_snapshot",
66 "get_security_default",
67 "FileIntegrityManager",
68 "FAISSIndexVerifier",
69 "FileUploadValidator",
70 "NotificationURLValidator",
71 "NotificationURLValidationError",
72 "SecurityHeaders",
73 "URLValidator",
74 "init_rate_limiter",
75 "upload_rate_limit",
76 "safe_get",
77 "safe_post",
78 "SafeSession",
79 "validate_url",
80 "get_safe_url",
81 "is_ip_blocked",
82 "get_safe_module_class",
83 "ModuleNotAllowedError",
84 "ALLOWED_MODULES",
85]