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

1"""Security utilities for Local Deep Research.""" 

2 

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) 

25 

26# PathValidator requires werkzeug (Flask dependency), import conditionally 

27try: 

28 from .path_validator import PathValidator 

29 

30 _has_path_validator = True 

31except ImportError: 

32 PathValidator = None # type: ignore 

33 _has_path_validator = False 

34 

35# FileUploadValidator requires pdfplumber, import conditionally 

36try: 

37 from .file_upload_validator import FileUploadValidator 

38 

39 _has_file_upload_validator = True 

40except ImportError: 

41 FileUploadValidator = None # type: ignore 

42 _has_file_upload_validator = False 

43 

44# Rate limiter requires flask_limiter, import conditionally 

45try: 

46 from .rate_limiter import init_rate_limiter, upload_rate_limit 

47 

48 _has_rate_limiter = True 

49except ImportError: 

50 init_rate_limiter = None # type: ignore 

51 _has_rate_limiter = False 

52 

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 

57 

58 

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]