UNPKG

@nebular/auth

Version:
50 lines 6.86 kB
import { Inject, Injectable } from '@angular/core'; import { switchMap } from 'rxjs/operators'; import { NbAuthService } from '../auth.service'; import { NB_AUTH_TOKEN_INTERCEPTOR_FILTER } from '../../auth.options'; import * as i0 from "@angular/core"; export class NbAuthJWTInterceptor { constructor(injector, filter) { this.injector = injector; this.filter = filter; } intercept(req, next) { // do not intercept request whose urls are filtered by the injected filter if (!this.filter(req)) { return this.authService.isAuthenticatedOrRefresh() .pipe(switchMap(authenticated => { if (authenticated) { return this.authService.getToken().pipe(switchMap((token) => { const JWT = `Bearer ${token.getValue()}`; req = req.clone({ setHeaders: { Authorization: JWT, }, }); return next.handle(req); })); } else { // Request is sent to server without authentication so that the client code // receives the 401/403 error and can act as desired ('session expired', redirect to login, aso) return next.handle(req); } })); } else { return next.handle(req); } } get authService() { return this.injector.get(NbAuthService); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NbAuthJWTInterceptor, deps: [{ token: i0.Injector }, { token: NB_AUTH_TOKEN_INTERCEPTOR_FILTER }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NbAuthJWTInterceptor }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NbAuthJWTInterceptor, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined, decorators: [{ type: Inject, args: [NB_AUTH_TOKEN_INTERCEPTOR_FILTER] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9hdXRoL3NlcnZpY2VzL2ludGVyY2VwdG9ycy9qd3QtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFvQixRQUFrQixFQUMwQixNQUFNO1FBRGxELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDMEIsV0FBTSxHQUFOLE1BQU0sQ0FBQTtJQUN0RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsMEVBQTBFO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO2lCQUMvQyxJQUFJLENBQ0gsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7d0JBQy9CLE1BQU0sR0FBRyxHQUFHLFVBQVUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ3pDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDOzRCQUNkLFVBQVUsRUFBRTtnQ0FDVixhQUFhLEVBQUUsR0FBRzs2QkFDbkI7eUJBQ0YsQ0FBQyxDQUFDO3dCQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0wsMkVBQTJFO29CQUMzRSxnR0FBZ0c7b0JBQ2pHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OEdBdENVLG9CQUFvQiwwQ0FHWCxnQ0FBZ0M7a0hBSHpDLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVTs7MEJBSUksTUFBTTsyQkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmJBdXRoVG9rZW4gfSBmcm9tICcuLi90b2tlbi90b2tlbic7XG5pbXBvcnQgeyBOYkF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE5CX0FVVEhfVE9LRU5fSU5URVJDRVBUT1JfRklMVEVSIH0gZnJvbSAnLi4vLi4vYXV0aC5vcHRpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5iQXV0aEpXVEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgQEluamVjdChOQl9BVVRIX1RPS0VOX0lOVEVSQ0VQVE9SX0ZJTFRFUikgcHJvdGVjdGVkIGZpbHRlcikge1xuICB9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgLy8gZG8gbm90IGludGVyY2VwdCByZXF1ZXN0IHdob3NlIHVybHMgYXJlIGZpbHRlcmVkIGJ5IHRoZSBpbmplY3RlZCBmaWx0ZXJcbiAgICAgIGlmICghdGhpcy5maWx0ZXIocmVxKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWRPclJlZnJlc2goKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGF1dGhlbnRpY2F0ZWQgPT4ge1xuICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHRva2VuOiBOYkF1dGhUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEpXVCA9IGBCZWFyZXIgJHt0b2tlbi5nZXRWYWx1ZSgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogSldULFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIC8vIFJlcXVlc3QgaXMgc2VudCB0byBzZXJ2ZXIgd2l0aG91dCBhdXRoZW50aWNhdGlvbiBzbyB0aGF0IHRoZSBjbGllbnQgY29kZVxuICAgICAgICAgICAgICAgICAvLyByZWNlaXZlcyB0aGUgNDAxLzQwMyBlcnJvciBhbmQgY2FuIGFjdCBhcyBkZXNpcmVkICgnc2Vzc2lvbiBleHBpcmVkJywgcmVkaXJlY3QgdG8gbG9naW4sIGFzbylcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYXV0aFNlcnZpY2UoKTogTmJBdXRoU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KE5iQXV0aFNlcnZpY2UpO1xuICB9XG5cbn1cbiJdfQ==