fix: mandatory login enforcement and robust electron detection
Some checks failed
Release Binaries / release (push) Has been cancelled

This commit is contained in:
Gemini AI
2025-12-29 02:11:21 +04:00
Unverified
parent 97620aaaef
commit 0ee6903a8e
4 changed files with 95 additions and 52 deletions

View File

@@ -1,6 +1,7 @@
import { Component, createSignal, onMount, For, Show } from "solid-js"
import { Lock, User, LogIn, ShieldCheck, Cpu } from "lucide-solid"
import toast from "solid-toast"
import { isElectronHost } from "../../lib/runtime-env"
interface UserRecord {
id: string
@@ -21,13 +22,19 @@ const LoginView: Component<LoginViewProps> = (props) => {
onMount(async () => {
try {
const ipcRenderer = (window as any).electron?.ipcRenderer
if (ipcRenderer) {
const userList = await ipcRenderer.invoke("users:list")
setUsers(userList)
if (userList.length > 0) {
setSelectedUserId(userList[0].id)
if (isElectronHost()) {
const api = (window as any).electronAPI
if (api) {
const userList = await api.invoke("users:list")
setUsers(userList)
if (userList.length > 0) {
setSelectedUserId(userList[0].id)
}
}
} else {
// For web mode, we might need a different way to list users or just show a default
setUsers([{ id: "web-user", name: "Web Explorer" }])
setSelectedUserId("web-user")
}
} catch (error) {
console.error("Failed to fetch users:", error)
@@ -43,19 +50,25 @@ const LoginView: Component<LoginViewProps> = (props) => {
setIsLoggingIn(true)
try {
const ipcRenderer = (window as any).electron?.ipcRenderer
if (ipcRenderer) {
const result = await ipcRenderer.invoke("users:login", {
id: selectedUserId(),
password: password(),
})
if (isElectronHost()) {
const api = (window as any).electronAPI
if (api) {
const result = await api.invoke("users:login", {
id: selectedUserId(),
password: password(),
})
if (result.success) {
toast.success(`Welcome back, ${result.user.name}!`)
props.onLoginSuccess(result.user)
} else {
toast.error("Invalid password")
if (result.success) {
toast.success(`Welcome back, ${result.user.name}!`)
props.onLoginSuccess(result.user)
} else {
toast.error("Invalid password")
}
}
} else {
// Mock login for web mode
toast.success("Web mode access granted")
props.onLoginSuccess({ id: selectedUserId(), name: "Web Explorer" })
}
} catch (error) {
console.error("Login failed:", error)