The main server, and probably only repository in this org.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.0 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. import {setGlobal, useGlobal} from "reactn";
  2. import {fetchGet, fetchPost} from "../Helpers/fetcher";
  3. setGlobal({
  4. "auth/login": false,
  5. "auth/checked": false,
  6. "auth/users/me": null,
  7. "auth/users/all": [],
  8. });
  9. export default function useAuth() {
  10. const [isLoggedIn, setIsLoggedIn] = useGlobal("auth/login");
  11. const [isChecked, setIsChecked] = useGlobal("auth/checked");
  12. const [user, setUser] = useGlobal("auth/users/me");
  13. const [users, setUsers] = useGlobal("auth/users/all");
  14. function fetchUsers() {
  15. fetchGet("/user/").then(({data, error}) => {
  16. if (error === null) {
  17. setUsers(data);
  18. }
  19. });
  20. }
  21. function verify() {
  22. setIsChecked(false);
  23. fetchGet("/user/session").then(({data, error}) => {
  24. const validSession = error === null && data.loggedIn;
  25. setIsLoggedIn(validSession);
  26. if (validSession) {
  27. setUser(data.user);
  28. fetchUsers();
  29. }
  30. setIsChecked(true);
  31. })
  32. }
  33. function login(username, password) {
  34. setIsChecked(false);
  35. fetchPost("/user/login", {username, password}).then(({data, error}) => {
  36. setIsChecked(true);
  37. if (error !== null) {
  38. setIsLoggedIn(false);
  39. return;
  40. }
  41. setIsLoggedIn(true);
  42. setIsLoggedIn(data);
  43. fetchUsers();
  44. });
  45. }
  46. function logout() {
  47. setIsChecked(false);
  48. fetchPost("/user/logout").then(({data, error}) => {
  49. setIsChecked(true);
  50. if (error !== null) {
  51. setIsLoggedIn(false);
  52. return;
  53. // TODO: Show errors ¿?
  54. }
  55. setIsLoggedIn(false);
  56. });
  57. }
  58. function register(username, password, repeated) {
  59. setIsChecked(false);
  60. if (password !== repeated) {
  61. alert("Passordene er ikke like");
  62. return;
  63. }
  64. fetchPost("/user/register", {username, password}).then(({data, error}) => {
  65. if (error !== null) {
  66. login(username, password);
  67. }
  68. })
  69. }
  70. return {isLoggedIn, isChecked, user, users, verify, login, logout, register};
  71. }