Commit Graph

77 Commits

Author SHA1 Message Date
Matthieu B
9b8c0248cd fix: resolve double scrollbar on LDAP settings and add experimental label
Add overflow-hidden to admin layout's h-screen container to prevent
body-level scrolling competing with #content's overflow-y-auto.
Mark LDAP settings as experimental with a badge.
2026-03-29 16:51:36 +02:00
Matthieu B
ef8ad20938 style: reformat templates with djlint 2026-03-29 16:34:26 +02:00
Erwan Leboucher
5bb51e0cf1 feat(ldap): add LDAP authentication and invitation integration 2025-12-27 17:14:17 +01:00
Matthieu B
89762d96dd feat: add bundle preview functionality and improve token generation tests
- Added a preview link for bundles in the wizard settings page. closes #1048
- Enhanced the wizard steps template to handle bundle preview mode.
- Updated JavaScript to generate URLs for bundle preview and runtime modes.
- Improved test coverage for password reset token generation by asserting token creation.
2025-12-09 14:37:39 +01:00
Matthieu B
3d25506745 style: improve HTML formatting and indentation across multiple templates 2025-12-09 14:28:01 +01:00
Matthieu B
4af196f0b8 feat: add manual cleanup route for expired users in settings closes #1047 2025-12-09 14:24:21 +01:00
Matthieu B
704aaddd97 fix: tests 2025-11-03 17:51:45 +01:00
Matthieu B
5feaf51337 Enhance wizard step management and UI
- Updated the sub-navigation for the wizard to conditionally display step creation options based on the default state and available bundles.
- Improved the bundles page layout by categorizing steps into pre-invite, post-invite, and additional categories, enhancing user experience.
- Added orphaned step handling to allow users to remove steps that no longer have an associated entry.
- Displayed the associated wizard bundle name in the invite card if applicable.
- Adjusted JavaScript routing for bundle steps in the wizard.
- Modified the development script to set the NODE_ENV to development when installing npm dependencies, ensuring proper handling of devDependencies.
- Updated the subproject reference in the plus directory to indicate a dirty state.
2025-10-26 12:26:26 +01:00
Matthieu B
b7916658a3 refactor: enhance modal accessibility and styling, add safe area insets for PWA support closes #871 #873 2025-10-23 19:18:28 +02:00
Matthieu B
3e84e68f8b fix: remove deprecated Plus audit route and update Plus settings tab link 2025-10-20 15:49:17 +02:00
Matthieu B
3965444133 refactor: Rename environment variable for enabling Plus features to improve clarity 2025-10-18 16:15:48 +02:00
Matthieu B
42d4b56df1 Merge branch 'main' into plus 2025-10-18 16:07:43 +02:00
engels74
0fb4767457 fix(migrations): reorder wizard category migration and apply pre-rebase formatting
Migration Changes:
- Renamed migration file from 20251004 to 20251005
- Updated down_revision from fd5a34530162 to 08a6c8fb44db
- Ensures migration runs after upstream notification events migration
- Fixes migration chain branching issue
- Removed incorrect merge migration (1e83c67d9785)

Migration chain is now:
fd5a34530162 (disabled attribute) → 08a6c8fb44db (notification events)
→ 20251005_add_category_to_wizard_step (wizard category)

Wizard Refactoring:
- Enhanced uniqueness constraint for WizardStep from (server_type, position)
  to (server_type, category, position)
- Ensures steps in different categories (pre_invite vs post_invite) can have
  the same position indexing without conflict
- Updated wizard state management documentation to explicitly list and
  describe data-* attributes used in steps.html template

Code Quality:
- Applied djlint formatting to 8 template files to minimize rebase conflicts
- Applied ruff format and ruff check --fix (no changes needed)
- Removed redundant requirement comments from spec-driven development
- Fixed case sensitivity in test assertion (POST vs post)
- Updated test references from 20251004 to 20251005 to match corrected
  migration revision ID
2025-10-16 16:57:14 +02:00
engels74
d0df4c6d5d feat: wizard step refactor into pre/post wizard steps
Changes:
  - Pre/post invitation wizard phases
  - Phase-aware routing (/pre-wizard/*, /post-wizard/*)
  - Phase indicator badges (visual categorization)
  - Dynamic completion button behavior
  - Two-column admin layout with category drag-and-drop
  - Invite code management service
  - Enhanced wizard export/import
  - Comprehensive test coverage (17 new test files)
2025-10-16 15:28:48 +02:00
Matthieu B
0ac98355dd feat(activity): Implement activity ingestion, identity resolution, and maintenance services
- Added `identity_resolution.py` for resolving Wizarr users and identities.
- Created `ingestion.py` to handle recording and updating activity events.
- Introduced `maintenance.py` for cleanup and session management tasks.
- Developed `queries.py` for read-oriented operations on activity sessions.
- Implemented background tasks in `activity.py` for scheduled maintenance.
- Added tests for activity services and blueprint to ensure functionality.
2025-10-16 15:18:31 +02:00
Matthieu B
813601d37b feat: Add Wizarr Plus licensing and historical data import features
- Implemented LicenseValidationMiddleware for periodic license validation and feature protection.
- Created HistoricalDataService for importing historical viewing data from Plex into the ActivitySession model.
- Added KeygenLicenseService for runtime license verification and machine fingerprinting.
- Introduced new Jinja filters for built-in functions max and min.
- Updated settings UI to include a tab for Plus features.
- Added Docker support for Wizarr Plus with a dedicated docker-compose file.
- Created entrypoint script for license verification and initialization of the Wizarr Plus container.
- Added wrapper scripts for building, verifying licenses, and setting up Wizarr Plus.
- Updated dependencies in pyproject.toml to include websocket-client for Plus features.
2025-10-09 12:14:27 +02:00
Matthieu B
a072bdf097 feat: add main side plus features 2025-10-09 12:12:02 +02:00
Matthieu B
ba28712d8c fix: reformat template titles for consistency and readability 2025-10-08 16:54:24 +02:00
Matthieu B
e38a699d5e fix: enhance library access resolution for Plex users and update user details structure closes #892. Remove dev dependencies by default closes #905 2025-10-08 11:11:47 +02:00
Matthieu B
187b8758c1 Refactor wizard templates and JavaScript controller
- Updated title block in frame.html for clarity.
- Improved localization for the "Next" button in steps.html.
- Refactored the WizardController JavaScript for better readability and organization.
- Added detailed comments to the wizard architecture for future reference.
- Enhanced button visibility and state management based on interaction requirements.
- Implemented swipe gesture handling for mobile navigation.
- Updated subproject commit to indicate a dirty state.
2025-10-07 14:01:16 +02:00
Matthieu B
d1ed08d9c2 Add .djlintrc configuration file for Jinja linting 2025-10-07 11:04:58 +02:00
Mully
a394ce3c27 feat: href to GitHub release page
+ Added href for the corresponding release on GitHub to the new app_version element
2025-10-06 12:06:50 -04:00
Matthieu B
f41cd7d8b1 feat: display application version in general settings page 2025-10-06 13:09:35 +02:00
Matthieu B
b682967ed2 feat: add notification events handling and UI updates for user notifications 2025-10-04 14:46:01 +02:00
Matthieu B
fc49da65f6 refactor: fix ruff linting and ty type errors
- Fix invalid parameter defaults: library_id: str | None = None
- Replace try-except-pass with contextlib.suppress()
- Remove unnecessary dict.keys() calls
- Remove unnecessary variable assignments before return
- Combine nested if statements
- Add type ignore comments for intentional shadowing
- Add type ignore comments for SQLAlchemy dynamic attributes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 22:06:15 +02:00
Matthieu B
f295a345a1 feat: add user disable functionality and update user management settings
- Introduced `is_disabled` attribute to the User model.
- Added `expiry_action` selection in the GeneralSettingsForm for user management.
- Implemented `disable_user` methods for various media clients (Audiobookshelf, Jellyfin, Kavita, etc.) to handle user disabling.
- Updated `check_expiring` task to process expired users based on the new settings.
- Enhanced user interface to reflect disabled status in user cards.
- Added migration for the new `is_disabled` column in the user table.
2025-09-27 12:19:48 +02:00
Matthieu B
1bc343f1f4 feat: speed up settings loading 2025-09-10 09:58:28 +02:00
engels74
0f0dedde0a feat: implement wizard step interaction requirement system
Add comprehensive "require interaction" functionality for wizard steps that prevents users from proceeding until they engage with step content.

## Key Features:
- **Database Integration**: New `require_interaction` boolean field in WizardStep model with migration
- **Frontend Gating**: Robust JavaScript system that disables "Next" button until user clicks links/buttons in step content
- **UI Enhancement**: Improved checkbox forms with clear descriptions and visual indicators
- **Event Handling**: Advanced interaction detection with proper HTMX disabling and event capture
- **Admin Interface**: Full integration with wizard configuration forms (main and simple)
- **Export/Import**: Support for require_interaction field in wizard step data operations

## Technical Implementation:
- Disabled button state management with pointer-events and tabindex control
- HTMX attribute manipulation to prevent premature navigation
- Event listener capture phase handling for reliable interaction blocking
- Comprehensive test coverage for interaction scenarios
- Form validation and user experience improvements

## Files Modified:
- Backend: models, routes, forms, services, migration
- Frontend: JavaScript interaction logic, templates, UI components
- Testing: Complete test suite for interaction requirements

This feature ensures users engage with critical wizard content before proceeding, improving onboarding experience and preventing accidental step skipping.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-07 14:46:50 +02:00
Matthieu B
486e40e202 fixes and closes #784 #772 #795 2025-08-27 22:08:37 +02:00
Matthieu B
31228f7a93 Add Audiobookrequest 2025-08-15 11:11:22 +02:00
Matthieu B
5c40d62765 Remove CSRF token from forms and update button styles for consistency 2025-08-13 22:25:15 +02:00
Matthieu B
612931a743 Remove external integration fields from GeneralSettingsForm and associated HTML template 2025-08-13 22:11:38 +02:00
Matthieu B
48813a9f7c Update API key management UI and integrate CSRF protection 2025-08-13 21:48:48 +02:00
Matthieu B
5f95b788b5 Add external integration fields to GeneralSettingsForm and update settings template 2025-08-13 21:33:39 +02:00
Matthieu B
b27167e4eb Merge latest changes from main
Resolved conflicts in:
- app/models.py: Combined ApiKey and ExpiredUser models
- app/logging_config.py: Combined API logger and alembic logger configurations
- app/blueprints/public/routes.py: Combined server resolution approaches with fallback
2025-08-13 20:15:05 +02:00
Matthieu B
1a4108f50a fix 2025-07-30 12:20:21 +02:00
Matthieu B
d4dd57ee1e feat: Add comprehensive connections and expiry management system
- Add new connections management system with MediaConnection and DiscordWebhook models
- Implement dynamic server configuration with URL field support
- Add expiry management system with automatic user cleanup
- Create wizard preset system for streamlined server setup
- Add dedicated connections interface in settings with CRUD operations
- Integrate expiry functionality with connection management
- Add proper form validation and error handling
- Update templates and routes for new connection workflow

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-29 22:21:10 +02:00
copilot-swe-agent[bot]
1b1159e0f3 Fix API key deletion UI glitch and improve API endpoint functionality
Co-authored-by: Tomat0r <68383702+Tomat0r@users.noreply.github.com>
2025-07-28 13:06:36 +00:00
copilot-swe-agent[bot]
60cb5d8972 Implement comprehensive API system with key management
Co-authored-by: Tomat0r <68383702+Tomat0r@users.noreply.github.com>
2025-07-28 12:02:42 +00:00
Matthieu B
b513e3a2d2 fix and closes #715 2025-07-18 16:16:16 +02:00
Matthieu B
79991086cf tiny ui tweak 2025-07-18 15:54:59 +02:00
Matthieu B
56ca505dc9 feat: Implement passkey management for admin accounts
- Added routes for resetting and viewing passkeys for admin accounts.
- Integrated passkey checks during login to enforce 2FA when applicable.
- Updated login template to handle passkey authentication and display relevant messages.
- Created a recovery tool for password resets and passkey management in case of lockouts.
- Enhanced admin management UI to include passkey options.
- Documented recovery tool usage and scenarios for admin access recovery.
2025-07-18 15:47:02 +02:00
Matthieu B
d8cb5193c3 invitation workflow overall for more stability 2025-07-17 15:13:00 +02:00
Matthieu B
f08e02386c fix and closes #708 2025-07-15 15:13:40 +02:00
Matthieu B
7b8f64af7d Fix SQLAlchemy model constructors to accept keyword arguments
- Added __init__ constructors to all SQLAlchemy models
- Fixed pyright 'No parameter named' errors across the codebase
- Fixed various ruff linting issues (SIM108, E741, E402, SIM102, B904, SIM105)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 13:52:15 +02:00
Matthieu B
d14b791f3b ui tweak 2025-07-10 16:30:01 +02:00
Matthieu B
d0fa94793d fix notifications 2025-07-10 13:28:50 +02:00
Matthieu B
44b8afaede revam psettings 2025-07-10 13:24:55 +02:00
Matthieu B
f5b70abef5 matching tags 2025-07-09 16:37:02 +02:00
Matthieu B
4ff61043d1 make settings more mobile friendly 2025-07-09 12:40:59 +02:00