UNPKG

@kephas/ngx-oidc

Version:

Provides the integration of the OIDC API with Kephas and Angular 12+.

71 lines 8.12 kB
import { AuthenticationService } from './authentication.service'; import { mergeMap } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./authentication.service"; /** * Interceptor handling the authorization. * * @export * @class AuthorizeInterceptor * @implements {HttpInterceptor} */ export class AuthorizeInterceptor { /** * Creates an instance of AuthorizeInterceptor. * @param {AuthenticationService} authorize The authorization service. * @memberof AuthorizeInterceptor */ constructor(authorize) { this.authorize = authorize; } /** * Intercepts the request. * * @param {HttpRequest<any>} request * @param {HttpHandler} next * @return {*} {Observable<HttpEvent<any>>} * @memberof AuthorizeInterceptor */ intercept(request, next) { return this.authorize.getAccessToken() .pipe(mergeMap(token => this.processRequestWithToken(token, request, next))); } // Checks if there is an access_token available in the authorize service // and adds it to the request in case it's targeted at the same origin as the // single page application. processRequestWithToken(token, req, next) { if (!!token && this.isSameOriginUrl(req)) { req = req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }); } return next.handle(req); } isSameOriginUrl(req) { // It's an absolute url with the same origin. if (req.url.startsWith(`${window.location.origin}/`)) { return true; } // It's a protocol relative url with the same origin. // For example: //www.example.com/api/Products if (req.url.startsWith(`//${window.location.host}/`)) { return true; } // It's a relative url like /api/Products if (/^\/[^\/].*/.test(req.url)) { return true; } // It's an absolute or protocol relative url that // doesn't have the same origin. return false; } } AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthorizeInterceptor, deps: [{ token: i1.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable }); AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthorizeInterceptor }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthorizeInterceptor, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.AuthenticationService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2VwaGFzL25neC1vaWRjL3NyYy9saWIvYXV0aG9yaXplLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFFM0M7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQjs7OztPQUlHO0lBQ0gsWUFBb0IsU0FBZ0M7UUFBaEMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFO2FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFDN0UsMkJBQTJCO0lBQ25CLHVCQUF1QixDQUFDLEtBQXlCLEVBQUUsR0FBcUIsRUFBRSxJQUFpQjtRQUNqRyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFO2lCQUNqQzthQUNGLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQUMsR0FBUTtRQUM5Qiw2Q0FBNkM7UUFDN0MsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCx5Q0FBeUM7UUFDekMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsaURBQWlEO1FBQ2pELGdDQUFnQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O2lIQXpEVSxvQkFBb0I7cUhBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCwgSHR0cFJlcXVlc3QsIEh0dHBJbnRlcmNlcHRvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEludGVyY2VwdG9yIGhhbmRsaW5nIHRoZSBhdXRob3JpemF0aW9uLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBBdXRob3JpemVJbnRlcmNlcHRvclxyXG4gKiBAaW1wbGVtZW50cyB7SHR0cEludGVyY2VwdG9yfVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQXV0aG9yaXplSW50ZXJjZXB0b3IuXHJcbiAgICogQHBhcmFtIHtBdXRoZW50aWNhdGlvblNlcnZpY2V9IGF1dGhvcml6ZSBUaGUgYXV0aG9yaXphdGlvbiBzZXJ2aWNlLlxyXG4gICAqIEBtZW1iZXJvZiBBdXRob3JpemVJbnRlcmNlcHRvclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aG9yaXplOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVyY2VwdHMgdGhlIHJlcXVlc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0h0dHBSZXF1ZXN0PGFueT59IHJlcXVlc3RcclxuICAgKiBAcGFyYW0ge0h0dHBIYW5kbGVyfSBuZXh0XHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+Pn1cclxuICAgKiBAbWVtYmVyb2YgQXV0aG9yaXplSW50ZXJjZXB0b3JcclxuICAgKi9cclxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemUuZ2V0QWNjZXNzVG9rZW4oKVxyXG4gICAgICAucGlwZShtZXJnZU1hcCh0b2tlbiA9PiB0aGlzLnByb2Nlc3NSZXF1ZXN0V2l0aFRva2VuKHRva2VuLCByZXF1ZXN0LCBuZXh0KSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2tzIGlmIHRoZXJlIGlzIGFuIGFjY2Vzc190b2tlbiBhdmFpbGFibGUgaW4gdGhlIGF1dGhvcml6ZSBzZXJ2aWNlXHJcbiAgLy8gYW5kIGFkZHMgaXQgdG8gdGhlIHJlcXVlc3QgaW4gY2FzZSBpdCdzIHRhcmdldGVkIGF0IHRoZSBzYW1lIG9yaWdpbiBhcyB0aGVcclxuICAvLyBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbi5cclxuICBwcml2YXRlIHByb2Nlc3NSZXF1ZXN0V2l0aFRva2VuKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcclxuICAgIGlmICghIXRva2VuICYmIHRoaXMuaXNTYW1lT3JpZ2luVXJsKHJlcSkpIHtcclxuICAgICAgcmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICBzZXRIZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2FtZU9yaWdpblVybChyZXE6IGFueSkge1xyXG4gICAgLy8gSXQncyBhbiBhYnNvbHV0ZSB1cmwgd2l0aCB0aGUgc2FtZSBvcmlnaW4uXHJcbiAgICBpZiAocmVxLnVybC5zdGFydHNXaXRoKGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEl0J3MgYSBwcm90b2NvbCByZWxhdGl2ZSB1cmwgd2l0aCB0aGUgc2FtZSBvcmlnaW4uXHJcbiAgICAvLyBGb3IgZXhhbXBsZTogLy93d3cuZXhhbXBsZS5jb20vYXBpL1Byb2R1Y3RzXHJcbiAgICBpZiAocmVxLnVybC5zdGFydHNXaXRoKGAvLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L2ApKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEl0J3MgYSByZWxhdGl2ZSB1cmwgbGlrZSAvYXBpL1Byb2R1Y3RzXHJcbiAgICBpZiAoL15cXC9bXlxcL10uKi8udGVzdChyZXEudXJsKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJdCdzIGFuIGFic29sdXRlIG9yIHByb3RvY29sIHJlbGF0aXZlIHVybCB0aGF0XHJcbiAgICAvLyBkb2Vzbid0IGhhdmUgdGhlIHNhbWUgb3JpZ2luLlxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=