diff --git a/core/cli.py b/core/cli.py index 83f3663..7161d57 100644 --- a/core/cli.py +++ b/core/cli.py @@ -422,6 +422,15 @@ def get_web_panel_url(): click.echo(f'Hysteria web panel is now running. The service is accessible on: {url}') except Exception as e: click.echo(f'{e}', err=True) + + +@cli.command('get-webpanel-api-token') +def get_web_panel_api_token(): + try: + token = cli_api.get_webpanel_api_token() + click.echo(f'WebPanel API token: {token}') + except Exception as e: + click.echo(f'{e}', err=True) # endregion diff --git a/core/cli_api.py b/core/cli_api.py index 7cf04bf..ec28bf2 100644 --- a/core/cli_api.py +++ b/core/cli_api.py @@ -3,6 +3,8 @@ import subprocess from enum import Enum from datetime import datetime import json +from typing import Any + import traffic DEBUG = False @@ -172,7 +174,7 @@ def disable_hysteria2_masquerade(): # region User -def list_users() -> dict | None: +def list_users() -> dict[str, dict[str, Any]] | None: ''' Lists all users. ''' @@ -180,7 +182,7 @@ def list_users() -> dict | None: return json.loads(res) -def get_user(username: str) -> dict | None: +def get_user(username: str) -> dict[str, Any] | None: ''' Retrieves information about a specific user. ''' @@ -205,7 +207,7 @@ def edit_user(username: str, new_username: str | None, new_traffic_limit: int | ''' if not username: raise InvalidInputError('Error: username is required') - if not any([new_username, new_traffic_limit, new_expiration_days, renew_password, renew_creation_date, blocked is not None]): + if not any([new_username, new_traffic_limit, new_expiration_days, renew_password, renew_creation_date, blocked is not None]): # type: ignore raise InvalidInputError('Error: at least one option is required') if new_traffic_limit is not None and new_traffic_limit <= 0: raise InvalidInputError('Error: traffic limit must be greater than 0') @@ -410,5 +412,9 @@ def stop_webpanel(): def get_webpanel_url(): return run_cmd(['bash', Command.SHELL_WEBPANEL.value, 'url']) + + +def get_webpanel_api_token(): + return run_cmd(['bash', Command.SHELL_WEBPANEL.value, 'api-token']) # endregion # endregion diff --git a/core/scripts/webpanel/webpanel_shell.sh b/core/scripts/webpanel/webpanel_shell.sh index 016f51a..1aa4d7c 100644 --- a/core/scripts/webpanel/webpanel_shell.sh +++ b/core/scripts/webpanel/webpanel_shell.sh @@ -169,6 +169,11 @@ show_webpanel_url() { echo "$webpanel_url" } +show_webpanel_api_token() { + source /etc/hysteria/core/scripts/webpanel/.env + echo "$API_TOKEN" +} + stop_service() { echo "Stopping Caddy..." systemctl disable caddy.service @@ -195,6 +200,9 @@ case "$1" in url) show_webpanel_url ;; + api-token) + show_webpanel_api_token + ;; *) echo -e "${red}Usage: $0 {start|stop} ${NC}" exit 1