auth.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const Auth = (() => {
  2. let currentUser = null;
  3. function getToken() { return localStorage.getItem('token'); }
  4. function setToken(token) { localStorage.setItem('token', token); }
  5. function clearToken() { localStorage.removeItem('token'); }
  6. function getCurrentUser() { return currentUser; }
  7. function isLoggedIn() { return !!getToken(); }
  8. function isAdmin() { return currentUser?.isAdmin || false; }
  9. async function init() {
  10. if (!getToken()) return false;
  11. try {
  12. currentUser = await API.me();
  13. return true;
  14. } catch (e) {
  15. clearToken();
  16. return false;
  17. }
  18. }
  19. function logout() {
  20. clearToken();
  21. currentUser = null;
  22. window.location.reload();
  23. }
  24. function setupForms() {
  25. // Tab switching
  26. document.querySelectorAll('.auth-tab').forEach(btn => {
  27. btn.addEventListener('click', () => {
  28. document.querySelectorAll('.auth-tab').forEach(b => b.classList.remove('active'));
  29. btn.classList.add('active');
  30. const tab = btn.dataset.tab;
  31. document.getElementById('login-form').style.display = tab === 'login' ? 'flex' : 'none';
  32. document.getElementById('register-form').style.display = tab === 'register' ? 'flex' : 'none';
  33. document.getElementById('auth-error').style.display = 'none';
  34. });
  35. });
  36. document.getElementById('login-form').addEventListener('submit', async (e) => {
  37. e.preventDefault();
  38. const login = document.getElementById('login-username').value.trim();
  39. const password = document.getElementById('login-password').value;
  40. try {
  41. const res = await API.login(login, password);
  42. setToken(res.token);
  43. currentUser = res.user;
  44. window.location.reload();
  45. } catch (err) {
  46. showAuthError(err.message);
  47. }
  48. });
  49. document.getElementById('register-form').addEventListener('submit', async (e) => {
  50. e.preventDefault();
  51. const login = document.getElementById('reg-username').value.trim();
  52. const email = document.getElementById('reg-email').value.trim();
  53. const password = document.getElementById('reg-password').value;
  54. try {
  55. await API.register(login, email, password);
  56. showAuthError('Registration successful! You can now login (or wait for admin activation).', 'success');
  57. } catch (err) {
  58. showAuthError(err.message);
  59. }
  60. });
  61. }
  62. function showAuthError(msg, type = 'error') {
  63. const el = document.getElementById('auth-error');
  64. el.textContent = msg;
  65. el.className = type === 'success' ? 'success-msg' : 'error-msg';
  66. el.style.display = 'block';
  67. }
  68. return { init, logout, getCurrentUser, isLoggedIn, isAdmin, setupForms, getToken };
  69. })();