From ba6d0db59099b1bdd708003e55c86f264a09bf71 Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Mon, 11 Aug 2025 23:32:39 +0330 Subject: [PATCH] feat(cli): Add IP limit exemption to edit-user command --- core/cli.py | 7 ++++--- core/cli_api.py | 26 ++++++++++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/core/cli.py b/core/cli.py index c02cccc..dee8d67 100644 --- a/core/cli.py +++ b/core/cli.py @@ -146,13 +146,14 @@ def add_user(username: str, traffic_limit: int, expiration_days: int, password: @click.option('--new-expiration-days', '-ne', required=False, help='Expiration days for the new user', type=int) @click.option('--renew-password', '-rp', is_flag=True, help='Renew password for the user') @click.option('--renew-creation-date', '-rc', is_flag=True, help='Renew creation date for the user') -@click.option('--blocked', '-b', is_flag=True, help='Block the user') -def edit_user(username: str, new_username: str, new_traffic_limit: int, new_expiration_days: int, renew_password: bool, renew_creation_date: bool, blocked: bool): +@click.option('--blocked/--unblocked', 'blocked', default=None, help='Block or unblock the user.') +@click.option('--unlimited-ip/--limited-ip', 'unlimited_ip', default=None, help='Set user to be exempt from or subject to IP limits.') +def edit_user(username: str, new_username: str, new_traffic_limit: int, new_expiration_days: int, renew_password: bool, renew_creation_date: bool, blocked: bool | None, unlimited_ip: bool | None): try: cli_api.kick_user_by_name(username) cli_api.traffic_status(display_output=False) cli_api.edit_user(username, new_username, new_traffic_limit, new_expiration_days, - renew_password, renew_creation_date, blocked) + renew_password, renew_creation_date, blocked, unlimited_ip) click.echo(f"User '{username}' updated successfully.") except Exception as e: click.echo(f'{e}', err=True) diff --git a/core/cli_api.py b/core/cli_api.py index 0e71afe..f4fa332 100644 --- a/core/cli_api.py +++ b/core/cli_api.py @@ -285,7 +285,7 @@ def add_user(username: str, traffic_limit: int, expiration_days: int, password: run_cmd(command) -def edit_user(username: str, new_username: str | None, new_traffic_limit: int | None, new_expiration_days: int | None, renew_password: bool, renew_creation_date: bool, blocked: bool): +def edit_user(username: str, new_username: str | None, new_traffic_limit: int | None, new_expiration_days: int | None, renew_password: bool, renew_creation_date: bool, blocked: bool | None, unlimited_ip: bool | None): ''' Edits an existing user's details. ''' @@ -297,15 +297,20 @@ def edit_user(username: str, new_username: str | None, new_traffic_limit: int | if new_expiration_days is not None and new_expiration_days < 0: raise InvalidInputError('Error: expiration days must be a non-negative number.') - if renew_password: - password = generate_password() - else: - password = '' + password = generate_password() if renew_password else '' + creation_date = datetime.now().strftime('%Y-%m-%d') if renew_creation_date else '' - if renew_creation_date: - creation_date = datetime.now().strftime('%Y-%m-%d') - else: - creation_date = '' + blocked_str = '' + if blocked is True: + blocked_str = 'true' + elif blocked is False: + blocked_str = 'false' + + unlimited_str = '' + if unlimited_ip is True: + unlimited_str = 'true' + elif unlimited_ip is False: + unlimited_str = 'false' command_args = [ 'bash', @@ -316,7 +321,8 @@ def edit_user(username: str, new_username: str | None, new_traffic_limit: int | str(new_expiration_days) if new_expiration_days is not None else '', password, creation_date, - 'true' if blocked else 'false' + blocked_str, + unlimited_str ] run_cmd(command_args)