Select Git revision
SessionManager.ts

michael.minelli authored
SessionManager.ts 2.14 KiB
import * as jwt from 'jsonwebtoken';
import User from '../models/User';
import LocalConfig from '../Config/LocalConfig/LocalConfig';
import LocalConfigKeys from '../Config/LocalConfig/LocalConfigKeys';
import axios, { AxiosError } from 'axios';
import logger from '../shared/logging/WinstonLogger';
import HttpManager from './HttpManager';
class SessionManager {
private _token: string | null = null;
public profile: User = new User();
constructor() { }
private static _instance: SessionManager;
public static get instance(): SessionManager {
if ( !SessionManager._instance ) {
SessionManager._instance = new SessionManager();
}
return SessionManager._instance;
}
get isLogged(): boolean {
return this._token !== null;
}
get token(): string {
return this._token || '';
}
set token(token: string) {
this._token = token;
const payload = jwt.decode(token);
if ( payload && typeof payload === 'object' && payload.profile ) {
this.profile = User.createFromJson(payload.profile);
}
LocalConfig.updateConfig(LocalConfigKeys.API_TOKEN, token);
}
async login(user: string, password: string) {
try {
const response = await axios.post(HttpManager.LOGIN_URL, {
user : user,
password: password
}, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
logger.info('Login successful');
} catch ( error ) {
if ( error instanceof AxiosError ) {
if ( error.response && error.response.status === 404 ) {
logger.error(`User not found or password incorrect`);
}
} else {
logger.error(`Login error: ${ error }`);
}
}
}
}
export default SessionManager.instance;