import { Injectable, inject } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivateFn, GuardResult, MaybeAsync, Router, RouterStateSnapshot } from '@angular/router'; @Injectable({ providedIn: 'root' }) export class AuthService { token?: String; constructor(private router: Router) { } checkAllowed() { // TODO: check if the token is still valid if (this.token) return true; else { this.router.navigateByUrl('/auth/login'); return false; } } getToken(): Promise { // TODO: check if the token is still valid return new Promise((resolve, reject) => { if (this.token) resolve(this.token); else reject(); }); } login(username: String, password: String): Promise { return new Promise((resolve, reject) => { // TODO: authenticate if (username === "test" && password === "test") { this.token = "valid_token"; resolve(true); } else { this.token = undefined; reject(); } }); } logout(): Promise { return new Promise((resolve, reject) => { // TODO: logout this.token = undefined; resolve(true); }); } register(username: String, password: String, rePassword: String): Promise { return new Promise((resolve, reject) => { // TODO: register if (username !== "test" && password === rePassword) resolve(true); else reject(); }); } } export const CheckTokenCanActivate: CanActivateFn = ( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ) => { return inject(AuthService).checkAllowed(); }