From 6df974d1f419589234983791cccbd588af4dcf3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Pu=C5=A1?= <pusradek@fit.cvut.cz>
Date: Fri, 25 Oct 2019 04:05:01 +0200
Subject: [PATCH] jwt interceptor

---
 Core/Core/ClientApp/src/app/app.module.ts     |  6 +++--
 .../src/app/helpers/jwt.interceptor.ts        | 23 +++++++++++++++++++
 .../ClientApp/src/app/login/login.service.ts  |  1 -
 Core/Core/Core.csproj                         |  2 ++
 4 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 Core/Core/ClientApp/src/app/helpers/jwt.interceptor.ts

diff --git a/Core/Core/ClientApp/src/app/app.module.ts b/Core/Core/ClientApp/src/app/app.module.ts
index 739979d..e898241 100644
--- a/Core/Core/ClientApp/src/app/app.module.ts
+++ b/Core/Core/ClientApp/src/app/app.module.ts
@@ -1,7 +1,7 @@
 import { BrowserModule } from '@angular/platform-browser';
 import { NgModule } from '@angular/core';
 import { FormsModule } from '@angular/forms';
-import { HttpClientModule } from '@angular/common/http';
+import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
 import { RouterModule } from '@angular/router';
 import { ChartModule } from 'angular-highcharts';
 
@@ -16,6 +16,7 @@ import { HomeComponent } from './home/home.component';
 import { RegistrationComponent } from './registration/registration.component';
 import { AuthGuard } from './auth.guard';
 import { RegistrationService } from './registration/registration.service';
+import { JwtInterceptor } from './helpers/jwt.interceptor';
 
 @NgModule({
   declarations: [
@@ -43,7 +44,8 @@ import { RegistrationService } from './registration/registration.service';
     ImportService,
     LoginService,
     AuthGuard,
-    RegistrationService
+    RegistrationService,
+    { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true }
   ],
   bootstrap: [AppComponent]
 })
diff --git a/Core/Core/ClientApp/src/app/helpers/jwt.interceptor.ts b/Core/Core/ClientApp/src/app/helpers/jwt.interceptor.ts
new file mode 100644
index 0000000..fb5daaa
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/helpers/jwt.interceptor.ts
@@ -0,0 +1,23 @@
+import { Injectable } from "@angular/core";
+import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from "@angular/common/http";
+import { LoginService } from "../login/login.service";
+import { Observable } from "rxjs";
+
+@Injectable({
+  providedIn: 'root'
+})
+
+export class JwtInterceptor implements HttpInterceptor {
+
+  constructor(private LoginService: LoginService) { }
+
+  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+    let currentuser = this.LoginService.IsLoggedIn;
+    let token = localStorage.getItem('jwt');
+
+    if (currentuser && token !== undefined)
+      request = request.clone({ setHeaders: { Authorization: `Bearer ${token}`} });
+
+    return next.handle(request);
+  }
+}
diff --git a/Core/Core/ClientApp/src/app/login/login.service.ts b/Core/Core/ClientApp/src/app/login/login.service.ts
index 064f051..e501cb9 100644
--- a/Core/Core/ClientApp/src/app/login/login.service.ts
+++ b/Core/Core/ClientApp/src/app/login/login.service.ts
@@ -3,7 +3,6 @@ import { HttpClient } from '@angular/common/http';
 import { Router } from '@angular/router';
 import { BehaviorSubject, Observable } from 'rxjs';
 import { map } from 'rxjs/operators';
-import { error } from 'util';
 
 @Injectable({
   providedIn: 'root'
diff --git a/Core/Core/Core.csproj b/Core/Core/Core.csproj
index 4a9b543..cec1023 100644
--- a/Core/Core/Core.csproj
+++ b/Core/Core/Core.csproj
@@ -38,12 +38,14 @@
 
   <ItemGroup>
     <None Remove="ClientApp\src\app\app.routing.module.ts" />
+    <None Remove="ClientApp\src\app\helpers\jwt.interceptor.ts" />
     <None Remove="ClientApp\src\app\import\import.service.ts" />
     <None Remove="ClientApp\src\app\login\login.service.ts" />
     <None Remove="ClientApp\src\app\registration\registration.service.ts" />
   </ItemGroup>
 
   <ItemGroup>
+    <TypeScriptCompile Include="ClientApp\src\app\helpers\jwt.interceptor.ts" />
     <TypeScriptCompile Include="ClientApp\src\app\import\import.service.ts" />
     <TypeScriptCompile Include="ClientApp\src\app\login\login.service.ts">
       <SubType>Code</SubType>
-- 
GitLab