All checks were successful
Gitea Actions Demo / build-and-push (push) Successful in 23s
- Added `marked_for_deletion` and `marked_for_deletion_at` fields to User model (Python and TypeScript) with serialization updates - Created POST /api/user/mark-for-deletion endpoint with JWT auth, error handling, and SSE event trigger - Blocked login and password reset for marked users; added new error codes ACCOUNT_MARKED_FOR_DELETION and ALREADY_MARKED - Updated UserProfile.vue with "Delete My Account" button, confirmation modal (email input), loading state, success/error modals, and sign-out/redirect logic - Synced error codes and model fields between backend and frontend - Added and updated backend and frontend tests to cover all flows and edge cases - All Acceptance Criteria from the spec are complete and verified
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { ref, watch } from 'vue'
|
|
|
|
const hasLocalStorage =
|
|
typeof localStorage !== 'undefined' && typeof localStorage.getItem === 'function'
|
|
|
|
export const isParentAuthenticated = ref(
|
|
hasLocalStorage ? localStorage.getItem('isParentAuthenticated') === 'true' : false,
|
|
)
|
|
export const isUserLoggedIn = ref(false)
|
|
export const isAuthReady = ref(false)
|
|
export const currentUserId = ref('')
|
|
|
|
watch(isParentAuthenticated, (val) => {
|
|
if (hasLocalStorage && typeof localStorage.setItem === 'function') {
|
|
localStorage.setItem('isParentAuthenticated', val ? 'true' : 'false')
|
|
}
|
|
})
|
|
|
|
export function authenticateParent() {
|
|
isParentAuthenticated.value = true
|
|
}
|
|
|
|
export function logoutParent() {
|
|
isParentAuthenticated.value = false
|
|
if (hasLocalStorage && typeof localStorage.removeItem === 'function') {
|
|
localStorage.removeItem('isParentAuthenticated')
|
|
}
|
|
}
|
|
|
|
export function loginUser() {
|
|
isUserLoggedIn.value = true
|
|
// Always start in child mode after login
|
|
isParentAuthenticated.value = false
|
|
}
|
|
|
|
export function logoutUser() {
|
|
isUserLoggedIn.value = false
|
|
currentUserId.value = ''
|
|
logoutParent()
|
|
}
|
|
|
|
export async function checkAuth() {
|
|
try {
|
|
const res = await fetch('/api/me', { method: 'GET' })
|
|
if (res.ok) {
|
|
const data = await res.json()
|
|
currentUserId.value = data.id
|
|
isUserLoggedIn.value = true
|
|
} else {
|
|
isUserLoggedIn.value = false
|
|
currentUserId.value = ''
|
|
}
|
|
} catch {
|
|
isUserLoggedIn.value = false
|
|
currentUserId.value = ''
|
|
}
|
|
isAuthReady.value = true
|
|
}
|