main page

This commit is contained in:
JUSN committed 2025-12-17 17:55:13 +01:00
commit 7fb446c53a
8943 files changed
+1209030

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
import { createContext, useContext, useState, useEffect } from 'react'
import { account } from '../lib/appwrite'
const AuthContext = createContext()
// Demo mode when Appwrite is not configured
const DEMO_MODE = !import.meta.env.VITE_APPWRITE_PROJECT_ID
export function AuthProvider({ children }) {
const [user, setUser] = useState(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
checkUser()
}, [])
async function checkUser() {
if (DEMO_MODE) {
// Check localStorage for demo session
const demoUser = localStorage.getItem('demo_user')
if (demoUser) {
setUser(JSON.parse(demoUser))
}
setLoading(false)
return
}
try {
const session = await account.get()
setUser(session)
} catch (error) {
setUser(null)
} finally {
setLoading(false)
}
}
async function login(email, password) {
if (DEMO_MODE) {
// Demo login - accept any credentials
const demoUser = { $id: 'demo', email, name: email.split('@')[0] }
localStorage.setItem('demo_user', JSON.stringify(demoUser))
setUser(demoUser)
return { success: true }
}
try {
await account.createEmailPasswordSession(email, password)
await checkUser()
return { success: true }
} catch (error) {
return { success: false, error: error.message }
}
}
async function logout() {
if (DEMO_MODE) {
localStorage.removeItem('demo_user')
setUser(null)
return
}
try {
await account.deleteSession('current')
setUser(null)
} catch (error) {
console.error('Logout error:', error)
}
}
async function register(email, password, name) {
if (DEMO_MODE) {
return login(email, password)
}
try {
await account.create('unique()', email, password, name)
await login(email, password)
return { success: true }
} catch (error) {
return { success: false, error: error.message }
}
}
const value = {
user,
loading,
login,
logout,
register
}
return (
<AuthContext.Provider value={value}>
{children}
</AuthContext.Provider>
)
}
export function useAuth() {
return useContext(AuthContext)
}