abstruse
Version:
Abstruse CI
45 lines (41 loc) • 1.32 kB
text/typescript
import { Injectable, Provider } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { ApiService } from './api.service';
import { AuthService } from './auth.service';
import { Observable, of, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
()
export class AuthGuard implements CanActivate {
constructor(
private apiService: ApiService,
private authService: AuthService,
private router: Router
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return combineLatest(...[
this.apiService.isAppReady(),
of(this.authService.isLoggedIn()),
this.apiService.loginRequired()
])
.pipe(
map(([ready, loggedIn, loginRequired]) => {
if (!loginRequired) {
return true;
} else {
if (!ready) {
this.router.navigate(['/setup']);
return false;
} else if (ready && !loggedIn) {
this.router.navigate(['/login']);
return false;
} else if (ready && loggedIn) {
return true;
}
}
})
);
}
}
export const AuthGuardProvider: Provider = {
provide: AuthGuard, useClass: AuthGuard
};