keycloak-angular
Version:
Easy Keycloak setup for Angular applications
49 lines • 8.39 kB
JavaScript
import { Injectable } from '@angular/core';
import { from } from 'rxjs';
import { mergeMap } from 'rxjs/operators';
import { KeycloakService } from '../services/keycloak.service';
var KeycloakBearerInterceptor = (function () {
function KeycloakBearerInterceptor(keycloak) {
this.keycloak = keycloak;
}
KeycloakBearerInterceptor.prototype.isUrlExcluded = function (_a, _b) {
var method = _a.method, url = _a.url;
var urlPattern = _b.urlPattern, httpMethods = _b.httpMethods;
var httpTest = httpMethods.length === 0 ||
httpMethods.join().indexOf(method.toUpperCase()) > -1;
var urlTest = urlPattern.test(url);
return httpTest && urlTest;
};
KeycloakBearerInterceptor.prototype.intercept = function (req, next) {
var _this = this;
var _a = this.keycloak, enableBearerInterceptor = _a.enableBearerInterceptor, excludedUrls = _a.excludedUrls;
if (!enableBearerInterceptor) {
return next.handle(req);
}
var shallPass = excludedUrls.findIndex((function (item) { return _this.isUrlExcluded(req, item); })) > -1;
if (shallPass) {
return next.handle(req);
}
return from(this.keycloak.isLoggedIn()).pipe(mergeMap((function (loggedIn) { return loggedIn
? _this.handleRequestWithTokenHeader(req, next)
: next.handle(req); })));
};
KeycloakBearerInterceptor.prototype.handleRequestWithTokenHeader = function (req, next) {
return this.keycloak.addTokenToHeader(req.headers).pipe(mergeMap((function (headersWithBearer) {
var kcReq = req.clone({ headers: headersWithBearer });
return next.handle(kcReq);
})));
};
KeycloakBearerInterceptor.decorators = [
{ type: Injectable }
];
KeycloakBearerInterceptor.ctorParameters = function () { return [
{ type: KeycloakService }
]; };
return KeycloakBearerInterceptor;
}());
export { KeycloakBearerInterceptor };
if (false) {
KeycloakBearerInterceptor.prototype.keycloak;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYmVhcmVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8va2V5Y2xvYWstYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2ludGVyY2VwdG9ycy9rZXljbG9hay1iZWFyZXIuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFTL0Q7SUFFRSxtQ0FBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBVXpDLGlEQUFhLEdBQXJCLFVBQ0UsRUFBaUMsRUFDakMsRUFBNkM7WUFEM0Msa0JBQU0sRUFBRSxZQUFHO1lBQ1gsMEJBQVUsRUFBRSw0QkFBVztZQUVyQixRQUFRLEdBQ1YsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5ELE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUVsQyxPQUFPLFFBQVEsSUFBSSxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQVNNLDZDQUFTLEdBQWhCLFVBQ0UsR0FBcUIsRUFDckIsSUFBaUI7UUFGbkIsaUJBb0JDO1FBaEJPLElBQUEsa0JBQXlELEVBQXZELG9EQUF1QixFQUFFLDhCQUE4QjtRQUMvRCxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1lBRUssU0FBUyxHQUNiLFlBQVksQ0FBQyxTQUFTLEVBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBN0IsQ0FBNkIsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFDLFFBQVEsRUFBQyxVQUFDLFFBQWlCLElBQUssT0FBQSxRQUFRO1lBQ3RDLENBQUMsQ0FBQyxLQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFGWSxDQUVaLEVBQUMsQ0FDdEIsQ0FBQztJQUNKLENBQUM7SUFRTyxnRUFBNEIsR0FBcEMsVUFDRSxHQUFxQixFQUNyQixJQUFpQjtRQUVqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDckQsUUFBUSxFQUFDLFVBQUEsaUJBQWlCO2dCQUNsQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLEVBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7Z0JBdEVGLFVBQVU7OztnQkFURixlQUFlOztJQWdGeEIsZ0NBQUM7Q0FBQSxBQXZFRCxJQXVFQztTQXRFWSx5QkFBeUI7O0lBQ3hCLDZDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnRcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5pbXBvcnQgeyBFeGNsdWRlZFVybFJlZ2V4IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcblxuLyoqXG4gKiBUaGlzIGludGVyY2VwdG9yIGluY2x1ZGVzIHRoZSBiZWFyZXIgYnkgZGVmYXVsdCBpbiBhbGwgSHR0cENsaWVudCByZXF1ZXN0cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBleGNsdWRlIHNvbWUgVVJMcyBmcm9tIGFkZGluZyB0aGUgYmVhcmVyLCBwbGVhc2UsIHRha2UgYSBsb29rXG4gKiBhdCB0aGUge0BsaW5rIEtleWNsb2FrT3B0aW9uc30gYmVhcmVyRXhjbHVkZWRVcmxzIHByb3BlcnR5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSkge31cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB1cmwgaXMgZXhjbHVkZWQgZnJvbSBoYXZpbmcgdGhlIEJlYXJlciBBdXRob3JpemF0aW9uXG4gICAqIGhlYWRlciBhZGRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHBhcmFtIGV4Y2x1ZGVkVXJsUmVnZXggY29udGFpbnMgdGhlIHVybCBwYXR0ZXJuIGFuZCB0aGUgaHR0cCBtZXRob2RzLFxuICAgKiBleGNsdWRlZCBmcm9tIGFkZGluZyB0aGUgYmVhcmVyIGF0IHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqL1xuICBwcml2YXRlIGlzVXJsRXhjbHVkZWQoXG4gICAgeyBtZXRob2QsIHVybCB9OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIHsgdXJsUGF0dGVybiwgaHR0cE1ldGhvZHMgfTogRXhjbHVkZWRVcmxSZWdleFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgaHR0cFRlc3QgPVxuICAgICAgaHR0cE1ldGhvZHMubGVuZ3RoID09PSAwIHx8XG4gICAgICBodHRwTWV0aG9kcy5qb2luKCkuaW5kZXhPZihtZXRob2QudG9VcHBlckNhc2UoKSkgPiAtMTtcblxuICAgIGxldCB1cmxUZXN0ID0gdXJsUGF0dGVybi50ZXN0KHVybCk7XG5cbiAgICByZXR1cm4gaHR0cFRlc3QgJiYgdXJsVGVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcmNlcHQgaW1wbGVtZW50YXRpb24gdGhhdCBjaGVja3MgaWYgdGhlIHJlcXVlc3QgdXJsIG1hdGNoZXMgdGhlIGV4Y2x1ZGVkVXJscy5cbiAgICogSWYgbm90LCBhZGRzIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciB0byB0aGUgcmVxdWVzdCBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqXG4gICAqIEBwYXJhbSByZXFcbiAgICogQHBhcmFtIG5leHRcbiAgICovXG4gIHB1YmxpYyBpbnRlcmNlcHQoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBjb25zdCB7IGVuYWJsZUJlYXJlckludGVyY2VwdG9yLCBleGNsdWRlZFVybHMgfSA9IHRoaXMua2V5Y2xvYWs7XG4gICAgaWYgKCFlbmFibGVCZWFyZXJJbnRlcmNlcHRvcikge1xuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhbGxQYXNzOiBib29sZWFuID1cbiAgICAgIGV4Y2x1ZGVkVXJscy5maW5kSW5kZXgoaXRlbSA9PiB0aGlzLmlzVXJsRXhjbHVkZWQocmVxLCBpdGVtKSkgPiAtMTtcbiAgICBpZiAoc2hhbGxQYXNzKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbSh0aGlzLmtleWNsb2FrLmlzTG9nZ2VkSW4oKSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChsb2dnZWRJbjogYm9vbGVhbikgPT4gbG9nZ2VkSW5cbiAgICAgICAgPyB0aGlzLmhhbmRsZVJlcXVlc3RXaXRoVG9rZW5IZWFkZXIocmVxLCBuZXh0KVxuICAgICAgICA6IG5leHQuaGFuZGxlKHJlcSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSB0b2tlbiBvZiB0aGUgY3VycmVudCB1c2VyIHRvIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0gcmVxXG4gICAqIEBwYXJhbSBuZXh0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RXaXRoVG9rZW5IZWFkZXIoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMua2V5Y2xvYWsuYWRkVG9rZW5Ub0hlYWRlcihyZXEuaGVhZGVycykucGlwZShcbiAgICAgIG1lcmdlTWFwKGhlYWRlcnNXaXRoQmVhcmVyID0+IHtcbiAgICAgICAgY29uc3Qga2NSZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiBoZWFkZXJzV2l0aEJlYXJlciB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGtjUmVxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19