From 690a7267dbaff70b79953d4d2445d6d79960d12e Mon Sep 17 00:00:00 2001 From: ihmily <114978440+ihmily@users.noreply.github.com> Date: Thu, 12 Jun 2025 14:31:13 +0800 Subject: [PATCH] feat: add web secure login toggle --- app/ui/views/settings_view.py | 19 ++++++++++++++++++ locales/en.json | 3 +++ locales/zh_CN.json | 3 +++ main.py | 37 ++++++++++++++++++++--------------- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/app/ui/views/settings_view.py b/app/ui/views/settings_view.py index bb2ef33..733aecf 100644 --- a/app/ui/views/settings_view.py +++ b/app/ui/views/settings_view.py @@ -1144,6 +1144,16 @@ class SettingsPage(PageBase): else: await self.app.snack_bar.show_snack_bar(self._["not_logged_in"], bgcolor=ft.Colors.RED) + async def toggle_login_required(_): + login_required = login_required_switch.value + self.user_config["login_required"] = login_required + await self.config_manager.save_user_config(self.user_config) + + if login_required: + await self.app.snack_bar.show_snack_bar(self._["login_required_enabled"], bgcolor=ft.Colors.GREEN) + else: + await self.app.snack_bar.show_snack_bar(self._["login_required_disabled"], bgcolor=ft.Colors.GREEN) + username = self.app.current_username or "admin" old_password_field = ft.TextField( @@ -1170,12 +1180,21 @@ class SettingsPage(PageBase): icon=ft.icons.LOCK_RESET, ) + login_required_switch = ft.Switch( + value=self.get_config_value("login_required", True), + on_change=toggle_login_required, + ) + return ft.Column( [ self.create_setting_group( self._["security_settings"], self._["web_login_configuration"], [ + self.create_setting_row( + self._["login_required"], + login_required_switch, + ), self.create_setting_row( self._["current_username"], ft.Text(username), diff --git a/locales/en.json b/locales/en.json index 9410f27..2bf7f36 100644 --- a/locales/en.json +++ b/locales/en.json @@ -184,6 +184,9 @@ "script_command": "Custom Script Execution Command", "default_platform_with_proxy": "Default Platform for Recording with Proxy", "web_login_configuration": "Web Backend Login Configuration", + "login_required": "Enable Secure Login", + "login_required_enabled": "Secure login enabled", + "login_required_disabled": "Secure login disabled", "current_username": "Current Username", "old_password": "Old Password", "new_password": "New Password", diff --git a/locales/zh_CN.json b/locales/zh_CN.json index 8157646..26d8ac1 100644 --- a/locales/zh_CN.json +++ b/locales/zh_CN.json @@ -185,6 +185,9 @@ "script_command": "自定义脚本执行命令", "default_platform_with_proxy": "默认使用代理录制的平台", "web_login_configuration": "Web后台登录配置", + "login_required": "启用安全登录", + "login_required_enabled": "已启用安全登录", + "login_required_disabled": "已禁用安全登录", "current_username": "当前用户名", "old_password": "旧密码", "new_password": "新密码", diff --git a/main.py b/main.py index f4f6fe7..37ca289 100644 --- a/main.py +++ b/main.py @@ -122,8 +122,8 @@ async def main(page: ft.Page) -> None: if hasattr(app, "tray_manager"): try: app.tray_manager.start(page) - except Exception as e: - logger.error(f"Failed to start tray manager: {e}") + except Exception as err: + logger.error(f"Failed to start tray manager: {err}") page.update() page.on_route_change(ft.RouteChangeEvent(route=page.route)) @@ -133,23 +133,28 @@ async def main(page: ft.Page) -> None: app.auth_manager = auth_manager await auth_manager.initialize() - session_token = await page.client_storage.get_async("session_token") - if not session_token or not auth_manager.validate_session(session_token): - async def on_login_success(token): - _session_info = auth_manager.active_sessions.get(token, {}) - app.current_username = _session_info.get("username") + login_required = app.settings.get_config_value("login_required", True) + + if login_required: + session_token = await page.client_storage.get_async("session_token") + if not session_token or not auth_manager.validate_session(session_token): + async def on_login_success(token): + _session_info = auth_manager.active_sessions.get(token, {}) + app.current_username = _session_info.get("username") + + page.clean() + await load_app() page.clean() - await load_app() - - page.clean() - - login_page = LoginPage(page, auth_manager, on_login_success) - page.add(login_page.get_view()) - return + + login_page = LoginPage(page, auth_manager, on_login_success) + page.add(login_page.get_view()) + return + else: + session_info = auth_manager.active_sessions.get(session_token, {}) + app.current_username = session_info.get("username") else: - session_info = auth_manager.active_sessions.get(session_token, {}) - app.current_username = session_info.get("username") + app.current_username = "admin" await load_app()