import axios from 'axios'; import { Configuration } from './configuration'; import { Session } from './session'; import { BackendReturnStatus, DefaultUser, UserBackend, User, } from '../types'; export class Auth { static triggerLoginFlow(): void { const url = [ Configuration.vatsim.authorizeUrl, `?client_id=${Configuration.vatsim.clientId}`, `&redirect_uri=${Configuration.resourceServer}/auth/vatsim`, `&response_type=code`, `&scope=full_name+vatsim_details`, `&approval_prompt=auto`, ].join(''); window.location.replace(url); } static async tokenIsValid(): Promise { const token = Session.bearerToken(); if (!token) return BackendReturnStatus.Unauthorized; return axios .get(`${Configuration.resourceServer}/auth/validate`, { headers: { Authorization: `Bearer ${token}`, }, }) .then(() => BackendReturnStatus.Ok) .catch((err) => { if (err.response.status === 401) return BackendReturnStatus.Unauthorized; return BackendReturnStatus.Failure; }); } static async user(): Promise { const token = Session.bearerToken(); if (!token) { return { status: BackendReturnStatus.Unauthorized, user: DefaultUser, }; } return axios .get(`${Configuration.resourceServer}/auth/user`, { headers: { Authorization: `Bearer ${token}`, }, }) .then((response) => { return { status: BackendReturnStatus.Ok, user: response.data, }; }) .catch((err) => { return { status: err.response.status === 401 ? BackendReturnStatus.Unauthorized : BackendReturnStatus.Failure, user: DefaultUser, }; }); } static async refreshRadarScopeKey(): Promise { const token = Session.bearerToken(); if (!token) return BackendReturnStatus.Unauthorized; return axios .patch(`${Configuration.resourceServer}/auth/refreshRadarScopeKey`, { headers: { Authorization: `Bearer ${token}`, }, }) .then(() => BackendReturnStatus.Ok) .catch((err) => { return err.response.status === 401 ? BackendReturnStatus.Unauthorized : BackendReturnStatus.Failure; }); } }