2021-04-13 21:53:58 +02:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import {
|
|
|
|
ActivatedRouteSnapshot,
|
|
|
|
CanActivate,
|
|
|
|
Router,
|
|
|
|
RouterStateSnapshot
|
|
|
|
} from '@angular/router';
|
2021-05-22 10:04:56 +02:00
|
|
|
import { ViewMode } from '@prisma/client';
|
|
|
|
import { EMPTY } from 'rxjs';
|
|
|
|
import { catchError } from 'rxjs/operators';
|
2021-04-13 21:53:58 +02:00
|
|
|
|
2021-05-19 20:36:44 +02:00
|
|
|
import { SettingsStorageService } from '../services/settings-storage.service';
|
2021-05-24 09:38:44 +02:00
|
|
|
import { UserService } from '../services/user/user.service';
|
2021-04-13 21:53:58 +02:00
|
|
|
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
|
|
export class AuthGuard implements CanActivate {
|
2021-06-05 17:16:07 +02:00
|
|
|
private static PUBLIC_PAGE_ROUTES = [
|
|
|
|
'/about',
|
|
|
|
'/pricing',
|
|
|
|
'/register',
|
|
|
|
'/resources'
|
|
|
|
];
|
2021-05-24 16:28:42 +02:00
|
|
|
|
2021-04-13 21:53:58 +02:00
|
|
|
constructor(
|
|
|
|
private router: Router,
|
2021-05-24 09:38:44 +02:00
|
|
|
private settingsStorageService: SettingsStorageService,
|
|
|
|
private userService: UserService
|
2021-04-13 21:53:58 +02:00
|
|
|
) {}
|
|
|
|
|
|
|
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
2021-05-19 20:36:44 +02:00
|
|
|
if (route.queryParams?.utm_source) {
|
|
|
|
this.settingsStorageService.setSetting(
|
|
|
|
'utm_source',
|
|
|
|
route.queryParams?.utm_source
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-05-22 10:04:56 +02:00
|
|
|
return new Promise<boolean>((resolve) => {
|
2021-05-24 09:38:44 +02:00
|
|
|
this.userService
|
|
|
|
.get()
|
2021-05-22 10:04:56 +02:00
|
|
|
.pipe(
|
|
|
|
catchError(() => {
|
2021-06-16 17:31:31 +02:00
|
|
|
if (route.queryParams?.utm_source) {
|
|
|
|
this.router.navigate(['/register']);
|
|
|
|
resolve(false);
|
|
|
|
} else if (AuthGuard.PUBLIC_PAGE_ROUTES.includes(state.url)) {
|
2021-05-24 16:28:42 +02:00
|
|
|
resolve(true);
|
|
|
|
return EMPTY;
|
|
|
|
} else if (state.url !== '/start') {
|
2021-05-22 10:04:56 +02:00
|
|
|
this.router.navigate(['/start']);
|
|
|
|
resolve(false);
|
|
|
|
return EMPTY;
|
|
|
|
}
|
2021-04-13 21:53:58 +02:00
|
|
|
|
2021-05-22 10:04:56 +02:00
|
|
|
resolve(true);
|
|
|
|
return EMPTY;
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.subscribe((user) => {
|
|
|
|
if (
|
2021-05-22 13:48:06 +02:00
|
|
|
state.url.startsWith('/home') &&
|
2021-05-22 10:04:56 +02:00
|
|
|
user.settings.viewMode === ViewMode.ZEN
|
|
|
|
) {
|
|
|
|
this.router.navigate(['/zen']);
|
|
|
|
resolve(false);
|
2021-05-22 13:48:06 +02:00
|
|
|
} else if (state.url.startsWith('/start')) {
|
2021-05-22 10:04:56 +02:00
|
|
|
if (user.settings.viewMode === ViewMode.ZEN) {
|
|
|
|
this.router.navigate(['/zen']);
|
|
|
|
} else {
|
|
|
|
this.router.navigate(['/home']);
|
|
|
|
}
|
2021-04-13 21:53:58 +02:00
|
|
|
|
2021-05-22 10:04:56 +02:00
|
|
|
resolve(false);
|
|
|
|
} else if (
|
2021-05-22 13:48:06 +02:00
|
|
|
state.url.startsWith('/zen') &&
|
2021-05-22 10:04:56 +02:00
|
|
|
user.settings.viewMode === ViewMode.DEFAULT
|
|
|
|
) {
|
|
|
|
this.router.navigate(['/home']);
|
|
|
|
resolve(false);
|
|
|
|
}
|
2021-04-13 21:53:58 +02:00
|
|
|
|
2021-05-22 10:04:56 +02:00
|
|
|
resolve(true);
|
|
|
|
});
|
|
|
|
});
|
2021-04-13 21:53:58 +02:00
|
|
|
}
|
|
|
|
}
|