| import { ref, computed } from 'vue' |
| import { useRouter } from 'vue-router' |
| import { wsService } from '@/services/websocket' |
|
|
| |
| const username = ref<string | null>(localStorage.getItem('auth_username')) |
| const isLoggedIn = ref(localStorage.getItem('auth_logged_in') === 'true') |
|
|
| export function useAuth() { |
| const router = useRouter() |
|
|
| const isAuthenticated = computed(() => isLoggedIn.value) |
|
|
| function setAuthenticated(user: string) { |
| username.value = user |
| isLoggedIn.value = true |
|
|
| localStorage.setItem('auth_username', user) |
| localStorage.setItem('auth_logged_in', 'true') |
|
|
| |
| wsService.start() |
| } |
|
|
| function logout() { |
| username.value = null |
| isLoggedIn.value = false |
| localStorage.removeItem('auth_username') |
| localStorage.removeItem('auth_logged_in') |
|
|
| |
| wsService.stop() |
|
|
| |
| if (router) { |
| router.push('/login') |
| } else { |
| window.location.href = '/login' |
| } |
| } |
|
|
| async function login(user: string, pass: string): Promise<boolean> { |
| try { |
| const response = await fetch('/auth/status', { |
| method: 'POST', |
| headers: { |
| 'Content-Type': 'application/json', |
| }, |
| body: JSON.stringify({ username: user, password: pass }), |
| }) |
|
|
| if (response.ok) { |
| setAuthenticated(user) |
| return true |
| } else { |
| return false |
| } |
| } catch (e) { |
| console.error('Login error', e) |
| return false |
| } |
| } |
|
|
| return { |
| username, |
| isAuthenticated, |
| login, |
| logout |
| } |
| } |
|
|