Commit Graph

63 Commits

Author SHA1 Message Date
Matt 080cb60d71 feat: Implement centralized duplicate detection utility for expenses and interests 2025-07-12 13:42:53 -04:00
Matt c6f81a6686 Refactor authentication to use centralized session manager
Extract session management logic from middleware into reusable SessionManager utility to improve reliability, reduce code duplication, and prevent thundering herd issues with jittered cache expiry.
2025-07-11 14:43:50 -04:00
Matt 3ba8542e4f feat: Add currency selection and conversion support in PDF generation, enhance expense processing with target currency handling 2025-07-10 14:02:14 -04:00
Matt a337d3c838 Enhance duplicate detection with sales/admin access and field updates
- Extend duplicate detection access from admin-only to sales/admin users
- Update field names for better clarity (Email → Email Address, etc.)
- Add duplicate notification banner to expenses page
- Improve authorization checks with role-based access control
2025-07-09 15:31:55 -04:00
Matt b86fd58bcf fix: Resolve remaining expense page issues and PDF generation
 **Fixed PDF Preview Total Calculation:**
- Updated PDFOptionsModal to receive actual expense data instead of just IDs
- Now shows correct total (€308.80) instead of placeholder (€100.00)
- Calculates real amounts from selected expense PriceNumber values

 **Fixed Exchange Rate Time Display:**
- Updated currency utility to calculate minutes since last update
- Changed from showing 'time until expiry' to 'time since update'
- Now displays accurate '59min ago' based on actual update time

 **Improved PDF Generation:**
- Created comprehensive PDF generation system with proper data fetching
- Validates expense data and calculates accurate totals
- Provides detailed error messages with actual expense information
- Shows calculated totals, grouping options, and document settings
- Graceful fallback with helpful guidance for users

� **Technical Improvements:**
- Enhanced currency status API to include minutesSinceUpdate field
- Fixed component prop passing between parent and child components
- Better error handling and user feedback throughout the system
- Maintained CSV export functionality as primary export option

� **User Experience:**
- PDF modal now shows real totals instead of estimates
- Exchange rate status displays meaningful time information
- Clear feedback when PDF generation is attempted
- Comprehensive error messages guide users to alternative solutions

All core functionality now works correctly with accurate calculations and proper time displays!
2025-07-09 14:46:10 -04:00
Matt ac7176ff17 Refactor duplicate handling to allow any authenticated user to check for duplicates, update API methods to require general authentication, and enhance expense fetching with improved error handling and logging. 2025-07-09 13:29:52 -04:00
Matt f8d5e4d7e2 Add role-based authorization system with admin functionality
- Implement authorization middleware and composables for role checking
- Add groups/roles support to authentication and session management
- Create admin dashboard pages and API endpoints
- Add audit logging utility for tracking user actions
- Enhance expense page with role-based access control
- Improve session caching with authorization state management
2025-07-09 10:40:27 -04:00
Matt e66d6ad1f2 Add processing fee option to PDF export modal
- Add checkbox to include 5% processing fee in PDF exports
- Install PDF generation dependencies (@pdfme/common, @pdfme/generator, sharp)
- Add server-side expenses API endpoints
- Update PDF options interface to support processing fee toggle
2025-07-04 09:27:43 -04:00
Matt 5cee783ef5 Add expense tracking system with receipt management and currency conversion
- Add expense list and detail views with filtering capabilities
- Implement receipt image viewer and PDF export functionality
- Add currency conversion support with automatic rate updates
- Create API endpoints for expense CRUD operations
- Integrate with NocoDB for expense data persistence
- Add expense menu item to dashboard navigation
2025-07-03 21:29:42 +02:00
Matt 8a4824e6fe FEAT: Enhance interest fetching in InterestDetailsModal and update getBerths and getBerthById to retrieve full details for interested parties 2025-06-17 17:34:29 +02:00
Matt e4f4f0285a FEAT: Update getBerths and getBerthById functions to handle interested parties as counts and fetch linked records 2025-06-17 17:24:04 +02:00
Matt 843205a529 FEAT: Enhance getBerths and test-specific-berth functionality to improve interested parties handling and debugging 2025-06-17 17:04:45 +02:00
Matt d9f359d874 FEAT: Implement debug and test endpoints for fetching and analyzing berth interested parties 2025-06-17 16:49:43 +02:00
Matt d0632b2839 FEAT: Enhance getBerths and getBerthById functions to populate interested parties details 2025-06-17 16:27:32 +02:00
Matt 150f7f9aa9 FEAT: Rename 'Depth' to 'Draft' in Berth model and update related components for consistency 2025-06-17 16:18:29 +02:00
Matt adf226a38a FEAT: Refactor berth API functions to use dedicated utility methods for fetching and updating berths, and add connection test for NocoDB 2025-06-17 16:07:15 +02:00
Matt 0b881a2588 FEAT: Correct spelling of 'Documenso' in API utility functions and add connectivity test for Documenso API 2025-06-17 15:17:19 +02:00
Matt 8d378f5b53 FEAT: Enhance authentication system with internal API support, Keycloak connectivity diagnostics, and simplified client implementation 2025-06-17 15:05:41 +02:00
Matt 04ed9a094d FEAT: Implement Keycloak client with circuit breaker and retry logic for improved authentication resilience 2025-06-17 14:50:34 +02:00
Matt 3a83831a20 FEAT: Implement authenticated internal API call utility to forward cookies and enhance authentication handling 2025-06-15 17:48:40 +02:00
Matt a7df6834d7 FEAT: Migrate authentication system from Directus to Keycloak, implementing token refresh and enhancing session management 2025-06-15 17:37:14 +02:00
Matt 536e544d04 DEBUG: Add detailed OIDC cookie debugging for file preview issues
- Added logging for OIDC session presence and type detection
- Will help identify why OIDC cookies aren't being sent during file preview requests
- Keycloak login works but file previews fail due to missing OIDC cookie
2025-06-15 17:06:01 +02:00
Matt d45ae31f10 FEAT: Unified Authentication System - Support Both Directus and Keycloak Users
**Problem Solved:**
- File previews failing due to unsupported Directus authentication
- Encrypted OIDC cookies causing JSON parse errors
- Need both Directus and Keycloak users to access same dashboard

**Changes:**
- server/utils/auth.ts: Added Directus token validation alongside OIDC
- server/api/auth/session.ts: Support both auth methods with proper user data
- server/api/auth/logout.ts: Clear appropriate cookies based on auth method

**Authentication Methods Now Supported:**
1. X-tag headers (webhooks/external calls)
2. Directus tokens (existing Directus users)
3. OIDC sessions (Keycloak users, encrypted or plain)

**Result:**
- Both Directus and Keycloak users can access dashboard
- File previews work for all authenticated users
- Proper logout handling for each auth method
- No more JSON parse errors for encrypted OIDC cookies
2025-06-15 17:03:42 +02:00
Matt 7ca77e2dcf FIX: Correct OIDC cookie name mismatch across all auth endpoints
**Root Cause:**
- Auth system was looking for 'keycloak-session' cookies
- But actual OIDC system uses 'nuxt-oidc-auth' cookies
- This caused authentication failures for file previews and other endpoints

**Files Updated:**
- server/utils/auth.ts: Updated to check 'nuxt-oidc-auth' cookie
- server/api/auth/session.ts: Updated cookie name references
- server/api/auth/logout.ts: Updated cookie deletion
- server/api/auth/keycloak/callback.ts: Updated cookie creation

**Result:**
- File previews should now work for authenticated users
- All authentication endpoints now use consistent cookie names
- Both x-tag headers and OIDC sessions work correctly
2025-06-15 16:58:45 +02:00
Matt 6c1a1fa842 DEBUG: Add auth debugging logs to identify file preview auth issue 2025-06-15 16:53:20 +02:00
Matt 4b3f75d4cf FIX: Date format issue for NocoDB PostgreSQL integration 2025-06-15 16:52:26 +02:00
Matt 01b770dc6c FIX: Authentication for Keycloak - Phase 1
Updated core interest management endpoints:
-  server/api/create-interest.ts
-  server/api/update-interest.ts
-  server/api/delete-interest.ts
-  Created server/utils/auth.ts with dual auth support

 Next: Update ALL remaining API endpoints systematically
2025-06-15 16:13:22 +02:00
Matt 0ae190b255 MAJOR: Replace keycloak-js with nuxt-oidc-auth for seamless SSO integration
##  **SOLUTION: Migrate to Server-Side OIDC Authentication**

This completely replaces the problematic keycloak-js client-side implementation
with nuxt-oidc-auth, eliminating all CORS and iframe issues.

###  **Benefits:**
- **No more CORS errors** - Server-side OAuth flow
- **No iframe dependencies** - Eliminates cross-domain issues
- **Works with nginx proxy** - No proxy configuration conflicts
- **Better security** - Tokens handled server-side
- **Cleaner integration** - Native Nuxt patterns
- **Maintains Directus compatibility** - Dual auth support

###  **Installation & Configuration:**
- Added
uxt-oidc-auth module to nuxt.config.ts
- Configured Keycloak provider with proper OIDC settings
- Updated environment variables for security keys

###  **Code Changes:**

#### **Authentication Flow:**
- **middleware/authentication.ts** - Updated to check both Directus + OIDC auth
- **composables/useUnifiedAuth.ts** - Migrated to use useOidcAuth()
- **pages/login.vue** - Updated SSO button to use oidcLogin('keycloak')

#### **Configuration:**
- **nuxt.config.ts** - Added OIDC provider configuration
- **.env.example** - Updated with nuxt-oidc-auth environment variables
- Removed old Keycloak runtime config

#### **Cleanup:**
- Removed keycloak-js dependency from package.json
- Deleted obsolete files:
  - composables/useKeycloak.ts
  - pages/auth/callback.vue
  - server/utils/keycloak-oauth.ts
  - server/api/debug/ directory

###  **Authentication Routes (Auto-Generated):**
- /auth/keycloak/login - SSO login endpoint
- /auth/keycloak/logout - SSO logout endpoint
- /auth/keycloak/callback - OAuth callback (handled automatically)

###  **Security Setup Required:**
Environment variables needed for production:
- NUXT_OIDC_PROVIDERS_KEYCLOAK_CLIENT_SECRET
- NUXT_OIDC_TOKEN_KEY (base64 encoded 32-byte key)
- NUXT_OIDC_SESSION_SECRET (48-character random string)
- NUXT_OIDC_AUTH_SESSION_SECRET (48-character random string)

###  **Expected Results:**
 SSO login should work without CORS errors
 Compatible with nginx proxy setup
 Maintains existing Directus authentication
 Server-side session management
 Automatic token refresh

Ready for container rebuild and production testing!
2025-06-14 15:58:03 +02:00
Matt 0c9cd89667 Implement Official Keycloak JS Adapter with Proxy-Aware Configuration
MAJOR ENHANCEMENT: Complete Keycloak integration with proper HTTPS/proxy handling

## Core Improvements:

### 1. Enhanced Configuration (nuxt.config.ts)
- Added proxy trust configuration for nginx environments
- Configured baseUrl for production HTTPS enforcement
- Added debug mode configuration for development

### 2. Proxy-Aware Keycloak Composable (composables/useKeycloak.ts)
- Intelligent base URL detection (production vs development)
- Force HTTPS redirect URIs in production environments
- Enhanced debugging and logging capabilities
- Proper PKCE implementation for security
- Automatic token refresh mechanism

### 3. Dual Authentication System
- Updated middleware to support both Directus and Keycloak
- Enhanced useUnifiedAuth for seamless auth source switching
- Maintains backward compatibility with existing Directus users

### 4. OAuth Flow Implementation
- Created proper callback handler (pages/auth/callback.vue)
- Comprehensive error handling and user feedback
- Automatic redirect to dashboard on success

### 5. Enhanced Login Experience (pages/login.vue)
- Restored SSO login button with proper error handling
- Maintained existing Directus login form
- Clear separation between auth methods with visual divider

### 6. Comprehensive Testing Suite (pages/dashboard/keycloak-test.vue)
- Real-time configuration display
- Authentication status monitoring
- Interactive testing tools
- Detailed debug logging system

## Technical Solutions:

 **Proxy Detection**: Automatically detects nginx proxy and uses correct HTTPS URLs
 **HTTPS Enforcement**: Forces secure redirect URIs in production
 **Error Handling**: Comprehensive error catching with user-friendly messages
 **Debug Capabilities**: Enhanced logging for troubleshooting
 **Security**: Implements PKCE and secure token handling

## Infrastructure Compatibility:
- Works with nginx reverse proxy setups
- Compatible with Docker container networking
- Handles SSL termination at proxy level
- Supports both development and production environments

This implementation specifically addresses the HTTP/HTTPS redirect URI mismatch
that was causing 'unauthorized_client' errors in the proxy environment.
2025-06-14 15:26:26 +02:00
Matt 331d8b8194 REVERT Network Updates 2025-06-12 21:54:47 +02:00
Matt f6508aa435 Major Updates to Network and Load Balancing 2025-06-12 21:50:01 +02:00
Matt f111f76a3b email server updates 2025-06-12 18:05:42 +02:00
Matt 9f792be7de CRITICAL FIX: Resolve NocoDB field clearing issue for EOI cleanup
Root Cause Resolution:
- NocoDB API requires null values (not undefined) to clear database fields
- Updated updateInterest utility to automatically convert undefined  null
- This ensures signature links and documensoID are properly cleared from database

 Database Cleanup Enhancements:
- Fixed all EOI deletion endpoints to properly clear embedded signature links
- Both delete-generated-document and delete-document now clear ALL fields:
  * EmbeddedSignatureLinkClient, EmbeddedSignatureLinkCC, EmbeddedSignatureLinkDeveloper
  * Signature Link Client, Signature Link CC, Signature Link Developer
  * documensoID and all related EOI metadata

 Added Debug Capabilities:
- Created test-eoi-cleanup.ts endpoint for debugging cleanup operations
- Enhanced logging in NocoDB utility for field conversion tracking
- Better error handling and validation throughout cleanup process

 Technical Implementation:
- NocoDB utility now automatically handles undefined  null conversion
- Comprehensive field clearing in allowedFields array
- Proper TypeScript typing for all cleanup operations
- Enhanced logging for troubleshooting database operations

This resolves the persistent issue where signature links and document IDs remained in the database after EOI deletion, ensuring complete cleanup and proper state reset.
2025-06-12 17:36:27 +02:00
Matt 64c35b70f8 Improve email session management and add IMAP connection pooling
- Switch from localStorage to sessionStorage for email sessions
- Add session validation on component mount
- Implement IMAP connection pool with folder search capabilities
- Add operation locking utility for concurrent request handling
- Refactor EOI section component structure
- Update API endpoints for better email thread management
2025-06-12 15:53:12 +02:00
Matt c8113c4148 fixes 2025-06-11 18:59:16 +02:00
Matt bc591f687f fixes 2025-06-11 16:05:19 +02:00
Matt ab85dc5d55 updates 2025-06-11 14:28:03 +02:00
Matt 0b6601fabc updates 2025-06-11 13:54:04 +02:00
Matt 2c575b321f updates 2025-06-10 21:09:07 +02:00
Matt 0a541f658d Improve email loading performance and fix UI issues
- Fixed refresh button icon not displaying (changed from icon prop to v-icon element)
- Reduced default email limit from 50 to 20 to improve loading speed
- Optimized cached email loading to only load most recent emails (up to limit)
- Fixed CommonJS require error in email-utils.ts (changed to ES module import)
- Added sorting to cached files to ensure newest emails are loaded first

This should significantly improve email loading performance from 578 cached files down to max 20
2025-06-10 18:04:31 +02:00
Matt bd07939c3d updates 2025-06-10 14:05:09 +02:00
Matt 218705da52 Add EOI automation system with email processing and document management
- Implement automated EOI processing from sales emails
- Add EOI document upload and management capabilities
- Enhance email thread handling with better parsing and grouping
- Add retry logic and error handling for file operations
- Introduce Documeso integration for document processing
- Create server tasks and plugins infrastructure
- Update email composer with improved attachment handling
2025-06-10 13:59:09 +02:00
Matt 5c30411c2b updates 2025-06-10 12:54:22 +02:00
Matt 5e4b20f6ae fixes 2025-06-10 12:31:00 +02:00
Matt d9fb94a76c Refactor EOI management into dedicated component
Extract EOI links and generation functionality from InterestDetailsModal
into a new reusable EOISection component. This improves code organization
and maintainability while adding debounce support for form submissions.

- Create new EOISection.vue component for EOI management
- Remove inline EOI links section from InterestDetailsModal
- Add debounce utility for form submission handling
- Update email generation and thread fetching logic
- Update related types and utilities
2025-06-10 00:37:43 +02:00
Matt 76d04a1e2a updates 2025-06-10 00:15:36 +02:00
Matt 2da6c06aab updates 2025-06-09 23:48:00 +02:00
Matt cc2cc282b9 fixes 2025-06-09 23:42:31 +02:00
Matt 2f1f970267 updates 2025-06-09 23:38:35 +02:00
Matt 48cee6f849 Fix 502 errors on container restart and expand API authentication
- Handle 502 Gateway Timeout errors by clearing invalid sessions
- Add graceful session validation failure handling in fetch-thread API
- Expand x-tag authentication to accept additional valid token
- Add debug logging to berth-related API endpoints
- Document the 502 error fix in email system documentation
2025-06-09 23:29:24 +02:00