auth.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. Copyright (C) 2025 QuantumNous
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Affero General Public License as
  5. published by the Free Software Foundation, either version 3 of the
  6. License, or (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Affero General Public License for more details.
  11. You should have received a copy of the GNU Affero General Public License
  12. along with this program. If not, see <https://www.gnu.org/licenses/>.
  13. For commercial licensing, please contact support@quantumnous.com
  14. */
  15. import React from 'react';
  16. import { Navigate } from 'react-router-dom';
  17. import { history } from './history';
  18. export function authHeader() {
  19. // return authorization header with jwt token
  20. let user = JSON.parse(localStorage.getItem('user'));
  21. if (user && user.token) {
  22. return { Authorization: 'Bearer ' + user.token };
  23. } else {
  24. return {};
  25. }
  26. }
  27. export const AuthRedirect = ({ children }) => {
  28. const user = localStorage.getItem('user');
  29. if (user) {
  30. return <Navigate to="/console" replace />;
  31. }
  32. return children;
  33. };
  34. function PrivateRoute({ children }) {
  35. if (!localStorage.getItem('user')) {
  36. return <Navigate to='/login' state={{ from: history.location }} />;
  37. }
  38. return children;
  39. }
  40. export function AdminRoute({ children }) {
  41. const raw = localStorage.getItem('user');
  42. if (!raw) {
  43. return <Navigate to='/login' state={{ from: history.location }} />;
  44. }
  45. try {
  46. const user = JSON.parse(raw);
  47. if (user && typeof user.role === 'number' && user.role >= 10) {
  48. return children;
  49. }
  50. } catch (e) {
  51. // ignore
  52. }
  53. return <Navigate to='/forbidden' replace />;
  54. }
  55. export { PrivateRoute };