auth.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import axios from 'axios';
  2. import { Configuration } from './configuration';
  3. import { Session } from './session';
  4. import {
  5. BackendReturnStatus,
  6. DefaultUser,
  7. UserBackend,
  8. User,
  9. } from '../types';
  10. export class Auth {
  11. static triggerLoginFlow(): void {
  12. const url = [
  13. Configuration.vatsim.authorizeUrl,
  14. `?client_id=${Configuration.vatsim.clientId}`,
  15. `&redirect_uri=${Configuration.resourceServer}/auth/vatsim`,
  16. `&response_type=code`,
  17. `&scope=full_name+vatsim_details`,
  18. `&approval_prompt=auto`,
  19. ].join('');
  20. window.location.replace(url);
  21. }
  22. static async tokenIsValid(): Promise<BackendReturnStatus> {
  23. const token = Session.bearerToken();
  24. if (!token) return BackendReturnStatus.Unauthorized;
  25. return axios
  26. .get<void>(`${Configuration.resourceServer}/auth/validate`, {
  27. headers: {
  28. Authorization: `Bearer ${token}`,
  29. },
  30. })
  31. .then(() => BackendReturnStatus.Ok)
  32. .catch((err) => {
  33. if (err.response.status === 401) return BackendReturnStatus.Unauthorized;
  34. return BackendReturnStatus.Failure;
  35. });
  36. }
  37. static async user(): Promise<UserBackend> {
  38. const token = Session.bearerToken();
  39. if (!token) {
  40. return {
  41. status: BackendReturnStatus.Unauthorized,
  42. user: DefaultUser,
  43. };
  44. }
  45. return axios
  46. .get<User>(`${Configuration.resourceServer}/auth/user`, {
  47. headers: {
  48. Authorization: `Bearer ${token}`,
  49. },
  50. })
  51. .then((response) => {
  52. return {
  53. status: BackendReturnStatus.Ok,
  54. user: response.data,
  55. };
  56. })
  57. .catch((err) => {
  58. return {
  59. status: err.response.status === 401 ? BackendReturnStatus.Unauthorized : BackendReturnStatus.Failure,
  60. user: DefaultUser,
  61. };
  62. });
  63. }
  64. static async refreshRadarScopeKey(): Promise<BackendReturnStatus> {
  65. const token = Session.bearerToken();
  66. if (!token) return BackendReturnStatus.Unauthorized;
  67. return axios
  68. .patch<void>(`${Configuration.resourceServer}/auth/refreshRadarScopeKey`, {
  69. headers: {
  70. Authorization: `Bearer ${token}`,
  71. },
  72. })
  73. .then(() => BackendReturnStatus.Ok)
  74. .catch((err) => {
  75. return err.response.status === 401 ? BackendReturnStatus.Unauthorized : BackendReturnStatus.Failure;
  76. });
  77. }
  78. }