mirror of
https://git.rezel.net/LudoTech/traque.git
synced 2026-02-09 10:20:16 +01:00
53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
"use client";
|
|
import { useEffect, useState } from 'react';
|
|
import useSocketListener from './useSocketListener';
|
|
import useLocalStorage from './useLocalStorage';
|
|
|
|
const LOGIN_MESSAGE = "login";
|
|
const LOGOUT_MESSAGE = "logout";
|
|
const LOGIN_RESPONSE_MESSAGE = "login_response";
|
|
|
|
export default function useSocketAuth(socket, passwordName) {
|
|
const [loggedIn, setLoggedIn] = useState(false);
|
|
const [loading, setLoading] = useState(true);
|
|
const [waitingForResponse, setWaitingForResponse] = useState(true);
|
|
const [savedPassword, setSavedPassword, savedPasswordLoading] = useLocalStorage(passwordName, null);
|
|
|
|
useEffect(() => {
|
|
if (savedPassword && !loggedIn) {
|
|
console.log("Try to log with :", savedPassword);
|
|
socket.emit(LOGIN_MESSAGE, savedPassword);
|
|
}
|
|
}, [savedPassword]);
|
|
|
|
function login(password) {
|
|
setSavedPassword(password)
|
|
}
|
|
|
|
function logout() {
|
|
setSavedPassword(null);
|
|
setLoggedIn(false);
|
|
socket.emit(LOGOUT_MESSAGE)
|
|
}
|
|
|
|
useSocketListener(socket, LOGIN_RESPONSE_MESSAGE, (loginResponse) => {
|
|
setWaitingForResponse(false);
|
|
setLoggedIn(loginResponse);
|
|
console.log(loginResponse ? "Logged in" : "Not logged in");
|
|
});
|
|
|
|
useEffect(() => {
|
|
//There is a password saved and we recieved a login response
|
|
if(savedPassword && !waitingForResponse && !savedPasswordLoading) {
|
|
setLoading(false);
|
|
}
|
|
//We tried to load the saved password but it is not there
|
|
else if (savedPassword == null && !savedPasswordLoading) {
|
|
setLoading(false);
|
|
}
|
|
}, [waitingForResponse, savedPasswordLoading, savedPassword]);
|
|
|
|
|
|
return {login, logout, password: savedPassword, loggedIn, loading};
|
|
}
|