217 Commits

Author SHA1 Message Date
Dries Peeters
1e1e3ad43a Update setup.py v2.3.6 dev-dev-37-c0e0fd2d dev-dev-40-6936018e dev-dev-39-1e83a9ca dev-dev-38-b0f42f5f 2025-10-13 20:41:21 +02:00
Dries Peeters
50f36614e5 Merge pull request #84 from DRYTRIX/develop
feat: Add HTTPS support with mkcert and automatic SSL configuration
2025-10-13 20:00:47 +02:00
Dries Peeters
94e8e49439 feat: Add HTTPS support with mkcert and automatic SSL configuration
Add comprehensive HTTPS support with two deployment options:
- mkcert for local development with trusted certificates
- Automatic SSL with Let's Encrypt for production

HTTPS Implementation:
- Add docker-compose.https-mkcert.yml for local HTTPS development
- Add docker-compose.https-auto.yml for automatic SSL certificates
- Create Dockerfile.mkcert for certificate generation
- Add setup scripts (setup-https-mkcert.sh/bat)
- Add startup scripts (start-https.sh/bat)
- Add certificate generation script (generate-mkcert-certs.sh)

CSRF and IP Access Fixes:
- Fix CSRF token validation for IP-based access
- Add CSRF troubleshooting documentation
- Update configuration to handle various access patterns

Documentation:
- Add HTTPS_MKCERT_GUIDE.md with setup instructions
- Add README_HTTPS.md with general HTTPS documentation
- Add README_HTTPS_AUTO.md for automatic SSL setup
- Add AUTOMATIC_HTTPS_SUMMARY.md
- Add CSRF_IP_ACCESS_FIX.md and CSRF_IP_FIX_SUMMARY.md
- Add docs/CSRF_IP_ACCESS_GUIDE.md
- Update main README.md with HTTPS information

Configuration:
- Update .gitignore for SSL certificates and nginx configs
- Update env.example with new HTTPS-related variables
- Update docker-compose.yml with SSL configuration options

This enables secure HTTPS access in both development and production
environments while maintaining compatibility with existing deployments.
2025-10-13 18:32:45 +02:00
Dries Peeters
128b3c2449 Merge pull request #83 from DRYTRIX/develop
Develop
v2.3.5 dev-dev-36-94e8e494
2025-10-13 13:19:19 +02:00
Dries Peeters
e61c628526 feat: enhance CSRF protection with double-submit cookie pattern
Implement comprehensive CSRF token management with cookie-based
double-submit pattern to improve security and SPA compatibility.

Changes:
- Add CSRF cookie configuration in app/config.py
  * WTF_CSRF_SSL_STRICT for strict SSL validation in production
  * CSRF_COOKIE_NAME (default: XSRF-TOKEN) for framework compatibility
  * CSRF_COOKIE_SECURE inherits from SESSION_COOKIE_SECURE by default
  * CSRF_COOKIE_HTTPONLY, CSRF_COOKIE_SAMESITE, and CSRF_COOKIE_DOMAIN settings

- Implement CSRF cookie handler in app/__init__.py
  * Set CSRF token in cookie after each request
  * Configure cookie with secure flags based on environment settings
  * Support for double-submit pattern and SPA frameworks

- Add client-side CSRF token management in base.html
  * JavaScript utilities for token retrieval and validation
  * Cookie synchronization for frameworks that read XSRF-TOKEN
  * Auto-refresh mechanism for stale tokens (>15 minutes)
  * Pre-submit token validation and refresh
  * User notification for missing cookies/tokens

- Clean up docker-compose.yml environment variables
  * Remove redundant SECRET_KEY, WTF_CSRF_*, and cookie security settings
  * These are now managed through .env files and config.py

This enhancement provides better CSRF protection while maintaining
compatibility with modern JavaScript frameworks and SPA architectures.
2025-10-13 12:51:23 +02:00
Dries Peeters
f2160df62e Merge branch 'develop' of https://github.com/drytrix/TimeTracker into develop 2025-10-12 22:12:11 +02:00
Dries Peeters
57c80ff685 fix(calendar): resolve loading state issues and improve user experience
- Fix infinite recursion error in showToast function by removing duplicate local definition
- Implement dynamic calendar legend that updates with actual project names and colors
- Add comprehensive button state management to prevent stuck "Processing..." states
- Implement immediate loading state clearing for all calendar actions (create, update, delete, duplicate)
- Add resetAllButtonStates() function to handle button state cleanup
- Remove delays in loading state transitions for better responsiveness
- Add error handling and logging for calendar events loading
- Ensure loading states are cleared on both success and error scenarios
- Add global reset function for manual button state recovery
- Improve loadTasksForProject error handling and null checks

Fixes:
- Calendar legend showing static placeholders instead of dynamic project data
- Buttons stuck in "Processing..." state after successful actions
- Loading states persisting for 2-3 seconds after completion
- Recursion errors in toast notification system
- Inconsistent button state management across calendar operations
2025-10-12 22:11:51 +02:00
Dries Peeters
568e22f8d4 Merge pull request #82 from DRYTRIX/develop
Develop
v2.3.4 dev-dev-35-e61c6285 dev-dev-34-f2160df6
2025-10-12 22:05:31 +02:00
Dries Peeters
d623164895 Update setup.py 2025-10-12 21:52:31 +02:00
Dries Peeters
0910544583 fix(csrf): harden forms; enforce SECRET_KEY; improve client refresh
- CSRF error handler:
  - Treat classic form POSTs as HTML (flash + safe redirect) regardless of
    Accept header quirks; return JSON only for XHR/JSON requests
  - Add contextual logging (path, method, referrer, user, reason) for diagnostics
- Security/config:
  - Enforce strong SECRET_KEY in production (no placeholders, min length);
    refuse startup if invalid
  - Make SESSION_COOKIE_SAMESITE and REMEMBER_COOKIE_SAMESITE env-driven
    while keeping Secure/HttpOnly flags configurable
- Client resilience:
  - Refresh CSRF token on window focus in addition to periodic refresh
  - Pre-submit refresh if token is stale (>15 minutes)
  - Auto-inject/refresh tokens for dynamically added forms via MutationObserver
- UX correctness:
  - Ensure tasks.edit_task re-renders with projects/users on validation errors

Fixes #77 (csrf_token_missing_or_invalid)
See: https://github.com/DRYTRIX/TimeTracker/issues/77

Files:
- app/__init__.py
- app/config.py
- app/templates/base.html
- app/routes/tasks.py

Note: In production, a single, persistent SECRET_KEY is required across all instances.
2025-10-12 21:46:32 +02:00
Dries Peeters
c06b96945a Merge pull request #81 from DRYTRIX/develop
Updated the dockerfile.
v2.3.3 dev-dev-33-d6231648 dev-dev-32-09105445
2025-10-11 21:21:53 +02:00
Dries Peeters
73f8c25de9 Update migration-check.yml 2025-10-11 21:08:35 +02:00
Dries Peeters
ae710e60f0 Updated the dockerfile. 2025-10-11 20:55:54 +02:00
Dries Peeters
21849fe5d3 Merge pull request #80 from DRYTRIX/develop
Update migration-check.yml
dev-dev-30-ae710e60 v2.3.2 dev-dev-29-b2a33bfd dev-dev-31-73f8c25d
2025-10-11 20:34:34 +02:00
Dries Peeters
b2a33bfdb7 Update migration-check.yml 2025-10-11 20:29:04 +02:00
Dries Peeters
76c8862e13 Merge pull request #79 from DRYTRIX/develop
Develop
dev-dev-28-4c4e29e9
2025-10-11 20:21:27 +02:00
Dries Peeters
4c4e29e963 Update _kanban.html 2025-10-11 20:14:33 +02:00
Dries Peeters
430a35b6c1 Update setup.py 2025-10-11 19:57:58 +02:00
Dries Peeters
20824dbcb1 feat: Add customizable Kanban board columns and enhance CSRF configuration
This commit introduces a comprehensive Kanban board customization system and
improves CSRF token configuration for Docker deployments.

## Major Features

### 1. Customizable Kanban Board Columns
Add complete kanban column customization system allowing users to define
custom workflow states beyond the default columns.

**New Components:**
- Add KanbanColumn model with full CRUD operations (app/models/kanban_column.py)
- Add kanban routes blueprint with admin endpoints (app/routes/kanban.py)
- Add kanban column management templates (app/templates/kanban/)
- Add migration 019 for kanban_columns table (migrations/)

**Features:**
- Create unlimited custom columns with unique keys, labels, icons, and colors
- Drag-and-drop column reordering with position persistence
- Toggle column visibility without deletion
- Protected system columns (todo, in_progress, done) prevent accidental deletion
- Complete state marking for columns that should mark tasks as done
- Real-time updates via SocketIO broadcasts when columns change
- Font Awesome icon support (5000+ icons)
- Bootstrap color scheme integration
- Comprehensive validation and error handling

**Integration:**
- Update Task model to work with dynamic column statuses (app/models/task.py)
- Update task routes to use kanban column API (app/routes/tasks.py)
- Update project routes to fetch active columns (app/routes/projects.py)
- Add kanban column management links to base template (app/templates/base.html)
- Update kanban board templates to render dynamic columns (app/templates/tasks/)
- Add cache prevention headers to force fresh column data

**API Endpoints:**
- GET /api/kanban/columns - Fetch all active columns
- POST /api/kanban/columns/reorder - Reorder columns
- GET /kanban/columns - Column management interface (admin only)
- POST /kanban/columns/create - Create new column (admin only)
- POST /kanban/columns/<id>/edit - Edit column (admin only)
- POST /kanban/columns/<id>/delete - Delete column (admin only)
- POST /kanban/columns/<id>/toggle - Toggle column visibility (admin only)

### 2. Enhanced CSRF Configuration
Improve CSRF token configuration and documentation for Docker deployments.

**Configuration Updates:**
- Add WTF_CSRF_ENABLED environment variable to all docker-compose files
- Add WTF_CSRF_TIME_LIMIT environment variable with 1-hour default
- Update app/config.py to read CSRF settings from environment
- Add SECRET_KEY validation in app/__init__.py to prevent production deployment
  with default keys

**Docker Compose Updates:**
- docker-compose.yml: CSRF enabled by default for security testing
- docker-compose.remote.yml: CSRF always enabled in production
- docker-compose.remote-dev.yml: CSRF enabled with production-like settings
- docker-compose.local-test.yml: CSRF can be disabled for local testing
- Add helpful comments explaining each CSRF-related environment variable
- Update env.example with CSRF configuration examples

**Verification Scripts:**
- Add scripts/verify_csrf_config.sh for Unix systems
- Add scripts/verify_csrf_config.bat for Windows systems
- Scripts check SECRET_KEY, CSRF_ENABLED, and CSRF_TIME_LIMIT settings

### 3. Database Initialization Improvements
- Update app/__init__.py to run pending migrations on startup
- Add automatic kanban column initialization after migrations
- Improve error handling and logging during database setup

### 4. Configuration Management
- Update app/config.py with new CSRF and kanban-related settings
- Add environment variable parsing with sensible defaults
- Improve configuration validation and error messages

## Documentation

### New Documentation Files
- CUSTOM_KANBAN_README.md: Quick start guide for kanban customization
- KANBAN_CUSTOMIZATION.md: Detailed technical documentation
- IMPLEMENTATION_SUMMARY.md: Implementation details and architecture
- KANBAN_AUTO_REFRESH_COMPLETE.md: Real-time update system documentation
- KANBAN_REFRESH_FINAL_FIX.md: Cache and refresh troubleshooting
- KANBAN_REFRESH_SOLUTION.md: Technical solution for data freshness
- docs/CSRF_CONFIGURATION.md: Comprehensive CSRF setup guide
- CSRF_DOCKER_CONFIGURATION_SUMMARY.md: Docker-specific CSRF setup
- CSRF_TROUBLESHOOTING.md: Common CSRF issues and solutions
- APPLY_KANBAN_MIGRATION.md: Migration application guide
- APPLY_FIXES_NOW.md: Quick fix reference
- DEBUG_KANBAN_COLUMNS.md: Debugging guide
- DIAGNOSIS_STEPS.md: System diagnosis procedures
- BROWSER_CACHE_FIX.md: Browser cache troubleshooting
- FORCE_NO_CACHE_FIX.md: Cache prevention solutions
- SESSION_CLOSE_ERROR_FIX.md: Session handling fixes
- QUICK_FIX.md: Quick reference for common fixes

### Updated Documentation
- README.md: Add kanban customization feature description
- Update project documentation with new features

## Testing

### New Test Files
- test_kanban_refresh.py: Test kanban column refresh functionality

## Technical Details

**Database Changes:**
- New table: kanban_columns with 11 columns
- Indexes on: key, position
- Default data: 4 system columns (todo, in_progress, review, done)
- Support for both SQLite (development) and PostgreSQL (production)

**Real-Time Updates:**
- SocketIO events: 'kanban_columns_updated' with action type
- Automatic page refresh when columns are created/updated/deleted/reordered
- Prevents stale data by expiring SQLAlchemy caches after changes

**Security:**
- Admin-only access to column management
- CSRF protection on all column mutation endpoints
- API endpoints exempt from CSRF (use JSON and other auth mechanisms)
- System column protection prevents data integrity issues
- Validation prevents deletion of columns with active tasks

**Performance:**
- Efficient querying with position-based ordering
- Cached column data with cache invalidation on changes
- No-cache headers on API responses to prevent stale data
- Optimized database indexes for fast lookups

## Breaking Changes

None. This is a fully backward-compatible addition.

Existing workflows continue to work with the default columns.
Custom columns are opt-in via the admin interface.

## Migration Notes

1. Run migration 019 to create kanban_columns table
2. Default columns are initialized automatically on first run
3. No data migration needed for existing tasks
4. Existing task statuses map to new column keys

## Environment Variables

New environment variables (all optional with defaults):
- WTF_CSRF_ENABLED: Enable/disable CSRF protection (default: true)
- WTF_CSRF_TIME_LIMIT: CSRF token expiration in seconds (default: 3600)
- SECRET_KEY: Required in production, must be cryptographically secure

See env.example for complete configuration reference.

## Deployment Notes
2025-10-11 19:56:45 +02:00
Dries Peeters
f7fc0794c9 Fix kanban board task modal interaction issue
Fixed modal being unresponsive when clicking task titles in kanban board.
Modal was nested in containers causing z-index stacking issues.

- Moved modal to body element before showing (Bootstrap requirement)
- Set proper z-index hierarchy (backdrop: 1040, modal: 1050-1057)
- Ensured pointer-events: auto on all modal dialogs
2025-10-11 16:04:26 +02:00
Dries Peeters
594cafd59a Merge pull request #78 from DRYTRIX/develop
Develop
v2.3.1 dev-dev-24-94f02136 dev-dev-25-f7fc0794 dev-dev-26-20824dbc dev-dev-27-430a35b6
2025-10-11 09:11:48 +02:00
Dries Peeters
94f021364d Update setup.py 2025-10-11 09:03:17 +02:00
Dries Peeters
9b7aa3a938 security: Add CSRF token protection to all POST forms" -m " Complete CSRF protection implementation across the entire application. Fixed 31 HTML forms and 4 JavaScript dynamic form generators that were missing CSRF tokens.
Affected modules: Projects, Clients, Tasks, Invoices, Comments, Admin, Search

- All HTML forms now include csrf_token hidden input
- JavaScript forms retrieve token from meta tag in base.html
- API endpoints properly exempted for JSON operations
- 58 POST forms + 4 dynamic JS forms now protected

Security impact: HIGH - Closes critical CSRF vulnerability
Files modified: 20 templates
2025-10-11 09:01:58 +02:00
Dries Peeters
abdbd9d0ee Merge pull request #75 from DRYTRIX/develop
Update test_project_costs.py
v2.3.0 dev-dev-22-af36665e dev-dev-23-9b7aa3a9
2025-10-10 15:03:47 +02:00
Dries Peeters
af36665eb6 Update test_project_costs.py 2025-10-10 14:58:11 +02:00
Dries Peeters
ab0a4a0f48 Merge pull request #74 from DRYTRIX/develop
github workflows
2025-10-10 14:51:15 +02:00
Dries Peeters
bdbfd621de github workflows 2025-10-10 14:43:02 +02:00
Dries Peeters
d5c003e46f Merge pull request #73 from DRYTRIX/develop
Merge develop into main: CI/CD, features, bugfixes, and major improvements
dev-dev-21-bdbfd621
2025-10-10 14:19:32 +02:00
Dries Peeters
7387c22360 Update ci-comprehensive.yml 2025-10-10 14:10:28 +02:00
Dries Peeters
d44ea6b120 hope this is the latest 2025-10-10 14:02:28 +02:00
Dries Peeters
ee2aee8da1 some more tests. 2025-10-10 13:48:24 +02:00
Dries Peeters
ede8baa1ee yet another testing update 2025-10-10 13:33:49 +02:00
Dries Peeters
113a57d2eb testing updates 2025-10-10 11:37:23 +02:00
Dries Peeters
f11171f841 update smoke test 2025-10-10 07:27:48 +02:00
Dries Peeters
9e8f67090b updated smoke test. 2025-10-10 07:22:51 +02:00
Dries Peeters
eee64e637d updated workflow & smoke tests 2025-10-10 07:18:37 +02:00
Dries Peeters
2061e1fc1b Updated CSRF 2025-10-10 07:12:07 +02:00
Dries Peeters
c217b039b3 Update cd-development.yml 2025-10-09 14:43:09 +02:00
Dries Peeters
c0885f0554 Cleanup of readme. 2025-10-09 14:32:26 +02:00
Dries Peeters
7c2195e872 Update cd-development.yml 2025-10-09 14:12:28 +02:00
Dries Peeters
f401ebae7f Paralllel test issues. 2025-10-09 14:08:50 +02:00
Dries Peeters
be06957138 update readme 2025-10-09 14:04:36 +02:00
Dries Peeters
de81b91510 small update 2025-10-09 13:53:58 +02:00
Dries Peeters
9e6d4bc514 update and cleanup 2025-10-09 13:48:03 +02:00
Dries Peeters
977e6fc280 Update conftest.py 2025-10-09 13:26:10 +02:00
Dries Peeters
ac192a395f updated ci 2025-10-09 13:20:27 +02:00
Dries Peeters
6f4c8c8c21 Updated for Ci-testing
Updated for Ci-testing
2025-10-09 13:13:28 +02:00
Dries Peeters
0752332ed6 feat: Implement comprehensive CI/CD pipeline with GitHub Actions
Implement a complete, production-ready CI/CD pipeline that runs 100% on
GitHub Actions with zero external dependencies. This replaces and consolidates
existing workflows with an optimized, streamlined pipeline.

## Major Changes
- Add 3 new workflows (ci-comprehensive, cd-development, cd-release)
- Remove 2 redundant workflows (backed up)
- Add 130+ tests across 4 new test files
- Add 8 documentation guides (60+ KB)
- Add developer tools and scripts
2025-10-09 13:02:39 +02:00
Dries Peeters
77aec94b86 feat: Add project costs tracking and remove license server integration
Major Features:
- Add project costs feature with full CRUD operations
- Implement toast notification system for better user feedback
- Enhance analytics dashboard with improved visualizations
- Add OIDC authentication improvements and debug tools

Improvements:
- Enhance reports with new filtering and export capabilities
- Update command palette with additional shortcuts
- Improve mobile responsiveness across all pages
- Refactor UI components for consistency

Removals:
- Remove license server integration and related dependencies
- Clean up unused license-related templates and utilities

Technical Changes:
- Add new migration 018 for project_costs table
- Update models: Project, Settings, User with new relationships
- Refactor routes: admin, analytics, auth, invoices, projects, reports
- Update static assets: CSS improvements, new JS modules
- Enhance templates: analytics, admin, projects, reports

Documentation:
- Add comprehensive documentation for project costs feature
- Document toast notification system with visual guides
- Update README with new feature descriptions
- Add migration instructions and quick start guides
- Document OIDC improvements and Kanban enhancements

Files Changed:
- Modified: 56 files (core app, models, routes, templates, static assets)
- Deleted: 6 files (license server integration)
- Added: 28 files (new features, documentation, migrations)
2025-10-09 11:50:26 +02:00
Dries Peeters
0749b0adf9 reset to previous commit. 2025-10-09 06:49:56 +02:00