import {setGlobal, useGlobal} from "reactn"; import {fetchGet, fetchPost} from "../Helpers/fetcher"; setGlobal({ "auth/login": false, "auth/checked": false, "auth/users/me": null, "auth/users/all": [], }); export default function useAuth() { const [isLoggedIn, setIsLoggedIn] = useGlobal("auth/login"); const [isChecked, setIsChecked] = useGlobal("auth/checked"); const [user, setUser] = useGlobal("auth/users/me"); const [users, setUsers] = useGlobal("auth/users/all"); function fetchUsers() { fetchGet("/user/").then(({data, error}) => { if (error === null) { setUsers(data); } }); } function verify() { setIsChecked(false); fetchGet("/user/session").then(({data, error}) => { const validSession = error === null && data.loggedIn; setIsLoggedIn(validSession); if (validSession) { setUser(data.user); fetchUsers(); } setIsChecked(true); }) } function login(username, password) { setIsChecked(false); fetchPost("/user/login", {username, password}).then(({data, error}) => { setIsChecked(true); if (error !== null) { setIsLoggedIn(false); return; } setIsLoggedIn(true); setIsLoggedIn(data); fetchUsers(); }); } function logout() { setIsChecked(false); fetchPost("/user/logout").then(({data, error}) => { setIsChecked(true); if (error !== null) { setIsLoggedIn(false); return; // TODO: Show errors ¿? } setIsLoggedIn(false); }); } function register(username, password, repeated) { setIsChecked(false); if (password !== repeated) { alert("Passordene er ikke like"); return; } fetchPost("/user/register", {username, password}).then(({data, error}) => { if (error !== null) { login(username, password); } }) } return {isLoggedIn, isChecked, user, users, verify, login, logout, register}; }