From 7ca86c864e102b65e4ff3224a06554a66148fef8 Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sun, 10 Sep 2017 09:24:50 +0200
Subject: Client: add guard to admin routes

---
 client/src/app/+admin/admin-guard.service.ts  | 23 +++++++++++++++++++++++
 client/src/app/+admin/admin-routing.module.ts |  4 +++-
 client/src/app/+admin/admin.module.ts         |  4 +++-
 3 files changed, 29 insertions(+), 2 deletions(-)
 create mode 100644 client/src/app/+admin/admin-guard.service.ts

(limited to 'client/src/app/+admin')

diff --git a/client/src/app/+admin/admin-guard.service.ts b/client/src/app/+admin/admin-guard.service.ts
new file mode 100644
index 000000000..a0ad48175
--- /dev/null
+++ b/client/src/app/+admin/admin-guard.service.ts
@@ -0,0 +1,23 @@
+import { Injectable } from '@angular/core'
+import {
+  ActivatedRouteSnapshot,
+  CanActivateChild,
+  RouterStateSnapshot,
+  CanActivate
+} from '@angular/router'
+
+import { AuthService } from '../core'
+
+@Injectable()
+export class AdminGuard implements CanActivate, CanActivateChild {
+
+  constructor (private auth: AuthService) {}
+
+  canActivate (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
+    return this.auth.isAdmin()
+  }
+
+  canActivateChild (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
+    return this.canActivate(route, state)
+  }
+}
diff --git a/client/src/app/+admin/admin-routing.module.ts b/client/src/app/+admin/admin-routing.module.ts
index 03782c258..a3845b72c 100644
--- a/client/src/app/+admin/admin-routing.module.ts
+++ b/client/src/app/+admin/admin-routing.module.ts
@@ -8,12 +8,14 @@ import { FriendsRoutes } from './friends'
 import { RequestSchedulersRoutes } from './request-schedulers'
 import { UsersRoutes } from './users'
 import { VideoAbusesRoutes } from './video-abuses'
+import { AdminGuard } from './admin-guard.service'
 
 const adminRoutes: Routes = [
   {
     path: '',
     component: AdminComponent,
-    canActivateChild: [ MetaGuard ],
+    canActivate: [ MetaGuard, AdminGuard ],
+    canActivateChild: [ MetaGuard, AdminGuard ],
     children: [
       {
         path: '',
diff --git a/client/src/app/+admin/admin.module.ts b/client/src/app/+admin/admin.module.ts
index 853085a83..786dbc15c 100644
--- a/client/src/app/+admin/admin.module.ts
+++ b/client/src/app/+admin/admin.module.ts
@@ -7,6 +7,7 @@ import { RequestSchedulersComponent, RequestSchedulersStatsComponent, RequestSch
 import { UsersComponent, UserAddComponent, UserUpdateComponent, UserListComponent, UserService } from './users'
 import { VideoAbusesComponent, VideoAbuseListComponent } from './video-abuses'
 import { SharedModule } from '../shared'
+import { AdminGuard } from './admin-guard.service'
 
 @NgModule({
   imports: [
@@ -40,7 +41,8 @@ import { SharedModule } from '../shared'
   providers: [
     FriendService,
     RequestSchedulersService,
-    UserService
+    UserService,
+    AdminGuard
   ]
 })
 export class AdminModule { }
-- 
cgit v1.2.3