auth.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { beforeUnloadHandler } from "../app.js";
  2. import { showError } from "../utils/error.js";
  3. // Configuración: Cambia estos números para que sean únicos para tu proyecto
  4. const OFFSET = 99887766; // Un número grande para asegurar longitud mínima
  5. const CLAVE = 836295738; // Tu "secreto" para el XOR
  6. const desencriptar = (hash) => {
  7. // 1. Revertimos el string y volvemos a base 10
  8. const baseNum = parseInt(hash.split('').reverse().join(''), 12);
  9. // 2. Aplicamos XOR (es reversible) y restamos el Offset
  10. return (baseNum ^ CLAVE) - OFFSET;
  11. };
  12. function getTableFromUrl() {
  13. const params = new URLSearchParams(window.location.search);
  14. const table = params.get("table");
  15. console.log(table);
  16. return Number(desencriptar(table));
  17. }
  18. async function login(email, pin) {
  19. const response = await fetch("/api/users/login", {
  20. method: "POST",
  21. headers: {
  22. "Content-Type": "application/json"
  23. },
  24. body: JSON.stringify({ email, pin }) // Enviamos table si el back lo requiere en login
  25. });
  26. if (response.status == 420) {
  27. window.removeEventListener("beforeunload", beforeUnloadHandler);
  28. window.location.replace("/");
  29. }
  30. if (response.status === 401 || response.status === 429 || response.status === 404) {
  31. const errorData = await response.json();
  32. const msg = errorData.message || "Error de autenticación";
  33. const attempts = errorData.data?.attempts_remaining ? ` Intentos restantes: ${errorData.data.attempts_remaining}` : "";
  34. showError(`${msg}.${attempts}`);
  35. throw new Error(msg);
  36. } else if (response.status != 200) {
  37. const errorData = await response.json();
  38. showError(errorData.message || "Error desconocido");
  39. throw new Error(errorData.message);
  40. }
  41. const JSONdata = await response.json();
  42. const userData = JSONdata.data;
  43. if (!userData || !userData.token) {
  44. showError("Error al iniciar sesión, Intenta mas tarde.");
  45. throw new Error("Error al iniciar sesión.");
  46. }
  47. return userData;
  48. }
  49. async function guestLogin() {
  50. try {
  51. const response = await fetch("/api/users/guest");
  52. const data = await response.json();
  53. if (!data.success || !data.data || !data.data.token) {
  54. throw new Error("Error al generar sesión de invitado");
  55. }
  56. return data.data; // Retorna { token: "..." }
  57. } catch (e) {
  58. console.error(e);
  59. showError("No se pudo iniciar como invitado.");
  60. throw e;
  61. }
  62. }
  63. async function existsTable(table) {
  64. const responseTableExists = await fetch(`/api/store/tables/exists?q=${table}`, {
  65. method: "GET",
  66. headers: {
  67. "Content-Type": "application/json"
  68. }
  69. });
  70. const data = (await responseTableExists.json()).data.exists;
  71. return data;
  72. }
  73. export { login, existsTable, guestLogin, getTableFromUrl };