57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
'use client'
|
|
|
|
import React, { createContext, useContext, useState } from 'react'
|
|
|
|
interface User {
|
|
username: string
|
|
}
|
|
|
|
interface AuthContextType {
|
|
user: User | null
|
|
login: (username: string, password: string) => boolean
|
|
logout: () => void
|
|
isAuthenticated: boolean
|
|
}
|
|
|
|
const AuthContext = createContext<AuthContextType | undefined>(undefined)
|
|
|
|
export function AuthProvider({ children }: { children: React.ReactNode }) {
|
|
const [user, setUser] = useState<User | null>(() => {
|
|
if (typeof window !== 'undefined') {
|
|
const savedUser = localStorage.getItem('user')
|
|
return savedUser ? JSON.parse(savedUser) : null
|
|
}
|
|
return null
|
|
})
|
|
|
|
const login = (username: string, password: string): boolean => {
|
|
if (username === 'admin' && password === 'Mallory122907Fucku2u2') {
|
|
const userData = { username }
|
|
setUser(userData)
|
|
localStorage.setItem('user', JSON.stringify(userData))
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const logout = () => {
|
|
setUser(null)
|
|
localStorage.removeItem('user')
|
|
}
|
|
|
|
const isAuthenticated = !!user
|
|
|
|
return (
|
|
<AuthContext.Provider value={{ user, login, logout, isAuthenticated }}>
|
|
{children}
|
|
</AuthContext.Provider>
|
|
)
|
|
}
|
|
|
|
export function useAuth() {
|
|
const context = useContext(AuthContext)
|
|
if (context === undefined) {
|
|
throw new Error('useAuth must be used within an AuthProvider')
|
|
}
|
|
return context
|
|
} |