UNPKG

6.83 kBJavaScriptView Raw
1import { Inject, Injectable } from '@angular/core';
2import { switchMap } from 'rxjs/operators';
3import { NbAuthService } from '../auth.service';
4import { NB_AUTH_TOKEN_INTERCEPTOR_FILTER } from '../../auth.options';
5import * as i0 from "@angular/core";
6export class NbAuthJWTInterceptor {
7 constructor(injector, filter) {
8 this.injector = injector;
9 this.filter = filter;
10 }
11 intercept(req, next) {
12 // do not intercept request whose urls are filtered by the injected filter
13 if (!this.filter(req)) {
14 return this.authService.isAuthenticatedOrRefresh()
15 .pipe(switchMap(authenticated => {
16 if (authenticated) {
17 return this.authService.getToken().pipe(switchMap((token) => {
18 const JWT = `Bearer ${token.getValue()}`;
19 req = req.clone({
20 setHeaders: {
21 Authorization: JWT,
22 },
23 });
24 return next.handle(req);
25 }));
26 }
27 else {
28 // Request is sent to server without authentication so that the client code
29 // receives the 401/403 error and can act as desired ('session expired', redirect to login, aso)
30 return next.handle(req);
31 }
32 }));
33 }
34 else {
35 return next.handle(req);
36 }
37 }
38 get authService() {
39 return this.injector.get(NbAuthService);
40 }
41}
42NbAuthJWTInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NbAuthJWTInterceptor, deps: [{ token: i0.Injector }, { token: NB_AUTH_TOKEN_INTERCEPTOR_FILTER }], target: i0.ɵɵFactoryTarget.Injectable });
43NbAuthJWTInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NbAuthJWTInterceptor });
44i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NbAuthJWTInterceptor, decorators: [{
45 type: Injectable
46 }], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
47 type: Inject,
48 args: [NB_AUTH_TOKEN_INTERCEPTOR_FILTER]
49 }] }]; } });
50//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9hdXRoL3NlcnZpY2VzL2ludGVyY2VwdG9ycy9qd3QtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFvQixRQUFrQixFQUMwQixNQUFNO1FBRGxELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDMEIsV0FBTSxHQUFOLE1BQU0sQ0FBQTtJQUN0RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsMEVBQTBFO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRTtpQkFDL0MsSUFBSSxDQUNILFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxhQUFhLEVBQUU7b0JBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFO3dCQUMvQixNQUFNLEdBQUcsR0FBRyxVQUFVLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUN6QyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs0QkFDZCxVQUFVLEVBQUU7Z0NBQ1YsYUFBYSxFQUFFLEdBQUc7NkJBQ25CO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUNILENBQUE7aUJBQ0o7cUJBQU07b0JBQ0osMkVBQTJFO29CQUMzRSxnR0FBZ0c7b0JBQ2pHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1NBQ0o7YUFBTTtZQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDOztrSEF0Q1Usb0JBQW9CLDBDQUdYLGdDQUFnQztzSEFIekMsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQUlJLE1BQU07MkJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5iQXV0aFRva2VuIH0gZnJvbSAnLi4vdG9rZW4vdG9rZW4nO1xuaW1wb3J0IHsgTmJBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBOQl9BVVRIX1RPS0VOX0lOVEVSQ0VQVE9SX0ZJTFRFUiB9IGZyb20gJy4uLy4uL2F1dGgub3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOYkF1dGhKV1RJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIEBJbmplY3QoTkJfQVVUSF9UT0tFTl9JTlRFUkNFUFRPUl9GSUxURVIpIHByb3RlY3RlZCBmaWx0ZXIpIHtcbiAgfVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIC8vIGRvIG5vdCBpbnRlcmNlcHQgcmVxdWVzdCB3aG9zZSB1cmxzIGFyZSBmaWx0ZXJlZCBieSB0aGUgaW5qZWN0ZWQgZmlsdGVyXG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKHJlcSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkT3JSZWZyZXNoKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChhdXRoZW50aWNhdGVkID0+IHtcbiAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh0b2tlbjogTmJBdXRoVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKV1QgPSBgQmVhcmVyICR7dG9rZW4uZ2V0VmFsdWUoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEpXVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IGlzIHNlbnQgdG8gc2VydmVyIHdpdGhvdXQgYXV0aGVudGljYXRpb24gc28gdGhhdCB0aGUgY2xpZW50IGNvZGVcbiAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXMgdGhlIDQwMS80MDMgZXJyb3IgYW5kIGNhbiBhY3QgYXMgZGVzaXJlZCAoJ3Nlc3Npb24gZXhwaXJlZCcsIHJlZGlyZWN0IHRvIGxvZ2luLCBhc28pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGF1dGhTZXJ2aWNlKCk6IE5iQXV0aFNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChOYkF1dGhTZXJ2aWNlKTtcbiAgfVxuXG59XG4iXX0=
\No newline at end of file