use the new session management
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useSearchParams } from 'react-router-dom';
|
import { useSearchParams } from 'react-router-dom';
|
||||||
|
import { Session } from '../services';
|
||||||
|
|
||||||
export const Auth: React.FC = () => {
|
export const Auth: React.FC = () => {
|
||||||
const [searchParams] = useSearchParams();
|
const [searchParams] = useSearchParams();
|
||||||
@@ -7,11 +8,11 @@ export const Auth: React.FC = () => {
|
|||||||
|
|
||||||
const baseUrl = `${window.location.protocol}//${window.location.host}`
|
const baseUrl = `${window.location.protocol}//${window.location.host}`
|
||||||
if (token) {
|
if (token) {
|
||||||
sessionStorage.setItem('token', token);
|
Session.setBearerToken(token);
|
||||||
window.location.href = `${baseUrl}/overview`;
|
window.location.replace(`${baseUrl}/overview`);
|
||||||
} else {
|
} else {
|
||||||
sessionStorage.removeItem('token');
|
Session.reset();
|
||||||
window.location.href = `${baseUrl}`;
|
window.location.replace(`${baseUrl}/`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { Button } from 'primereact/button';
|
import { Button } from 'primereact/button';
|
||||||
import { Card } from 'primereact/card';
|
import { Card } from 'primereact/card';
|
||||||
import { Configuration } from '../services';
|
import { Configuration, Session } from '../services';
|
||||||
|
|
||||||
export const Login: React.FC = () => {
|
export const Login: React.FC = () => {
|
||||||
// reset every old token
|
// reset every old token
|
||||||
useEffect(() => sessionStorage.removeItem('token'), []);
|
useEffect(() => Session.reset(), []);
|
||||||
|
|
||||||
const redirectToVatsim = () => {
|
const redirectToVatsim = () => {
|
||||||
const url = [
|
const url = [
|
||||||
|
|||||||
@@ -1,22 +1,15 @@
|
|||||||
import React, { useContext, useEffect } from 'react';
|
import React, { useContext, useEffect } from 'react';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { AuthContext } from '../contexts';
|
import { AuthContext } from '../contexts';
|
||||||
|
import { Session } from '../services';
|
||||||
|
|
||||||
export const Logout: React.FC = () => {
|
export const Logout: React.FC = () => {
|
||||||
const context = useContext(AuthContext);
|
const context = useContext(AuthContext);
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
sessionStorage.removeItem('token');
|
Session.reset();
|
||||||
context.setAuth({
|
context.resetAuth();
|
||||||
valid: false,
|
|
||||||
user: {
|
|
||||||
vatsimId: '',
|
|
||||||
fullName: '',
|
|
||||||
administrator: false,
|
|
||||||
airportConfigurationAccess: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
navigate('/');
|
navigate('/');
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
@@ -3,10 +3,12 @@ import { useNavigate } from 'react-router-dom';
|
|||||||
import { Auth } from '../services';
|
import { Auth } from '../services';
|
||||||
import { User } from '../types';
|
import { User } from '../types';
|
||||||
|
|
||||||
const AuthContext = createContext<{
|
export interface IAuthState {
|
||||||
auth: { valid: boolean; user: User };
|
valid: boolean,
|
||||||
setAuth: Dispatch<SetStateAction<{ valid: boolean; user: User }>>;
|
user: User,
|
||||||
}>({ auth: {
|
};
|
||||||
|
|
||||||
|
const InitialAuthState: IAuthState = {
|
||||||
valid: false,
|
valid: false,
|
||||||
user: {
|
user: {
|
||||||
vatsimId: '',
|
vatsimId: '',
|
||||||
@@ -14,33 +16,29 @@ const AuthContext = createContext<{
|
|||||||
administrator: false,
|
administrator: false,
|
||||||
airportConfigurationAccess: [],
|
airportConfigurationAccess: [],
|
||||||
},
|
},
|
||||||
}, setAuth: () => {} });
|
};
|
||||||
|
|
||||||
|
const AuthContext = createContext<{
|
||||||
|
auth: IAuthState;
|
||||||
|
setAuth: Dispatch<SetStateAction<IAuthState>>;
|
||||||
|
resetAuth: () => void;
|
||||||
|
}>({ auth: InitialAuthState, setAuth: () => {}, resetAuth: () => {} });
|
||||||
|
|
||||||
export const AuthProvider = ({ children }: { children: any }) => {
|
export const AuthProvider = ({ children }: { children: any }) => {
|
||||||
const [auth, setAuth] = useState<{ valid: boolean; user: User }>({
|
const [auth, setAuth] = useState<IAuthState>(InitialAuthState);
|
||||||
valid: false,
|
|
||||||
user: {
|
|
||||||
vatsimId: '',
|
|
||||||
fullName: '',
|
|
||||||
administrator: false,
|
|
||||||
airportConfigurationAccess: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const resetAuth = () => setAuth(InitialAuthState);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
Auth.user().then((user) => {
|
Auth.user().then((user) => {
|
||||||
setAuth({ valid: true, user });
|
if (user !== undefined) {
|
||||||
|
setAuth({ valid: true, user });
|
||||||
|
} else {
|
||||||
|
setAuth(InitialAuthState);
|
||||||
|
}
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
setAuth({
|
setAuth(InitialAuthState);
|
||||||
valid: false,
|
|
||||||
user: {
|
|
||||||
vatsimId: '',
|
|
||||||
fullName: '',
|
|
||||||
administrator: false,
|
|
||||||
airportConfigurationAccess: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
navigate('/');
|
navigate('/');
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
@@ -48,7 +46,7 @@ export const AuthProvider = ({ children }: { children: any }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AuthContext.Provider value={{ auth, setAuth }}>
|
<AuthContext.Provider value={{ auth, setAuth, resetAuth }}>
|
||||||
{children}
|
{children}
|
||||||
</AuthContext.Provider>
|
</AuthContext.Provider>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Configuration } from './configuration';
|
import { Configuration } from './configuration';
|
||||||
|
import { Session } from './session';
|
||||||
import { AirportOverview } from '../types';
|
import { AirportOverview } from '../types';
|
||||||
|
|
||||||
export class Airport {
|
export class Airport {
|
||||||
static async all(): Promise<AirportOverview[]> {
|
static async all(): Promise<AirportOverview[]> {
|
||||||
const token = sessionStorage.getItem('token');
|
const token = Session.bearerToken();
|
||||||
if (!token) return [];
|
if (!token) return [];
|
||||||
|
|
||||||
return axios
|
return axios
|
||||||
|
|||||||
@@ -1,18 +1,12 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Configuration } from './configuration';
|
import { Configuration } from './configuration';
|
||||||
|
import { Session } from './session';
|
||||||
import { User } from '../types';
|
import { User } from '../types';
|
||||||
|
|
||||||
export class Auth {
|
export class Auth {
|
||||||
static async user(): Promise<User> {
|
static async user(): Promise<User | undefined> {
|
||||||
const token = sessionStorage.getItem('token');
|
const token = Session.bearerToken();
|
||||||
if (!token) {
|
if (!token) return undefined;
|
||||||
return {
|
|
||||||
vatsimId: '',
|
|
||||||
fullName: '',
|
|
||||||
administrator: false,
|
|
||||||
airportConfigurationAccess: [],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return axios
|
return axios
|
||||||
.get<User>(`${Configuration.resourceServer}/auth/user`, {
|
.get<User>(`${Configuration.resourceServer}/auth/user`, {
|
||||||
@@ -21,11 +15,6 @@ export class Auth {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((response) => response.data)
|
.then((response) => response.data)
|
||||||
.catch(() => ({
|
.catch(() => undefined);
|
||||||
vatsimId: '',
|
|
||||||
fullName: '',
|
|
||||||
administrator: false,
|
|
||||||
airportConfigurationAccess: [],
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Airport } from "./airport";
|
import { Airport } from "./airport";
|
||||||
import { Auth } from './auth';
|
import { Auth } from './auth';
|
||||||
import { Configuration } from "./configuration";
|
import { Configuration } from "./configuration";
|
||||||
|
import { Session } from "./session";
|
||||||
import { System } from './system';
|
import { System } from './system';
|
||||||
|
|
||||||
export { Airport, Auth, Configuration, System };
|
export { Airport, Auth, Configuration, Session, System };
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Configuration } from './configuration';
|
import { Configuration } from './configuration';
|
||||||
|
import { Session } from './session';
|
||||||
|
|
||||||
export class System {
|
export class System {
|
||||||
static async timestamp(): Promise<number> {
|
static async timestamp(): Promise<number> {
|
||||||
const token = sessionStorage.getItem('token');
|
const token = Session.bearerToken();
|
||||||
if (!token) return 0;
|
if (!token) return 0;
|
||||||
|
|
||||||
return axios
|
return axios
|
||||||
|
|||||||
Reference in New Issue
Block a user