· 7 years ago · Apr 18, 2018, 12:52 PM
1import { Injectable } from '@angular/core';
2import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';
3import { Observable } from 'rxjs/Observable';
4import { Router } from '@angular/router';
5import { OauthToken } from '../user/user.service';
6
7import 'rxjs/add/operator/catch';
8import 'rxjs/add/observable/throw';
9import 'rxjs/add/observable/of';
10import { OAUTH_BASIC } from '../app.constants';
11
12@Injectable()
13export class AuthInterceptor implements HttpInterceptor {
14
15 constructor(
16 private router: Router
17 ) { }
18
19 public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
20 request = this.addAuthorizationIfNeeded(request);
21 return next.handle(request)
22 .catch(err => this.handleAuthError(err));
23 }
24
25 private addAuthorizationIfNeeded(request: HttpRequest<any>): HttpRequest<any> {
26
27 const tokenStr = sessionStorage.getItem('token');
28 if (request.url === '/oauth/token') {
29 request = request.clone({
30 setHeaders: {
31 Authorization: 'Basic ' + OAUTH_BASIC
32 }
33 });
34 } else if (tokenStr) {
35 const token: OauthToken = JSON.parse(tokenStr);
36 request = request.clone({
37 setHeaders: {
38 Authorization: 'Bearer ' + token.access_token
39 }
40 });
41 }
42
43 return request;
44 }
45
46 private handleAuthError(err: HttpErrorResponse): Observable<any> {
47 if (err.status === 401) {
48 this.router.navigate(['login']);
49 }
50 return Observable.throw(err);
51 }
52}