@kephas/ngx-oidc
Version:
Provides the integration of the OIDC API with Kephas and Angular 12+.
71 lines • 8.12 kB
JavaScript
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=