import { Injectable } from '@angular/core'; import { CanActivate, Router } from '@angular/router'; import { TranslationsViewResolver } from '@core/resolvers/translations-view.resolver'; import { PortalDeterminationService } from '@core/services/portal-determination.service'; import { TokenService } from '@core/services/token/token.service'; import { UserTosService } from '@core/services/user-tos.service'; import { ClientSettingsService } from '@features/client-settings/client-settings.service'; import { UserResolver } from '@features/users/resolvers/user.resolver'; @Injectable({ providedIn: 'root' }) export class CanAccessPortalGuard implements CanActivate { constructor ( private router: Router, private portal: PortalDeterminationService, private tokenService: TokenService, private userResolver: UserResolver, private userTosService: UserTosService, private clientSettingsService: ClientSettingsService, private translationResolver: TranslationsViewResolver ) { } async canActivate () { if ( !this.tokenService.hasCurrentValidToken() && !this.tokenService.hasFutureValidToken() ) { this.tokenService.setAttemptedRoute(); this.router.navigateByUrl(`/${this.portal.routeBase}/auth/signin`); return false; } this.portal.isManager ? await this.clientSettingsService.setBrandingAndHandleSubdomain() : null; await Promise.all([ this.userResolver.resolve(), this.translationResolver.resolve() ]); if (!this.tokenService.hasImpersonationToken()) { return this.userTosService.ensureTermsOfServiceAccepted(); } return true; } }