@nebular/auth
Version:
@nebular/auth
50 lines • 6.83 kB
JavaScript
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);
}
}
NbAuthJWTInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NbAuthJWTInterceptor, deps: [{ token: i0.Injector }, { token: NB_AUTH_TOKEN_INTERCEPTOR_FILTER }], target: i0.ɵɵFactoryTarget.Injectable });
NbAuthJWTInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NbAuthJWTInterceptor });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NbAuthJWTInterceptor, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
type: Inject,
args: [NB_AUTH_TOKEN_INTERCEPTOR_FILTER]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9hdXRoL3NlcnZpY2VzL2ludGVyY2VwdG9ycy9qd3QtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFvQixRQUFrQixFQUMwQixNQUFNO1FBRGxELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDMEIsV0FBTSxHQUFOLE1BQU0sQ0FBQTtJQUN0RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsMEVBQTBFO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRTtpQkFDL0MsSUFBSSxDQUNILFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxhQUFhLEVBQUU7b0JBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFO3dCQUMvQixNQUFNLEdBQUcsR0FBRyxVQUFVLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUN6QyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs0QkFDZCxVQUFVLEVBQUU7Z0NBQ1YsYUFBYSxFQUFFLEdBQUc7NkJBQ25CO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUNILENBQUE7aUJBQ0o7cUJBQU07b0JBQ0osMkVBQTJFO29CQUMzRSxnR0FBZ0c7b0JBQ2pHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1NBQ0o7YUFBTTtZQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDOztpSEF0Q1Usb0JBQW9CLDBDQUdYLGdDQUFnQztxSEFIekMsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQUlJLE1BQU07MkJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5iQXV0aFRva2VuIH0gZnJvbSAnLi4vdG9rZW4vdG9rZW4nO1xuaW1wb3J0IHsgTmJBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBOQl9BVVRIX1RPS0VOX0lOVEVSQ0VQVE9SX0ZJTFRFUiB9IGZyb20gJy4uLy4uL2F1dGgub3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOYkF1dGhKV1RJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIEBJbmplY3QoTkJfQVVUSF9UT0tFTl9JTlRFUkNFUFRPUl9GSUxURVIpIHByb3RlY3RlZCBmaWx0ZXIpIHtcbiAgfVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIC8vIGRvIG5vdCBpbnRlcmNlcHQgcmVxdWVzdCB3aG9zZSB1cmxzIGFyZSBmaWx0ZXJlZCBieSB0aGUgaW5qZWN0ZWQgZmlsdGVyXG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKHJlcSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkT3JSZWZyZXNoKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChhdXRoZW50aWNhdGVkID0+IHtcbiAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh0b2tlbjogTmJBdXRoVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKV1QgPSBgQmVhcmVyICR7dG9rZW4uZ2V0VmFsdWUoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEpXVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IGlzIHNlbnQgdG8gc2VydmVyIHdpdGhvdXQgYXV0aGVudGljYXRpb24gc28gdGhhdCB0aGUgY2xpZW50IGNvZGVcbiAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXMgdGhlIDQwMS80MDMgZXJyb3IgYW5kIGNhbiBhY3QgYXMgZGVzaXJlZCAoJ3Nlc3Npb24gZXhwaXJlZCcsIHJlZGlyZWN0IHRvIGxvZ2luLCBhc28pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGF1dGhTZXJ2aWNlKCk6IE5iQXV0aFNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChOYkF1dGhTZXJ2aWNlKTtcbiAgfVxuXG59XG4iXX0=