import {Injectable} from '@angular/core'; import {Router} from '@angular/router'; import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; import {AuthService} from '../services/auth.service'; import {ProfileService} from '../services/profile.service'; import {I18nService} from '../services/i18n.service'; @Injectable({ providedIn: 'root' }) export class AuthUpdateGuard implements CanActivate { constructor(private authService: AuthService) {} canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { this.authService.getAuth().catch(function(error) {}); return true; } } @Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate { constructor(private authService: AuthService, private router: Router) {} canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const that = this; return this.authService.getAuth().then(response => { return true; }).catch(function(error) { return that.router.parseUrl('/unavailable?target=' + state.url); }); } } @Injectable({ providedIn: 'root' }) export class AuthenticatedGuard implements CanActivate { constructor(private authService: AuthService, private profileService: ProfileService, private i18nService: I18nService, private router: Router) {} canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const that = this; return this.authService.getAuth().then((data: any) => { if(!data.authenticated) { return that.router.parseUrl('/login?target=' + state.url); } this.profileService.get(["locale", "darkTheme"]).subscribe((profileFields: any) => { let updateLocale = false; let darktheme = 'false'; let updateTheme = false; for(let profileField of profileFields) { if(profileField.name == "darkTheme") { darktheme = profileField.value; } else if(profileField.name == "locale" && this.i18nService.locales.indexOf(profileField.value) != -1 && localStorage.getItem("bstly.locale") != profileField.value) { if(this.i18nService.locale != profileField.value) { localStorage.setItem("bstly.locale", profileField.value); updateLocale = true; } } } if(darktheme != localStorage.getItem("bstly.darkTheme")) { localStorage.setItem("bstly.darkTheme", darktheme); updateTheme = true; } if(updateLocale || updateTheme) { window.location.reload(); } }) return true; }).catch(function(error) { return that.router.parseUrl('/unavailable?target=' + state.url); }); } } @Injectable({ providedIn: 'root' }) export class AnonymousGuard implements CanActivate { constructor(private authService: AuthService, private router: Router) {} canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const that = this; return this.authService.getAuth().then((data: any) => { if(data.authenticated) { this.router.navigateByUrl('/account/info'); return false; } return true; }).catch(function(error) { return that.router.parseUrl('/unavailable?target=' + state.url); }); } }