+
{$_('oauth.sso.linkNewAccount')}
+
+ {#each ssoProviders as provider}
+ {@const isLinked = linkedAccounts.some(a => a.provider === provider.provider)}
+
-
-
- {/if}
-
- {#if showRegenForm}
-
- {/if}
-
- {#if showDisableForm}
-
- {/if}
- {:else}
-
{$_('security.totpDisabled')}
-
- {/if}
- {:else if totpSetup.step === 'qr'}
- {@const qrData = totpSetup as TotpQr}
-
-
{$_('security.totpSetupInstructions')}
-
-

-
-
- {$_('security.cantScan')}
- {qrData.totpUri.split('secret=')[1]?.split('&')[0] || ''}
-
-
-
- {:else if totpSetup.step === 'verify'}
- {@const verifyData = totpSetup}
-
-
{$_('security.totpCodePlaceholder')}
-
-
- {:else if totpSetup.step === 'backup'}
-
-
{$_('security.backupCodes')}
-
{$_('security.backupCodesDescription')}
-
- {#each totpSetup.backupCodes as code}
- {code}
{/each}
-
-
-
-
-
- {/if}
-
-
-
- {$_('security.password')}
- {#if !passwordLoading}
- {#if hasPassword}
- {$_('security.passwordStatus')}
-
- {#if !showChangePasswordForm && !showRemovePasswordForm}
-
-
- {#if passkeys.length > 0}
-
- {/if}
-
- {/if}
-
- {#if showChangePasswordForm}
-
- {/if}
-
- {#if showRemovePasswordForm}
-
- {/if}
- {:else}
- {$_('security.noPassword')}
-
- {#if !showSetPasswordForm}
-
- {:else}
-
- {/if}
- {/if}
- {/if}
-
-
- {#if ssoProviders.length > 0}
-
- {$_('oauth.sso.linkedAccounts')}
-
- {#if linkedAccountsLoading}
- {$_('common.loading')}
- {:else}
- {#if linkedAccounts.length > 0}
-
- {:else}
- {$_('oauth.sso.noLinkedAccounts')}
- {/if}
-
-
-
{$_('oauth.sso.linkNewAccount')}
-
- {#each ssoProviders as provider}
- {@const isLinked = linkedAccounts.some(a => a.provider === provider.provider)}
-
- {/each}
-
-
- {/if}
-
- {/if}
-
- {#if hasMfa}
-
- {$_('security.appCompatibility')}
- {$_('security.legacyLoginDescription')}
-
- {#if !legacyLoginLoading}
-
-
- {$_('security.legacyLogin')}
-
- {#if allowLegacyLogin}
- {$_('security.legacyLoginOn')}
- {:else}
- {$_('security.legacyLoginOff')}
- {/if}
-
-
-
-
-
- {#if totpEnabled && allowLegacyLogin}
-
- {$_('security.legacyLoginWarning')}
-
- {/if}
-
-
-
{$_('security.legacyAppsTitle')}
-
{$_('security.legacyAppsDescription')}
-
- {/if}
-
- {/if}
-
-
- {$_('security.trustedDevices')}
- {$_('security.trustedDevicesDescription')}
-
- {#if trustedDevicesLoading}
- {$_('common.loading')}
- {:else if trustedDevices.length === 0}
- {$_('trustedDevices.noDevices')}
- {$_('trustedDevices.noDevicesHint')}
- {:else}
-
- {#each trustedDevices as device}
-
-
-
-
- {#if device.userAgent}
- {parseUserAgent(device.userAgent)}
- {/if}
- {#if device.trustedAt}
- {$_('trustedDevices.trustedSince')} {formatDate(device.trustedAt)}
- {/if}
- {$_('trustedDevices.lastSeen')} {formatDate(device.lastSeenAt)}
- {#if device.trustedUntil}
- {@const daysRemaining = getDaysRemaining(device.trustedUntil)}
-
- {#if daysRemaining <= 0}
- {$_('trustedDevices.expired')}
- {:else if daysRemaining === 1}
- {$_('trustedDevices.tomorrow')}
- {:else}
- {$_('trustedDevices.inDays', { values: { days: daysRemaining } })}
- {/if}
-
- {/if}
-
-
-
-
- {/each}
{/if}
{/if}
+
+ {#if hasMfa}
+
+ {$_('security.appCompatibility')}
+ {$_('security.legacyLoginDescription')}
+
+ {#if !legacyLoginLoading}
+
+
+ {$_('security.legacyLogin')}
+
+ {#if allowLegacyLogin}
+ {$_('security.legacyLoginOn')}
+ {:else}
+ {$_('security.legacyLoginOff')}
+ {/if}
+
+
+
+
+
+ {#if totpEnabled && allowLegacyLogin}
+
+ {$_('security.legacyLoginWarning')}
+
+ {/if}
+
+
+
{$_('security.legacyAppsTitle')}
+
{$_('security.legacyAppsDescription')}
+
+ {/if}
+
+ {/if}
+
+
+ {$_('security.trustedDevices')}
+ {$_('security.trustedDevicesDescription')}
+
+ {#if trustedDevicesLoading}
+ {$_('common.loading')}
+ {:else if trustedDevices.length === 0}
+ {$_('trustedDevices.noDevices')}
+ {$_('trustedDevices.noDevicesHint')}
+ {:else}
+
+ {#each trustedDevices as device}
+
+
+
+
+ {#if device.userAgent}
+ {parseUserAgent(device.userAgent)}
+ {/if}
+ {#if device.trustedAt}
+ {$_('trustedDevices.trustedSince')} {formatDate(device.trustedAt)}
+ {/if}
+ {$_('trustedDevices.lastSeen')} {formatDate(device.lastSeenAt)}
+ {#if device.trustedUntil}
+ {@const daysRemaining = getDaysRemaining(device.trustedUntil)}
+
+ {#if daysRemaining <= 0}
+ {$_('trustedDevices.expired')}
+ {:else if daysRemaining === 1}
+ {$_('trustedDevices.tomorrow')}
+ {:else}
+ {$_('trustedDevices.inDays', { values: { days: daysRemaining } })}
+ {/if}
+
+ {/if}
+
+
+
+
+ {/each}
+
+ {/if}
+