Экран входа как гейт перед подключением, фикс matrix-engine и Android-иконки
Home теперь рендерится только когда isLoggedIn — до этого юзер видит полноэкранный Login (анонимно/seed/Telegram), а не экран подключения; кнопка VPN дополнительно блокируется на уровне VpnControl как defense-in-depth. isLoggedIn — отдельный персистентный флаг, не совпадает с фактом наличия фонового Ghost-токена (тот может тихо появиться до явного логина). Заодно: matrix-engine в package.json указывал на путь другого пользователя (/home/kirill/...) — поправил под текущую машину; прогнал `tauri icon`, чтобы Android больше не показывал дефолтный логотип Tauri (иконка никогда не генерировалась для этой платформы); dev-узел Singapore (DEV_IP) переведён на порт 8443 вслед за прокси. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ import VpnControlButton from "@/components/shared/VpnControlButton";
|
||||
import { useTheme } from "@/ThemeProvider";
|
||||
import { useSettingsStore } from "@/store/useSettingsStore";
|
||||
import { useNodesStore } from "@/store/useNodesStore";
|
||||
import { useAuthStore } from "@/store/useAuthStore";
|
||||
import { getCachedToken } from "@/lib/api";
|
||||
|
||||
export function VpnControl() {
|
||||
@@ -17,12 +18,17 @@ export function VpnControl() {
|
||||
const { t } = useTranslation();
|
||||
const { killSwitch, excludedApps, excludedDomains } = useSettingsStore();
|
||||
const { getSelectedNode } = useNodesStore();
|
||||
const isLoggedIn = useAuthStore((s) => s.isLoggedIn);
|
||||
|
||||
// Подключаем тему
|
||||
const { isDark } = useTheme();
|
||||
const currentTheme = isDark ? "dark" : "light";
|
||||
|
||||
const handleToggle = async () => {
|
||||
// Защита на всякий случай — основной гейт на уровне роута ("/" рендерит
|
||||
// Login, а не Home, пока не вошли), но кнопка не должна работать даже
|
||||
// если это состояние как-то обошли.
|
||||
if (!isLoggedIn) return;
|
||||
try {
|
||||
if (status === "idle") {
|
||||
setStatus("connecting");
|
||||
@@ -91,8 +97,9 @@ export function VpnControl() {
|
||||
isOn={isActive}
|
||||
onClick={handleToggle}
|
||||
style={{
|
||||
pointerEvents: status === "connecting" ? "none" : "auto",
|
||||
opacity: status === "connecting" ? 0.8 : 1,
|
||||
pointerEvents: status === "connecting" || !isLoggedIn ? "none" : "auto",
|
||||
opacity: !isLoggedIn ? 0.4 : status === "connecting" ? 0.8 : 1,
|
||||
cursor: !isLoggedIn ? "not-allowed" : undefined,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user