import { Injectable } from '@angular/core'; import { JwtHelperService } from '@auth0/angular-jwt'; import { User, LoginSuccessResult, ImportedArdaConUser } from 'tournee.businesslogic'; @Injectable() export class AuthService { public User: User; public Import: ImportedArdaConUser; lastChecked: Date; isExpired: boolean; constructor(public jwtHelper: JwtHelperService) { this.User = new User(JSON.parse(localStorage.getItem('tournee.user'))); } token() { return this.jwtHelper.tokenGetter(); } loggedIn() { if (!this.lastChecked || this.lastChecked.getTime() > Date.now() + 5000) { this.lastChecked = new Date(Date.now() + 5000); this.isExpired = this.jwtHelper.isTokenExpired(); } return !this.isExpired; } IsMigrating() { return this.Import != null; } systemAdmin() { if (!this.loggedIn()) { return false; } if (!this.User) { return false; } else { return this.User.systemAdmin(); } } add_saved_tournament(tournament_id) { this.User.saved_tournaments.push(tournament_id); this.restashUser(); } user_has_saved_tournament(tournament_id) { if (this.loggedIn()) { return this.User.saved_tournaments.indexOf(tournament_id) > -1; } else { return false; } } restashUser() { localStorage.setItem('tournee.user', JSON.stringify(this.User)); } importing(to_import: ImportedArdaConUser) { this.Import = to_import; } loginSuccess(result : LoginSuccessResult) { return new Promise((resolve) => { this.Import = null; localStorage.setItem('tournee.token', result.token); this.User = new User(result.user); localStorage.setItem('tournee.user', JSON.stringify(this.User)); this.lastChecked = null; resolve(); }); } logoutSuccess() { localStorage.removeItem('tournee.user'); localStorage.removeItem('tournee.token'); this.User = null; this.lastChecked = null; this.isExpired = true; } }