From 138e81f967dc75ff841204678318c2dbb445cf04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 19 Jun 2026 12:17:27 +0200 Subject: [PATCH 1/5] manual wizard flow --- .../hooks/useTunnelWizardStore.tsx | 90 ++++++++++-- .../AdvancedSettingsStep.tsx | 113 ++++++++++++++- .../steps/FinishStep/FinishStep.tsx | 41 +++++- .../steps/FinishStep/assets/banner.png | Bin 0 -> 143811 bytes .../steps/FinishStep/style.scss | 28 ++++ .../GeneralInformationStep.tsx | 98 ++++++++++++- .../steps/KeysStep/KeysStep.tsx | 110 +++++++++++++- .../steps/KeysStep/style.scss | 9 ++ .../steps/VpnServerStep/VpnServerStep.tsx | 137 +++++++++++++++++- new-ui/src/shared/components/Split/Split.tsx | 22 +++ .../wizard/WizardPage/WizardPage.tsx | 20 ++- .../src/shared/utils/generateWGKeys copy.ts | 9 ++ new-ui/src/shared/utils/patterns.ts | 85 +++++++++++ 13 files changed, 737 insertions(+), 25 deletions(-) create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss create mode 100644 new-ui/src/shared/components/Split/Split.tsx create mode 100644 new-ui/src/shared/utils/generateWGKeys copy.ts create mode 100644 new-ui/src/shared/utils/patterns.ts diff --git a/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx index 6fd26bd03..2567a0ac8 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/hooks/useTunnelWizardStore.tsx @@ -3,35 +3,95 @@ import { TunnelWizardStep, type TunnelWizardStepValue } from '../types'; type StoreValues = { activeStep: TunnelWizardStepValue; + tunnelData: { + name: string; + pubkey: string; + prvkey: string; + address: string; + server_pubkey: string; + preshared_key: string; + allowed_ips?: string; + endpoint: string; + dns?: string; + persistent_keep_alive: number; + route_all_traffic: boolean; + pre_up?: string; + post_up?: string; + pre_down?: string; + post_down?: string; + }; }; const defaults: StoreValues = { activeStep: TunnelWizardStep.GeneralInformation, + tunnelData: { + name: '', + address: '', + endpoint: '', + persistent_keep_alive: 25, + preshared_key: '', + prvkey: '', + pubkey: '', + route_all_traffic: false, + server_pubkey: '', + allowed_ips: '', + dns: '', + post_down: '', + post_up: '', + pre_down: '', + pre_up: '', + }, +}; + +const nextStep = (step: TunnelWizardStepValue): TunnelWizardStepValue => { + switch (step) { + case TunnelWizardStep.GeneralInformation: + return TunnelWizardStep.Keys; + case TunnelWizardStep.Keys: + return TunnelWizardStep.VpnServer; + case TunnelWizardStep.VpnServer: + return TunnelWizardStep.AdvancedSettings; + case TunnelWizardStep.AdvancedSettings: + return TunnelWizardStep.Finish; + default: + return step; + } }; -const STEPS: TunnelWizardStepValue[] = [ - TunnelWizardStep.GeneralInformation, - TunnelWizardStep.Keys, - TunnelWizardStep.VpnServer, - TunnelWizardStep.AdvancedSettings, - TunnelWizardStep.Finish, -]; +const prevStep = (step: TunnelWizardStepValue): TunnelWizardStepValue => { + switch (step) { + case TunnelWizardStep.Keys: + return TunnelWizardStep.GeneralInformation; + case TunnelWizardStep.VpnServer: + return TunnelWizardStep.Keys; + case TunnelWizardStep.AdvancedSettings: + return TunnelWizardStep.VpnServer; + case TunnelWizardStep.Finish: + return TunnelWizardStep.AdvancedSettings; + default: + return step; + } +}; interface Store extends StoreValues { - next: () => void; - back: () => void; + next: (values?: Partial) => void; + back: (values?: Partial) => void; reset: () => void; } export const useTunnelWizardStore = create()((set, get) => ({ ...defaults, - next: () => { - const idx = STEPS.indexOf(get().activeStep); - if (idx < STEPS.length - 1) set({ activeStep: STEPS[idx + 1] }); + next: (tunnelData) => { + set({ + activeStep: nextStep(get().activeStep), + tunnelData: { ...get().tunnelData, ...tunnelData }, + }); }, - back: () => { - const idx = STEPS.indexOf(get().activeStep); - if (idx > 0) set({ activeStep: STEPS[idx - 1] }); + back: (tunnelData) => { + set({ + activeStep: prevStep(get().activeStep), + tunnelData: { ...get().tunnelData, ...tunnelData }, + }); }, reset: () => set(defaults), })); diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx index 5ade7c89b..51375de12 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/AdvancedSettingsStep/AdvancedSettingsStep.tsx @@ -1 +1,112 @@ -export const AdvancedSettingsStep = () =>
Advanced Settings
; +import { useMutation } from '@tanstack/react-query'; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { Split } from '../../../../../shared/components/Split/Split'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { api } from '../../../../../shared/rust-api/api'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + pre_up: z.string(), + post_up: z.string(), + pre_down: z.string(), + post_down: z.string(), +}); + +type FormFields = z.infer; + +export const AdvancedSettingsStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const { mutateAsync } = useMutation({ mutationFn: api.saveTunnel }); + + const defaultValues = useMemo( + (): FormFields => ({ + pre_up: initData.pre_up ?? '', + post_up: initData.post_up ?? '', + pre_down: initData.pre_down ?? '', + post_down: initData.post_down ?? '', + }), + [initData.pre_up, initData.post_up, initData.pre_down, initData.post_down], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: async ({ value }) => { + const storeValues = useTunnelWizardStore.getState().tunnelData; + const toSend = { ...storeValues, ...value }; + await mutateAsync(toSend); + useTunnelWizardStore.getState().next(); + }, + }); + + return ( +
+
+

Advanced settings (optional)

+ +

+ Define optional shell commands to run before or after the tunnel interface is + brought up or down. Useful for custom routing rules, firewall adjustments, or + other network configuration. +

+
+ +
{ + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + {(field) => } + + + {(field) => } + + + + + + {(field) => } + + + {(field) => } + + + +
+ +
+ + + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx index ae8ed27e8..ef3a656eb 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/FinishStep.tsx @@ -1 +1,40 @@ -export const FinishStep = () =>
Finish
; +import './style.scss'; + +import { useNavigate } from '@tanstack/react-router'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; +import bannerSrc from './assets/banner.png'; + +export const FinishStep = () => { + const navigate = useNavigate(); + + return ( +
+
+ +
+

Your WireGuard tunnel added successfully

+

You can now connect this device, check its status and view statistics.

+
+
+
+ ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..001974a7492f15361abed611595f828450940bf3 GIT binary patch literal 143811 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

REGss=YWmR&NR-tm|R6%oa}?C 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®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
kNU&&+_C_j$3}x3GXW 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 MDo>QF6|KVl538iStN;K2 literal 0 HcmV?d00001 diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss new file mode 100644 index 000000000..acc13e86c --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/FinishStep/style.scss @@ -0,0 +1,28 @@ +#finish-step { + .banner { + box-sizing: border-box; + padding-bottom: var(--spacing-3xl); + } + + h1 { + font: var(--t-h4); + color: var(--fg-white-100); + padding-bottom: var(--spacing-sm); + user-select: none; + } + + > p { + user-select: none; + font: var(--t-small-400); + color: var(--fg-white-70); + padding-bottom: var(--spacing-lg); + } + + > .actions { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-md); + } +} diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx index 367887bb5..fa56df7ba 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx @@ -1 +1,97 @@ -export const GeneralInformationStep = () =>
General Information
; +import { useNavigate } from '@tanstack/react-router'; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { patternValidIp, patternValidIpV6 } from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + name: z.string().trim().min(1, 'Field is required'), + address: z.string().refine((value) => { + if (value) { + const ips = value.split(',').map((ip) => ip.trim()); + return ips.every((ip) => patternValidIp.test(ip) || patternValidIpV6.test(ip)); + } + return false; + }, 'Field is invalid'), +}); + +type FormFields = z.infer; + +export const GeneralInformationStep = () => { + const navigate = useNavigate(); + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const defaultValues = useMemo( + (): FormFields => ({ + address: initData.address, + name: initData.name, + }), + [initData.address, initData.name], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
+
+

General information

+ +

{`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

+
+ +
{ + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + {(field) => } + + + + {(field) => } + + +
+ +
+ + + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx index d3298b2b5..b32b7c987 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/KeysStep.tsx @@ -1 +1,109 @@ -export const KeysStep = () =>
Keys
; +import './style.scss'; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../../../shared/components/TooltipButton/TooltipButton'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { generateWGKeys } from '../../../../../shared/utils/generateWGKeys'; +import { patternValidWireguardKey } from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + prvkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + pubkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), +}); + +type FormFields = z.infer; + +export const KeysStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const defaultValues = useMemo( + (): FormFields => ({ + prvkey: initData.prvkey, + pubkey: initData.pubkey, + }), + [initData.prvkey, initData.pubkey], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
+
+

Keys

+ +

{`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

+
+ +
{ + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + {(field) => } + + + + {(field) => } + + +
+ { + const pair = generateWGKeys(); + form.setFieldValue('prvkey', pair.privateKey); + form.setFieldValue('pubkey', pair.publicKey); + }, + }} + tooltipText="New keys set" + /> +
+
+
+ +
+ + + ); +}; diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss new file mode 100644 index 000000000..385f8b46a --- /dev/null +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/KeysStep/style.scss @@ -0,0 +1,9 @@ +#keys-step { + .actions { + width: 100%; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-end; + } +} diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx index 603fe379c..e65d9af0b 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/VpnServerStep/VpnServerStep.tsx @@ -1 +1,136 @@ -export const VpnServerStep = () =>
VPN Server
; +import { useMemo } from 'react'; +import z from 'zod'; +import { Button } from '../../../../../shared/components/Button/Button'; +import { ButtonVariant } from '../../../../../shared/components/Button/types'; +import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { Split } from '../../../../../shared/components/Split/Split'; +import { useAppForm } from '../../../../../shared/form'; +import { formChangeLogic } from '../../../../../shared/formLogic'; +import { ThemeSpacing } from '../../../../../shared/types'; +import { + cidrRegex, + patternValidEndpoint, + patternValidWireguardKey, +} from '../../../../../shared/utils/patterns'; +import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; + +const formSchema = z.object({ + server_pubkey: z + .string() + .refine((v) => patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + preshared_key: z + .string() + .refine((v) => !v || patternValidWireguardKey.test(v), 'Invalid WireGuard key'), + endpoint: z.string().refine((v) => patternValidEndpoint.test(v), 'Invalid address'), + dns: z.string(), + allowed_ips: z.string().refine((v) => { + if (!v) return true; + return v + .split(',') + .map((s) => s.trim()) + .every((cidr) => cidrRegex.test(cidr)); + }, 'Invalid CIDR notation'), + persistent_keep_alive: z.number().int().min(0), +}); + +type FormFields = z.infer; + +export const VpnServerStep = () => { + const initData = useTunnelWizardStore((s) => s.tunnelData); + + const defaultValues = useMemo( + (): FormFields => ({ + server_pubkey: initData.server_pubkey, + preshared_key: initData.preshared_key, + endpoint: initData.endpoint, + dns: initData.dns ?? '', + allowed_ips: initData.allowed_ips ?? '', + persistent_keep_alive: initData.persistent_keep_alive, + }), + [ + initData.server_pubkey, + initData.preshared_key, + initData.endpoint, + initData.dns, + initData.allowed_ips, + initData.persistent_keep_alive, + ], + ); + + const form = useAppForm({ + defaultValues, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: ({ value }) => { + useTunnelWizardStore.getState().next(value); + }, + }); + + return ( +
+
+

VPN Server

+ +

{`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

+
+ +
{ + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + {(field) => } + + + {(field) => } + + + + + + {(field) => } + + + {(field) => } + + + + + {(field) => ( + + )} + + + + {(field) => } + + +
+ +
+ + + ); +}; diff --git a/new-ui/src/shared/components/Split/Split.tsx b/new-ui/src/shared/components/Split/Split.tsx new file mode 100644 index 000000000..daea8804a --- /dev/null +++ b/new-ui/src/shared/components/Split/Split.tsx @@ -0,0 +1,22 @@ +import type { CSSProperties, PropsWithChildren } from 'react'; +import { ThemeSpacing, type ThemeSpacingValue } from '../../types'; + +type Props = PropsWithChildren<{ + split?: number; + spacing?: ThemeSpacingValue; +}>; + +export const Split = ({ children, split = 2, spacing = ThemeSpacing.Sm }: Props) => { + const style: CSSProperties = { + display: 'grid', + gridTemplateColumns: `repeat(${split}, 1fr)`, + columnGap: spacing, + width: '100%', + }; + + return ( +
+ {children} +
+ ); +}; diff --git a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx index 8fb4d8def..3e5537dae 100644 --- a/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx +++ b/new-ui/src/shared/components/wizard/WizardPage/WizardPage.tsx @@ -1,4 +1,10 @@ -import { type HTMLProps, type PropsWithChildren, Suspense, useMemo } from 'react'; +import { + Fragment, + type HTMLProps, + type PropsWithChildren, + Suspense, + useMemo, +} from 'react'; import './style.scss'; import clsx from 'clsx'; import { sort } from 'radashi'; @@ -47,10 +53,14 @@ export const WizardPage = ({
-
-

{`Step ${activeStepIndex + 1} of ${visibleSteps.length}`}

-
- + {activeStepIndex !== visibleSteps.length - 1 && ( + +
+

{`Step ${activeStepIndex + 1} of ${visibleSteps.length}`}

+
+ +
+ )} }>{children}
diff --git a/new-ui/src/shared/utils/generateWGKeys copy.ts b/new-ui/src/shared/utils/generateWGKeys copy.ts new file mode 100644 index 000000000..6e9818559 --- /dev/null +++ b/new-ui/src/shared/utils/generateWGKeys copy.ts @@ -0,0 +1,9 @@ +import { encode } from '@stablelib/base64'; +import { generateKeyPair } from '@stablelib/x25519'; + +export const generateWGKeys = () => { + const keys = generateKeyPair(); + const publicKey = encode(keys.publicKey); + const privateKey = encode(keys.secretKey); + return { publicKey, privateKey }; +}; diff --git a/new-ui/src/shared/utils/patterns.ts b/new-ui/src/shared/utils/patterns.ts new file mode 100644 index 000000000..0dc65fbba --- /dev/null +++ b/new-ui/src/shared/utils/patterns.ts @@ -0,0 +1,85 @@ +/* eslint-disable no-useless-escape */ +export const patternNoSpecialChars = /^\w+$/; + +export const patternDigitOrLowercase = /^[0-9a-z]+$/g; + +export const patternValidEmail = + // eslint-disable-next-line max-len + /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g; + +export const patternAtLeastOneUpperCaseChar = /(?=.*?[A-Z])/g; + +export const patternAtLeastOneLowerCaseChar = /(?=.*?[a-z])/g; + +export const patternAtLeastOneDigit = /(?=.*?[0-9])/g; + +export const patternStartsWithDigit = /^\d/; + +export const patternAtLeastOneSpecialChar = /(?=.*?[#?!@$%^&*-])/g; + +export const patternValidPhoneNumber = + /^(\+?\d{1,3}\s?)?(\(\d{1,3}\)|\d{1,3})[-\s]?\d{1,4}[-\s]?\d{1,4}?$/; + +export const patternValidWireguardKey = + /^[A-Za-z0-9+/]{42}[A|E|I|M|Q|U|Y|c|g|k|o|s|w|4|8|0]=$/; + +export const patternBaseUrl = /:\/\/(.[^/]+)/; + +// https://gist.github.com/dperini/729294 +export const patternValidUrl = new RegExp( + '^' + + // protocol identifier (optional) + // short syntax // still required + '(?:(?:(?:https?):)?\\/\\/)' + + // user:pass BasicAuth (optional) + '(?:\\S+(?::\\S*)?@)?' + + '(?:' + + // IP address dotted notation octets + // excludes loopback network 0.0.0.0 + // excludes reserved space >= 224.0.0.0 + // excludes network & broadcast addresses + // (first & last IP address of each class) + '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + + '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + + '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + + '|' + + // host & domain names, may end with dot + // can be replaced by a shortest alternative + // (?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.)+ + '(?:' + + '(?:' + + '[a-z0-9\\u00a1-\\uffff]' + + '[a-z0-9\\u00a1-\\uffff_-]{0,62}' + + ')?' + + '[a-z0-9\\u00a1-\\uffff]\\.' + + ')+' + + // TLD identifier name, may end with dot + '(?:[a-z\\u00a1-\\uffff]{2,}\\.?)' + + ')' + + // port number (optional) + '(?::\\d{2,5})?' + + // resource path (optional) + '(?:[/?#]\\S*)?' + + '$', + 'i', +); + +export const patternValidDomain = + /^(?:(?:(?:[a-zA-z-]+):\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9\-.]){1,61}(?:\.[a-zA-Z]{2,})+|\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\]|(?:(?:[0-9]{1,3})(?:\.[0-9]{1,3}){3}))(?::[0-9]{1,5})?$/; + +export const patternValidIp = + /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\/32)?$/; + +export const cidrRegex = + /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:.]+\/\d{1,3})$/; +// Regular expression to match IPv4, IPv6, domain name, or localhost with port +export const patternValidEndpoint = + /^(localhost|\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b|\b(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b)(?::(\d+))?$/; + +// Copied from zod source code and added optional mask at the end to match WireguardRequirements +export const patternValidIpV6 = + /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(?:\/128)?$/; + +// Reuse pattern from above to support format [ipv6]:port +export const patternValidIpV6WithPort = + /^\[((([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))(\/128)?)\]:(\d{1,5})$/; From 8ae5bf92e78d668f28d4e696d776b5dbd2758777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 19 Jun 2026 12:40:10 +0200 Subject: [PATCH 2/5] import tunnel config file --- .../GeneralInformationStep.tsx | 55 ++++++++++++++++++- .../steps/GeneralInformationStep/style.scss | 7 +++ new-ui/src/shared/rust-api/api.ts | 9 ++- 3 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/style.scss diff --git a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx index fa56df7ba..e686e7484 100644 --- a/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx +++ b/new-ui/src/pages/full/TunnelWizardPage/steps/GeneralInformationStep/GeneralInformationStep.tsx @@ -1,13 +1,21 @@ +import './style.scss'; +import { useMutation } from '@tanstack/react-query'; import { useNavigate } from '@tanstack/react-router'; -import { useMemo } from 'react'; +import { open } from '@tauri-apps/plugin-dialog'; +import { readFile } from '@tauri-apps/plugin-fs'; +import { useMemo, useRef } from 'react'; +import { Subject } from 'rxjs'; import z from 'zod'; import { Button } from '../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; import { Divider } from '../../../../../shared/components/Divider/Divider'; +import { IconKind } from '../../../../../shared/components/Icon'; import { SizedBox } from '../../../../../shared/components/SizedBox/SizedBox'; +import { TooltipButton } from '../../../../../shared/components/TooltipButton/TooltipButton'; import { useAppForm } from '../../../../../shared/form'; import { formChangeLogic } from '../../../../../shared/formLogic'; +import { api } from '../../../../../shared/rust-api/api'; import { ThemeSpacing } from '../../../../../shared/types'; import { patternValidIp, patternValidIpV6 } from '../../../../../shared/utils/patterns'; import { useTunnelWizardStore } from '../../hooks/useTunnelWizardStore'; @@ -29,6 +37,36 @@ export const GeneralInformationStep = () => { const navigate = useNavigate(); const initData = useTunnelWizardStore((s) => s.tunnelData); + const { mutate: importTunnelFile, isPending } = useMutation({ + mutationFn: async () => { + const filePath = await open({ + multiple: false, + directory: false, + filters: [{ name: 'wg-conf', extensions: ['conf', 'txt', 'config'] }], + }); + if (filePath) { + const decoder = new TextDecoder(); + const fileContents = await readFile(filePath); + const fileString = decoder.decode(fileContents); + const config = await api.parseTunnelConfig({ + filename: filePath, + config: fileString, + }); + const current = useTunnelWizardStore.getState().tunnelData; + useTunnelWizardStore.setState({ tunnelData: { ...current, ...config } }); + if (config.name) { + form.setFieldValue('name', config.name); + } + if (config.address) { + form.setFieldValue('address', config.address); + } + importTooltipRef.current.next(); + } + }, + }); + + const importTooltipRef = useRef(new Subject()); + const defaultValues = useMemo( (): FormFields => ({ address: initData.address, @@ -55,6 +93,21 @@ export const GeneralInformationStep = () => {

General information

{`Upload your config file (optional) and we'll securely extract the connection settings for you. This is the fastest and recommended way to get started.`}

+
+ { + importTunnelFile(); + }, + }} + tooltipText="Config file applied" + tooltipTrigger={importTooltipRef.current} + /> +
=> invoke(TauriCommand.AllTunnels const getTunnelDetails = (tunnelId: number): Promise => invoke(TauriCommand.TunnelDetails, { tunnelId }); -const parseTunnelConfig = ( - filename: string, - config: string, -): Promise> => - invoke(TauriCommand.ParseTunnelConfig, { filename, config }); +const parseTunnelConfig = (data: { + filename: string; + config: string; +}): Promise> => invoke(TauriCommand.ParseTunnelConfig, data); const saveTunnel = (tunnel: TunnelRequest): Promise => invoke(TauriCommand.SaveTunnel, { tunnel }); From 23ee5e03cf86922bab40b52ee82de76f3f678d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 19 Jun 2026 13:49:03 +0200 Subject: [PATCH 3/5] fix mfa preference desync after polling change --- .../CompactLocationsPage.tsx | 30 ++++---- .../components/InstanceSwitcher.tsx | 12 +--- .../pages/full/OverviewPage/OverviewPage.tsx | 36 ++++++---- .../OverviewSelection/OverviewSelection.tsx | 11 ++- new-ui/src/routes/compact/index.tsx | 10 +-- new-ui/src/routes/full/_default/overview.tsx | 8 +-- new-ui/src/shared/rust-api/types.ts | 7 +- src-tauri/core/src/events.rs | 2 + .../enterprise/config-sync/src/commands.rs | 4 +- src-tauri/src/bin/defguard-client.rs | 33 ++++++++- src-tauri/src/commands.rs | 10 ++- src-tauri/src/enterprise/periodic/config.rs | 8 ++- src-tauri/src/session_state.rs | 72 +++++++++++++++++-- 13 files changed, 177 insertions(+), 66 deletions(-) diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index 8bba51700..b3ba5f683 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -27,34 +27,38 @@ export const CompactLocationsPage = () => { const routeData = useLoaderData({ from: '/compact/' }); + const { data: instances } = useQuery(getInstancesQueryOptions); + + const allInstances = instances ?? routeData.instances; + const allTunnels = routeData.tunnels; + const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return routeData.instances[0].id; - if (selection.kind === 'instance') return selection.data.id; - return selection.data.instance_id; - }, [selection, routeData.instances]); + if (selection.kind === 'instance') return selection.id; + return allTunnels.find((t) => t.id === selection.id)?.instance_id ?? routeData.instances[0].id; + }, [selection, routeData.instances, allTunnels]); const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); - const { data: instances } = useQuery(getInstancesQueryOptions); - const instanceInfo = useMemo(() => { - const allInstances = instances ?? routeData.instances; if (!isPresent(selection)) return allInstances[0]; - if (selection.kind === 'instance') - return allInstances.find((i) => i.id === selection.data.id); - return allInstances.find((i) => i.id === selection.data.instance_id); - }, [selection, instances, routeData.instances]); + if (selection.kind === 'instance') return allInstances.find((i) => i.id === selection.id); + const tunnel = allTunnels.find((t) => t.id === selection.id); + return tunnel ? allInstances.find((i) => i.id === tunnel.instance_id) : undefined; + }, [selection, allInstances, allTunnels]); const displayedLocations = useMemo(() => { if (!isPresent(selection) || selection.kind === 'instance') { return locations ?? routeData.locations; } - return [selection.data]; - }, [selection, locations, routeData.locations]); + const tunnel = allTunnels.find((t) => t.id === selection.id); + return tunnel ? [tunnel] : []; + }, [selection, locations, routeData.locations, allTunnels]); useEffect(() => { + if (selection?.kind === 'tunnel') return; if (selection === null || instanceInfo === undefined) { - setViewSelection({ kind: 'instance', data: routeData.instances[0] }); + setViewSelection({ kind: 'instance', id: routeData.instances[0].id }); } }, [routeData.instances, instanceInfo, selection, setViewSelection]); diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx index 87eff3ec2..2ef6f6532 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -28,7 +28,7 @@ export const InstanceSwitcher = () => { options: instances.map((instance) => ({ key: instance.id, label: instance.name, - value: { kind: 'instance', data: instance }, + value: { kind: 'instance', id: instance.id }, })), }; @@ -38,7 +38,7 @@ export const InstanceSwitcher = () => { options: tunnels.map((tunnel) => ({ key: tunnel.id ?? tunnel.name, label: tunnel.name, - value: { kind: 'tunnel', data: tunnel }, + value: { kind: 'tunnel', id: tunnel.id }, })), }; @@ -54,13 +54,7 @@ export const InstanceSwitcher = () => { if (!isPresent(selectedInstance)) return undefined; for (const group of groups) { const found = group.options.find((o) => { - if (selectedInstance.kind === 'instance' && o.value.kind === 'instance') { - return o.value.data.id === selectedInstance.data.id; - } - if (selectedInstance.kind === 'tunnel' && o.value.kind === 'tunnel') { - return o.value.data.id === selectedInstance.data.id; - } - return false; + return o.value.kind === selectedInstance.kind && o.value.id === selectedInstance.id; }); if (found) return found; } diff --git a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx index 50f3ae7b5..c7e8eb46a 100644 --- a/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx +++ b/new-ui/src/pages/full/OverviewPage/OverviewPage.tsx @@ -24,11 +24,27 @@ export const OverviewPage = () => { const { instances, tunnels } = useAppData(); const { viewSelection: selection } = useAppData(); + const selectedTunnel = useMemo( + () => + selection?.kind === 'tunnel' + ? tunnels.find((t) => t.id === selection.id) + : undefined, + [selection, tunnels], + ); + + const selectedInstance = useMemo( + () => + selection?.kind === 'instance' + ? instances.find((i) => i.id === selection.id) + : undefined, + [selection, instances], + ); + const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return instances[0].id; - if (selection.kind === 'instance') return selection.data.id; - return selection.data.instance_id; - }, [selection, instances]); + if (selection.kind === 'instance') return selection.id; + return selectedTunnel?.instance_id ?? instances[0].id; + }, [selection, instances, selectedTunnel]); const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); @@ -36,8 +52,8 @@ export const OverviewPage = () => { if (!isPresent(selection) || selection.kind === 'instance') { return locations ?? []; } - return [selection.data]; - }, [selection, locations]); + return selectedTunnel ? [selectedTunnel] : []; + }, [selection, locations, selectedTunnel]); // biome-ignore lint/correctness/useExhaustiveDependencies: side effect only relevant on selection useEffect(() => { @@ -79,18 +95,14 @@ export const OverviewPage = () => {
- {selection?.kind === 'instance' && ( - - )} + {selectedInstance && }
{displayedLocations.map((location) => { - let instance: InstanceInfo | undefined; - if (selection?.kind === 'instance') { - instance = selection.data; - } + const instance: InstanceInfo | undefined = + selection?.kind === 'instance' ? selectedInstance : undefined; return ( { const isSelected = (candidate: OverviewViewSelection): boolean => { if (!selection) return false; - if (candidate.kind !== selection.kind) return false; - return candidate.data.id === selection.data.id; + return candidate.kind === selection.kind && candidate.id === selection.id; }; return ( @@ -44,10 +43,10 @@ export const OverviewSelection = ({ instances, tunnels }: Props) => {

Instances

{instances.map((instance) => { - const value: OverviewViewSelection = { kind: 'instance', data: instance }; + const value: OverviewViewSelection = { kind: 'instance', id: instance.id }; return ( setSelection(value)} @@ -62,10 +61,10 @@ export const OverviewSelection = ({ instances, tunnels }: Props) => {

Tunnels

{tunnels.map((tunnel) => { - const value: OverviewViewSelection = { kind: 'tunnel', data: tunnel }; + const value: OverviewViewSelection = { kind: 'tunnel', id: tunnel.id }; return ( setSelection(value)} diff --git a/new-ui/src/routes/compact/index.tsx b/new-ui/src/routes/compact/index.tsx index 5f302f0b8..566d5a428 100644 --- a/new-ui/src/routes/compact/index.tsx +++ b/new-ui/src/routes/compact/index.tsx @@ -29,18 +29,18 @@ export const Route = createFileRoute('/compact/')({ if (stored === null) { storedIsValid = false; } else if (stored.kind === 'instance') { - storedIsValid = instances.some((i) => i.id === stored.data.id); + storedIsValid = instances.some((i) => i.id === stored.id); } else { - storedIsValid = tunnels.some((t) => t.id === stored.data.id); + storedIsValid = tunnels.some((t) => t.id === stored.id); } let selected: OverviewViewSelection; if (storedIsValid && stored !== null) { selected = stored; } else if (instances.length > 0) { - selected = { kind: 'instance', data: instances[0] }; + selected = { kind: 'instance', id: instances[0].id }; } else { - selected = { kind: 'tunnel', data: tunnels[0] }; + selected = { kind: 'tunnel', id: tunnels[0].id }; } if (!storedIsValid) { @@ -51,7 +51,7 @@ export const Route = createFileRoute('/compact/')({ let locations: LocationInfo[]; if (selected.kind === 'instance') { locations = await context.queryClient.fetchQuery( - getLocationsQueryOptions(selected.data.id), + getLocationsQueryOptions(selected.id), ); } else { locations = []; diff --git a/new-ui/src/routes/full/_default/overview.tsx b/new-ui/src/routes/full/_default/overview.tsx index 4c4341386..c083fd449 100644 --- a/new-ui/src/routes/full/_default/overview.tsx +++ b/new-ui/src/routes/full/_default/overview.tsx @@ -27,16 +27,16 @@ export const Route = createFileRoute('/full/_default/overview')({ if (stored === null) { storedIsValid = false; } else if (stored.kind === 'instance') { - storedIsValid = instances.some((i) => i.id === stored.data.id); + storedIsValid = instances.some((i) => i.id === stored.id); } else { - storedIsValid = tunnels.some((t) => t.id === stored.data.id); + storedIsValid = tunnels.some((t) => t.id === stored.id); } if (!storedIsValid) { const selected = instances.length > 0 - ? { kind: 'instance' as const, data: instances[0] } - : { kind: 'tunnel' as const, data: tunnels[0] }; + ? { kind: 'instance' as const, id: instances[0].id } + : { kind: 'tunnel' as const, id: tunnels[0].id }; await api.patchSessionState({ view_selection: selected }); await context.queryClient.invalidateQueries({ queryKey: ['session-state'] }); } diff --git a/new-ui/src/shared/rust-api/types.ts b/new-ui/src/shared/rust-api/types.ts index 3912cbe74..b7823393b 100644 --- a/new-ui/src/shared/rust-api/types.ts +++ b/new-ui/src/shared/rust-api/types.ts @@ -368,9 +368,10 @@ export type SetLocationMfaMethodArgs = { mfaMethod: MfaMethodValue; }; -export type OverviewViewSelection = - | { kind: 'instance'; data: InstanceInfo } - | { kind: 'tunnel'; data: LocationInfo }; +export type OverviewViewSelection = { + kind: 'instance' | 'tunnel'; + id: number; +}; /** Mirrors `SessionState` in src/session_state.rs. Fields are snake_case (raw serde output). */ export type SessionState = { diff --git a/src-tauri/core/src/events.rs b/src-tauri/core/src/events.rs index cc8802a24..71f859e31 100644 --- a/src-tauri/core/src/events.rs +++ b/src-tauri/core/src/events.rs @@ -16,6 +16,7 @@ pub enum EventKey { UuidMismatch, WindowSwapped, SessionStateChanged, + InstanceUpdated, } impl From for &'static str { @@ -35,6 +36,7 @@ impl From for &'static str { EventKey::UuidMismatch => "uuid-mismatch", EventKey::WindowSwapped => "window-swapped", EventKey::SessionStateChanged => "session-state-changed", + EventKey::InstanceUpdated => "instance-updated", } } } diff --git a/src-tauri/enterprise/config-sync/src/commands.rs b/src-tauri/enterprise/config-sync/src/commands.rs index 7eb4a4726..f74fc8b47 100644 --- a/src-tauri/enterprise/config-sync/src/commands.rs +++ b/src-tauri/enterprise/config-sync/src/commands.rs @@ -49,7 +49,7 @@ pub async fn do_update_instance( transaction: &mut Transaction<'_, Sqlite>, instance: &mut Instance, response: DeviceConfigResponse, -) -> Result<(), Error> { +) -> Result { debug!("Updating instance {instance}"); let locations_changed_val = locations_changed(transaction, instance, &response).await?; let instance_info = response @@ -232,7 +232,7 @@ pub async fn do_update_instance( } } - Ok(()) + Ok(locations_changed_val) } pub async fn disable_enterprise_features<'e, E>( diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index f8b1687e5..00921cd17 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -24,7 +24,7 @@ use defguard_client::{ DB_POOL, }, enterprise::provisioning::handle_client_initialization, - events::handle_deep_link, + events::{handle_deep_link, EventKey}, periodic::run_periodic_tasks, service, session_state, tray::{configure_tray_icon, setup_tray}, @@ -34,7 +34,7 @@ use defguard_client::{ }; use defguard_client_core::connection::active_connections::close_all_connections; use log::{Level, LevelFilter}; -use tauri::{async_runtime, AppHandle, Builder, Manager, RunEvent, WindowEvent}; +use tauri::{async_runtime, AppHandle, Builder, Emitter, Listener, Manager, RunEvent, WindowEvent}; use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_log::{Target, TargetKind}; @@ -48,6 +48,35 @@ const LOGGING_TARGET_IGNORE_LIST: [&str; 5] = ["tauri", "sqlx", "hyper", "h2", " static LOG_INCLUDES: LazyLock> = LazyLock::new(load_log_targets); async fn startup(app_handle: &AppHandle) { + // When instance locations change, re-validate MFA preferences and update session state. + { + let handle = app_handle.clone(); + app_handle.listen(Into::<&'static str>::into(EventKey::InstanceUpdated), move |_| { + let handle = handle.clone(); + async_runtime::spawn(async move { + let app_state = handle.state::(); + let preference = match app_state.session_state.lock() { + Ok(guard) => guard.location_mfa_preference.clone(), + Err(err) => { + error!("Session state mutex poisoned during MFA preference validation: {err}"); + return; + } + }; + match session_state::validate_location_mfa_preference(&*DB_POOL, preference).await { + Ok(validated) => { + if let Ok(mut guard) = app_state.session_state.lock() { + guard.location_mfa_preference = validated; + } + if let Err(err) = handle.emit(EventKey::SessionStateChanged.into(), ()) { + error!("Failed to emit session-state-changed after MFA preference validation: {err}"); + } + } + Err(err) => error!("Failed to validate location MFA preference: {err}"), + } + }); + }); + } + debug!("Purging old stats from the database."); if let Err(err) = LocationStats::purge(&*DB_POOL).await { error!("Failed to purge location stats: {err}"); diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 06968dc1a..494f9476d 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -660,9 +660,15 @@ pub async fn update_instance( if let Some(mut instance) = Instance::find_by_id(&*DB_POOL, instance_id).await? { debug!("The instance with id {instance_id} to update was found: {instance}"); let mut transaction = DB_POOL.begin().await?; - do_update_instance(&mut transaction, &mut instance, response).await?; + let locations_changed = + do_update_instance(&mut transaction, &mut instance, response).await?; transaction.commit().await?; + if locations_changed { + if let Err(err) = app_handle.emit(EventKey::InstanceUpdated.into(), ()) { + error!("Failed to emit instance-updated event: {err}"); + } + } app_handle .emit(EventKey::InstanceUpdate.into(), ()) .map_err(crate::tauri_err_to_app_err)?; @@ -1006,7 +1012,7 @@ pub async fn save_tunnel(tunnel: Tunnel, handle: AppHandle) -> Result<(), Ok(()) } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] pub struct TunnelInfo { pub id: I, pub name: String, diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index 303c17739..4a0b48aee 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -164,11 +164,17 @@ pub async fn poll_instance( "Updating instance {}({}) configuration: {device_config:?}", instance.name, instance.id, ); - do_update_instance(transaction, instance, device_config.clone()).await?; + let locations_changed = + do_update_instance(transaction, instance, device_config.clone()).await?; info!( "Updated instance {}({}) configuration based on core's response", instance.name, instance.id ); + if locations_changed { + if let Err(err) = handle.emit(EventKey::InstanceUpdated.into(), ()) { + error!("Failed to emit instance-updated event: {err}"); + } + } } else { debug!( "Emitting config-changed event for instance {}({})", diff --git a/src-tauri/src/session_state.rs b/src-tauri/src/session_state.rs index 3866ce46a..6f6c1e5dc 100644 --- a/src-tauri/src/session_state.rs +++ b/src-tauri/src/session_state.rs @@ -5,22 +5,27 @@ use struct_patch::Patch; use tauri::{AppHandle, Emitter, Manager, State}; use defguard_client_core::{ - database::models::{instance::InstanceInfo, location::LocationMfaMethod, Id}, + database::models::location::{LocationMfaMethod, LocationMfaMode}, events::EventKey, }; use crate::{ appstate::AppState, - commands::LocationInfo, - database::{models::location::Location, DB_POOL}, + database::{models::location::Location, DbPool, DB_POOL}, error::Error, }; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -#[serde(tag = "kind", content = "data", rename_all = "lowercase")] -pub enum OverviewViewSelection { - Instance(InstanceInfo), - Tunnel(LocationInfo), +#[serde(rename_all = "lowercase")] +pub enum ViewSelectionKind { + Instance, + Tunnel, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct OverviewViewSelection { + pub kind: ViewSelectionKind, + pub id: i64, } #[derive(Clone, Debug, Default, Deserialize, Patch, Serialize)] @@ -30,6 +35,59 @@ pub struct SessionState { pub location_mfa_preference: HashMap, } +// verifies integrity of the mfa preference in session, this needs to be ran on location update so polling doesn't break the session store +pub async fn validate_location_mfa_preference( + pool: &DbPool, + mut preference: HashMap, +) -> Result, Error> { + if preference.is_empty() { + return Ok(preference); + } + + let ids: Vec = preference.keys().filter_map(|k| k.parse().ok()).collect(); + + if ids.is_empty() { + preference.clear(); + return Ok(preference); + } + + let placeholders = (0..ids.len()).map(|_| "?").collect::>().join(","); + let sql = format!("SELECT id, location_mfa_mode FROM location WHERE id IN ({placeholders})"); + let mut q = sqlx::query_as::<_, (i64, LocationMfaMode)>(&sql); + for id in &ids { + q = q.bind(*id); + } + let rows = q.fetch_all(pool).await?; + + let mut found = std::collections::HashSet::with_capacity(rows.len()); + for (id, mfa_mode) in rows { + let key = id.to_string(); + found.insert(key.clone()); + match mfa_mode { + LocationMfaMode::Disabled => { + preference.remove(&key); + } + LocationMfaMode::External => { + preference.insert(key, LocationMfaMethod::Oidc); + } + LocationMfaMode::Internal => { + if let Some(m) = preference.get(&key) { + match m { + LocationMfaMethod::Totp + | LocationMfaMethod::Email + | LocationMfaMethod::MobileApprove => {} + _ => { + preference.insert(key, LocationMfaMethod::Totp); + } + } + } + } + } + } + preference.retain(|k, _| found.contains(k)); + Ok(preference) +} + pub async fn initialize_session_state() -> Result { let locations = Location::all(&*DB_POOL, false).await?; let location_mfa_preference = locations From 766a0b371eb469bf12f3b69d1339b02e8d0a7123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 19 Jun 2026 13:51:43 +0200 Subject: [PATCH 4/5] resolve conflict --- .../compact/CompactLocationsPage/CompactLocationsPage.tsx | 8 ++++++-- .../CompactLocationsPage/components/InstanceSwitcher.tsx | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx index b3ba5f683..002408fca 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx @@ -35,14 +35,18 @@ export const CompactLocationsPage = () => { const queryInstanceId = useMemo(() => { if (!isPresent(selection)) return routeData.instances[0].id; if (selection.kind === 'instance') return selection.id; - return allTunnels.find((t) => t.id === selection.id)?.instance_id ?? routeData.instances[0].id; + return ( + allTunnels.find((t) => t.id === selection.id)?.instance_id ?? + routeData.instances[0].id + ); }, [selection, routeData.instances, allTunnels]); const { data: locations } = useQuery(getLocationsQueryOptions(queryInstanceId)); const instanceInfo = useMemo(() => { if (!isPresent(selection)) return allInstances[0]; - if (selection.kind === 'instance') return allInstances.find((i) => i.id === selection.id); + if (selection.kind === 'instance') + return allInstances.find((i) => i.id === selection.id); const tunnel = allTunnels.find((t) => t.id === selection.id); return tunnel ? allInstances.find((i) => i.id === tunnel.instance_id) : undefined; }, [selection, allInstances, allTunnels]); diff --git a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx index 2ef6f6532..1394885b7 100644 --- a/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx +++ b/new-ui/src/pages/compact/CompactLocationsPage/components/InstanceSwitcher.tsx @@ -54,7 +54,9 @@ export const InstanceSwitcher = () => { if (!isPresent(selectedInstance)) return undefined; for (const group of groups) { const found = group.options.find((o) => { - return o.value.kind === selectedInstance.kind && o.value.id === selectedInstance.id; + return ( + o.value.kind === selectedInstance.kind && o.value.id === selectedInstance.id + ); }); if (found) return found; } From 1ba74021ce13a0848ebc70784e0ae646edf087e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Fri, 19 Jun 2026 13:57:01 +0200 Subject: [PATCH 5/5] clippy fix --- src-tauri/src/bin/defguard-client.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index 00921cd17..d73a05ef3 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -62,7 +62,7 @@ async fn startup(app_handle: &AppHandle) { return; } }; - match session_state::validate_location_mfa_preference(&*DB_POOL, preference).await { + match session_state::validate_location_mfa_preference(&DB_POOL, preference).await { Ok(validated) => { if let Ok(mut guard) = app_state.session_state.lock() { guard.location_mfa_preference = validated;