feat: add web secure login toggle

This commit is contained in:
ihmily
2025-06-12 14:31:13 +08:00
parent cadcae980f
commit 690a7267db
4 changed files with 46 additions and 16 deletions

View File

@@ -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),

View File

@@ -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",

View File

@@ -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": "新密码",

37
main.py
View File

@@ -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()