- Updated `edit_user.py` to accept a `--note` argument, allowing user notes to be modified or cleared.
- Extended the `edit-user` command in `cli.py` with a `--note` option.
- Modified the `edit_user` function in `cli_api.py` to pass the new note argument to the underlying script.
Revamps the entire user deletion process to resolve critical performance bottlenecks that caused the web panel and database to freeze when removing multiple users.
- **Backend:** Core scripts (`kickuser.py`, `remove_user.py`) and the database layer are re-engineered to handle multiple users in a single, efficient batch operation using MongoDB's `delete_many`.
- **API:** A new `POST /api/v1/users/bulk-delete` endpoint is introduced for batch removals. The existing single-user `DELETE` endpoint is fixed to align with the new bulk logic.
- **Frontend:** The Users page now intelligently calls the bulk API when multiple users are selected, drastically improving UI responsiveness and reducing server load.
Introduces a dedicated system for managing a list of external nodes, each with a unique name and IP address. This feature is designed for multi-node deployments.
Integrates WARP (install, uninstall, configure, status) functionality
into the web panel's settings page. Users can now manage WARP
directly from the UI.
- Added `edit_normalsub_subpath` function to `cli_api.py` to
interact with the `normalsub.sh edit_subpath` command, including
input validation for the new subpath.
- Updated the `normal-sub` command in `cli.py`:
- Added 'edit_subpath' as a valid action.
- Introduced a '--subpath' option for specifying the new path.
- Modified the command logic to call the new API function when
the 'edit_subpath' action is selected.
- Added corresponding wrapper functions (setup_webpanel_decoy,
stop_webpanel_decoy) in cli_api.py.
- Updated start_webpanel in cli_api.py to accept decoy_path.
- Exposed new commands (setup-webpanel-decoy, stop-webpanel-decoy)
in cli.py.
- Updated the webpanel start command in cli.py to accept a
--decoy-path option.
- Added --no-gui flag to traffic-status command
- Modified traffic.py to accept no_gui parameter
- Updated cli_api.traffic_status() to control output display
- Ensured silent operation when called from remove-user command
- Improved function return values for programmatic use
- Added proper parameter handling throughout the call chain