Refactor auth and authz

This commit is contained in:
2025-10-26 02:25:24 -07:00
parent 9ff782f7b6
commit abe7b6beee
22 changed files with 8018 additions and 62 deletions
+239
View File
@@ -0,0 +1,239 @@
================================================================================
NOTIFIER CODEBASE - CODE DUPLICATION AND REFACTORING ANALYSIS
Generated: 2025-10-26
================================================================================
ANALYSIS SCOPE:
- Directories analyzed: internal/service/, internal/notifier/, internal/auth/,
internal/config/, api/rest/, api/grpc/, internal/queue/, cmd/
- Go files scanned: 30+ files
- Total lines of code analyzed: ~7,000
================================================================================
KEY FINDINGS
================================================================================
TOTAL DUPLICATION FOUND: ~380 lines of repeating/duplicate code
CRITICAL ISSUES: 1 (Exact duplication)
- convertDomainToProtoType function (14 lines) - REMOVE
HIGH PRIORITY ISSUES: 3
- Filter matching logic (60+ lines)
- HTTP request handling (25+ lines)
- Notifier validation pattern (4x8 lines)
MEDIUM PRIORITY ISSUES: 3
- Auth validation logic (30+ lines)
- Notifier registration pattern (50+ lines)
- Default account resolution (35+ lines)
LOW PRIORITY ISSUES: 1
- Error result creation (4x5 lines)
================================================================================
DETAILED ISSUE BREAKDOWN
================================================================================
Issue #1: Duplicate Type Conversion Function
- Location: api/grpc/handler.go (lines 331-344)
- Type: EXACT DUPLICATION
- Impact: Code maintenance, inconsistency risk
- Fix Effort: LOW (15 minutes)
- Lines of code: 14
Issue #2: Repeated Validation Pattern in Notifiers
- Location: 4 notifier files (smtp, slack, ntfy, stdout)
- Type: Repeated pattern
- Impact: Maintenance burden, consistency risk
- Fix Effort: LOW (30 minutes)
- Lines of code: 4x8 = 32
Issue #3: Identical HTTP Request Handling
- Location: Slack and Ntfy notifiers
- Type: Code duplication
- Impact: Maintenance, future improvements harder
- Fix Effort: LOW-MEDIUM (45 minutes)
- Lines of code: 25+
Issue #4: Repetitive Filter Matching Logic
- Location: internal/service/service.go (lines 481-540)
- Type: Repeated pattern
- Impact: Readability, extensibility, maintainability
- Fix Effort: LOW (40 minutes)
- Lines of code: 60+
Issue #5: Duplicated Auth Validation
- Location: REST and gRPC middleware (3 instances)
- Type: Code duplication
- Impact: Consistency, maintenance
- Fix Effort: LOW-MEDIUM (50 minutes)
- Lines of code: 30+
Issue #6: Repeated Notifier Registration
- Location: cmd/server/main.go (lines 193-241)
- Type: Repeated pattern
- Impact: Extensibility, duplication maintenance
- Fix Effort: MEDIUM (60 minutes)
- Lines of code: 50+
Issue #7: Duplicate Default Account Lookup
- Location: internal/config/config.go (lines 346-380)
- Type: Repeated pattern
- Impact: Code cleanliness, maintainability
- Fix Effort: LOW-MEDIUM (45 minutes)
- Lines of code: 35+
Issue #8: Error Result Creation Pattern
- Location: Multiple notifier files
- Type: Repeated pattern
- Impact: Consistency
- Fix Effort: LOW (30 minutes)
- Lines of code: 4x5 = 20
================================================================================
REFACTORING ROADMAP
================================================================================
PHASE 1 - QUICK WINS (Recommended: Next 2 hours)
[ ] Remove duplicate convertDomainToProtoType (15 min)
[ ] Extract validation helper (30 min)
[ ] Add error result helper (30 min)
Subtotal: ~60 lines of duplication removed, 75 minutes
PHASE 2 - HIGH IMPACT (Recommended: Next sprint)
[ ] Refactor filter matching (40 min)
[ ] Extract auth validation (50 min)
[ ] Create HTTP request helper (45 min)
Subtotal: ~150 lines of duplication removed, 135 minutes
PHASE 3 - NICE TO HAVE (Later)
[ ] Generic registration function (60 min)
[ ] Generic default resolution (45 min)
Subtotal: ~85 lines of duplication removed, 105 minutes
================================================================================
ESTIMATED IMPACT
================================================================================
After Phase 1:
- 60 lines of duplication removed (15%)
- 3 duplicate patterns eliminated
- 75 minutes of implementation
- Immediate code quality improvement
After Phase 1+2:
- 250 lines of duplication removed (65%)
- 6 duplicate patterns eliminated
- 210 minutes total implementation
- Significant maintainability improvement
After All Phases:
- 380 lines of duplication removed (100%)
- 8 duplicate patterns eliminated
- 315 minutes total implementation
- ~60% reduction in maintenance effort
================================================================================
RISK ASSESSMENT
================================================================================
All refactorings are LOW RISK because:
✓ They extract existing patterns without changing behavior
✓ No public API changes
✓ All can be tested with existing test suite
✓ Changes are localized to internal utilities
✓ Incremental refactoring possible
✓ Easy to revert if needed
================================================================================
BENEFITS OF REFACTORING
================================================================================
CODE QUALITY:
- Improved readability (reduce repetition)
- Better maintainability (single source of truth)
- Easier to extend (less duplication = less to update)
DEVELOPMENT VELOCITY:
- Faster debugging (fewer places to look)
- Quicker feature additions (less duplicate code to update)
- Easier to understand (less cognitive load)
RISK REDUCTION:
- Lower chance of inconsistency bugs
- Easier to update logic consistently across codebase
- Reduced surface area for bugs
TECHNICAL DEBT:
- Reduce accumulated duplication
- Improve code organization
- Make codebase more maintainable
================================================================================
IMPLEMENTATION GUIDELINES
================================================================================
APPROACH:
1. Make incremental changes (one issue at a time)
2. Test after each change (run existing test suite)
3. Review code changes for consistency
4. Update documentation if needed
TESTING:
- Phase 1: Run existing unit tests (no behavior changes)
- Phase 2: Add unit tests for new helper functions
- Phase 3: Integration tests for registration flow
- All phases: Ensure 100% backward compatibility
PRIORITY:
1. Do Phase 1 immediately (quick wins)
2. Schedule Phase 2 for next sprint
3. Consider Phase 3 for future cleanup
================================================================================
FILES AFFECTED BY REFACTORING
================================================================================
Core Files:
- internal/notifier/notifier.go (add helpers)
- internal/notifier/smtp.go (reduce duplication)
- internal/notifier/slack.go (reduce duplication)
- internal/notifier/ntfy.go (reduce duplication)
- internal/notifier/stdout.go (reduce duplication)
- internal/service/service.go (refactor filtering)
- internal/auth/auth.go (add validation method)
- internal/auth/rest_middleware.go (use new validation)
- internal/auth/grpc_middleware.go (use new validation)
- internal/config/config.go (use generic helpers)
- cmd/server/main.go (use generic registration)
- api/grpc/handler.go (remove duplicate function)
Supporting Files:
- Tests for all refactored modules
- Documentation (if applicable)
================================================================================
NEXT STEPS
================================================================================
1. Review this analysis
2. Prioritize which phase to start with
3. Assign developer to Phase 1 tasks
4. Create tickets for Phase 2 and Phase 3
5. Schedule refactoring work into sprint planning
Recommended: Start with Phase 1 immediately (high impact, low effort)
================================================================================
DOCUMENTATION GENERATED
================================================================================
Files created:
1. DUPLICATION_ANALYSIS.md - Comprehensive detailed analysis (21 KB)
2. REFACTORING_QUICKREF.md - Quick reference guide for developers
3. ANALYSIS_SUMMARY.txt - This executive summary
All files located in: /Users/igodwin/Workspace/notifier/
================================================================================