feat: Implement path-based and pattern-based filter rules#165
Conversation
Add advanced matching capabilities for file transfer filtering:
New Matchers:
- MultiExtensionMatcher: Match multiple file extensions with case sensitivity option
- SizeMatcher: Match files by size (min/max/between)
- AllMatcher: AND logic for combining matchers
- CompositeMatcher: Unified AND/OR/NOT composite matching
Enhanced Configuration:
- extensions: Match by file extensions ["exe", "bat", "ps1"]
- directory: Match by path component (e.g., ".git")
- min_size/max_size: File size filtering
- composite: Complex AND/OR/NOT rules with nested matchers
SizeAwareFilter Trait:
- check_with_size() for size-based filtering decisions
- check_with_size_dest() for rename/copy operations with size
New Configuration Types:
- CompositeRuleConfig: Define composite rules
- CompositeLogicType: and/or/not logic
- MatcherConfig: Individual matcher in composite rules
Example YAML configuration:
```yaml
filter:
enabled: true
rules:
- name: "block-executables"
extensions: [exe, sh, bat]
action: deny
- name: "protect-env"
composite:
type: and
matchers:
- pattern: "*.env"
- not:
path_prefix: /home/
action: deny
```
Closes #139
Security & Performance ReviewAnalysis Summary
Prioritized Fix RoadmapMEDIUM
LOW
Progress Log
Technical NotesSecurity Positive Findings:
Performance Positive Findings:
Test Coverage:
|
Priority: MEDIUM Issue: Path traversal sequences (e.g., /var/../etc/passwd) were not automatically normalized in FilterPolicy::check(), potentially allowing filter bypass if callers did not explicitly normalize paths. Changes: - Add normalize_path() call in FilterPolicy::check() to automatically normalize paths before matching against rules - Add test verifying path traversal protection at policy level - Fix clippy lint: NoOpFilter::default() -> NoOpFilter Review-Iteration: 1
Security & Performance Review - UpdateProgress Log
Remaining ItemsMEDIUM (Documentation/Future Work)
LOW
SummaryFixed Issues:
Security Improvement Details:
Test Coverage:
|
Review CompleteAnalysis Summary
Issues Fixed
Remaining Items (Non-blocking)
Security Review SummaryPositive Findings:
Security Enhancement Applied:
Performance Review SummaryPositive Findings:
Test Coverage
Commits in This ReviewRecommendationAPPROVE - The PR is ready for merge. The implementation is solid with good security practices. The remaining items (M3, L1) are non-blocking and can be addressed in follow-up PRs if needed. |
- Document all matcher types (Glob, Prefix, Extension, Directory, Composite) - Add filter architecture diagram showing request flow - Include composite rule examples (AND, OR, NOT logic) - Document operation and user restrictions - Add security features section (path traversal protection) - Document SizeAwareFilter trait usage - Add complete filter configuration example
PR Finalization ReportProject Structure Discovered
ChecklistTests
Test Coverage for New Features:
Documentation
Code Quality
Changes Made
SummaryThe PR implementation is complete with:
Ready for merge. |
Summary
Implementation Details
New Matchers
["exe", "bat", "ps1"]min: 1MB, max: 100MBExtended Configuration
SizeAwareFilter Trait
check_with_size()for size-based filtering decisionscheck_with_size_dest()for rename/copy operations with sizeTest Plan
Closes #139