feat: improve account security

Support TOTP 2fa, allow for changing password, add session management
and account removal.
This commit is contained in:
Zoe
2026-10-08 12:43:22 -05:00
parent ff33e9c573
commit 4bba529ba8
27 changed files with 4874 additions and 468 deletions
+18 -1
View File
@@ -1,11 +1,13 @@
<script setup lang="ts">
import { Err, Ok, type Result } from '~~/types/result';
import { DialogType } from '~/composables/useDialog';
const AVATAR_SIZE = 256;
const MAX_SOURCE_SIZE = 10 * 1024 * 1024;
const ACCEPTED_TYPES = ['image/png', 'image/jpeg', 'image/webp'];
const { user, updateProfile } = useAuth();
const { openDialog } = useDialog();
const fileInput = ref<HTMLInputElement | null>(null);
const avatarBusy = ref(false);
@@ -224,7 +226,8 @@ const memberSince = computed(() => {
<div class="flex flex-row flex-wrap items-center justify-between gap-x-16 gap-y-2">
<span class="whitespace-nowrap">Email</span>
<span class="flex-1 min-w-60 max-w-120 text-sm text-[var(--text-secondary)] overflow-hidden text-ellipsis">
<span
class="flex-1 min-w-60 max-w-120 text-sm text-[var(--text-secondary)] overflow-hidden text-ellipsis">
{{ user?.email }}
</span>
</div>
@@ -235,6 +238,20 @@ const memberSince = computed(() => {
{{ memberSince }}
</span>
</div>
<section
class="flex flex-wrap items-center justify-between gap-3 mt-3 p-4 rounded-lg border border-red-400/35">
<div class="flex flex-col gap-0.5 flex-1 min-w-60">
<h2 class="text-[15px] font-semibold">Delete account</h2>
<p class="text-[13px] leading-snug text-[var(--text-secondary)]">
Permanently deletes your agents, topics, and api keys from this instance.
</p>
</div>
<button type="button" @click="openDialog(DialogType.DeleteAccount)"
class="flex items-center h-8.5 px-3 text-sm font-medium rounded-md bg-red-600 text-white">
Delete account
</button>
</section>
</div>
</div>
</template>