UNPKG

@ebondu/angular2-keycloak

Version:
100 lines 13.7 kB
/* * Copyright 2018 ebondu and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * URI parser. */ export class URIParser { static initialParse(uriToParse, responseMode) { let baseUri; let queryString; let fragmentString; const questionMarkIndex = uriToParse.indexOf('?'); let fragmentIndex = uriToParse.indexOf('#', questionMarkIndex + 1); if (questionMarkIndex === -1 && fragmentIndex === -1) { baseUri = uriToParse; } else if (questionMarkIndex !== -1) { baseUri = uriToParse.substring(0, questionMarkIndex); queryString = uriToParse.substring(questionMarkIndex + 1); if (fragmentIndex !== -1) { fragmentIndex = queryString.indexOf('#'); fragmentString = queryString.substring(fragmentIndex + 1); queryString = queryString.substring(0, fragmentIndex); } } else { baseUri = uriToParse.substring(0, fragmentIndex); fragmentString = uriToParse.substring(fragmentIndex + 1); } return { baseUri: baseUri, queryString: queryString, fragmentString: fragmentString }; } static parseParams(paramString) { const result = {}; const params = paramString.split('&'); for (let i = 0; i < params.length; i++) { const p = params[i].split('='); const paramName = decodeURIComponent(p[0]); const paramValue = decodeURIComponent(p[1]); result[paramName] = paramValue; } return result; } static handleQueryParam(paramName, paramValue, oauth) { const supportedOAuthParams = ['code', 'state', 'error', 'session_state', 'error_description']; for (let i = 0; i < supportedOAuthParams.length; i++) { if (paramName === supportedOAuthParams[i]) { oauth[paramName] = paramValue; return true; } } return false; } static parseUri(uriToParse, responseMode) { const parsedUri = this.initialParse(decodeURIComponent(uriToParse), responseMode); let queryParams = {}; if (parsedUri.queryString) { queryParams = this.parseParams(parsedUri.queryString); } const oauth = { newUrl: parsedUri.baseUri }; Object.keys(queryParams).forEach(param => { switch (param) { case 'redirect_fragment': oauth.fragment = queryParams[param]; break; case 'prompt': oauth.prompt = queryParams[param]; break; default: if (responseMode !== 'query' || !this.handleQueryParam(param, queryParams[param], oauth)) { oauth.newUrl += (oauth.newUrl.indexOf('?') === -1 ? '?' : '&') + param + '=' + queryParams[param]; } break; } }); if (responseMode === 'fragment') { let fragmentParams = {}; if (parsedUri.fragmentString) { fragmentParams = this.parseParams(parsedUri.fragmentString); } Object.keys(fragmentParams).forEach(param => { oauth[param] = fragmentParams[param]; }); } return oauth; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsudXRpbHMuVVJJUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWJvbmR1L2FuZ3VsYXIta2V5Y2xvYWsvc3JjL2xpYi91dGlsL2tleWNsb2FrLnV0aWxzLlVSSVBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7R0FFRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBRXBCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxZQUFvQjtRQUMxRCxJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxjQUFzQixDQUFDO1FBRTNCLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JELE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNyRCxXQUFXLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixhQUFhLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFB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QkFDRSxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN6RixLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BHLENBQUM7b0JBQ0QsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDN0IsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxOCBlYm9uZHUgYW5kL29yIGl0cyBhZmZpbGlhdGVzXG4gKiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIGFzIGluZGljYXRlZCBieSB0aGUgQGF1dGhvciB0YWdzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogVVJJIHBhcnNlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFVSSVBhcnNlciB7XG5cbiAgc3RhdGljIGluaXRpYWxQYXJzZSh1cmlUb1BhcnNlOiBzdHJpbmcsIHJlc3BvbnNlTW9kZTogc3RyaW5nKSB7XG4gICAgbGV0IGJhc2VVcmk6IHN0cmluZztcbiAgICBsZXQgcXVlcnlTdHJpbmc6IHN0cmluZztcbiAgICBsZXQgZnJhZ21lbnRTdHJpbmc6IHN0cmluZztcblxuICAgIGNvbnN0IHF1ZXN0aW9uTWFya0luZGV4ID0gdXJpVG9QYXJzZS5pbmRleE9mKCc/Jyk7XG4gICAgbGV0IGZyYWdtZW50SW5kZXggPSB1cmlUb1BhcnNlLmluZGV4T2YoJyMnLCBxdWVzdGlvbk1hcmtJbmRleCArIDEpO1xuICAgIGlmIChxdWVzdGlvbk1hcmtJbmRleCA9PT0gLTEgJiYgZnJhZ21lbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIGJhc2VVcmkgPSB1cmlUb1BhcnNlO1xuICAgIH0gZWxzZSBpZiAocXVlc3Rpb25NYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICBiYXNlVXJpID0gdXJpVG9QYXJzZS5zdWJzdHJpbmcoMCwgcXVlc3Rpb25NYXJrSW5kZXgpO1xuICAgICAgcXVlcnlTdHJpbmcgPSB1cmlUb1BhcnNlLnN1YnN0cmluZyhxdWVzdGlvbk1hcmtJbmRleCArIDEpO1xuICAgICAgaWYgKGZyYWdtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGZyYWdtZW50SW5kZXggPSBxdWVyeVN0cmluZy5pbmRleE9mKCcjJyk7XG4gICAgICAgIGZyYWdtZW50U3RyaW5nID0gcXVlcnlTdHJpbmcuc3Vic3RyaW5nKGZyYWdtZW50SW5kZXggKyAxKTtcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZy5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VVcmkgPSB1cmlUb1BhcnNlLnN1YnN0cmluZygwLCBmcmFnbWVudEluZGV4KTtcbiAgICAgIGZyYWdtZW50U3RyaW5nID0gdXJpVG9QYXJzZS5zdWJzdHJpbmcoZnJhZ21lbnRJbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB7YmFzZVVyaTogYmFzZVVyaSwgcXVlcnlTdHJpbmc6IHF1ZXJ5U3RyaW5nLCBmcmFnbWVudFN0cmluZzogZnJhZ21lbnRTdHJpbmd9O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlUGFyYW1zKHBhcmFtU3RyaW5nOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGNvbnN0IHBhcmFtcyA9IHBhcmFtU3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKTtcbiAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChwWzBdKTtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocFsxXSk7XG4gICAgICByZXN1bHRbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgaGFuZGxlUXVlcnlQYXJhbShwYXJhbU5hbWU6IHN0cmluZywgcGFyYW1WYWx1ZTogc3RyaW5nLCBvYXV0aDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3VwcG9ydGVkT0F1dGhQYXJhbXMgPSBbJ2NvZGUnLCAnc3RhdGUnLCAnZXJyb3InLCAnc2Vzc2lvbl9zdGF0ZScsICdlcnJvcl9kZXNjcmlwdGlvbiddO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRPQXV0aFBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBhcmFtTmFtZSA9PT0gc3VwcG9ydGVkT0F1dGhQYXJhbXNbaV0pIHtcbiAgICAgICAgb2F1dGhbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIHN0YXRpYyBwYXJzZVVyaSh1cmlUb1BhcnNlOiBzdHJpbmcsIHJlc3BvbnNlTW9kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkVXJpID0gdGhpcy5pbml0aWFsUGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHVyaVRvUGFyc2UpLCByZXNwb25zZU1vZGUpO1xuXG4gICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTtcbiAgICBpZiAocGFyc2VkVXJpLnF1ZXJ5U3RyaW5nKSB7XG4gICAgICBxdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VQYXJhbXMocGFyc2VkVXJpLnF1ZXJ5U3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvYXV0aDogYW55ID0ge25ld1VybDogcGFyc2VkVXJpLmJhc2VVcml9O1xuXG4gICAgT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgc3dpdGNoIChwYXJhbSkge1xuICAgICAgICBjYXNlICdyZWRpcmVjdF9mcmFnbWVudCc6XG4gICAgICAgICAgb2F1dGguZnJhZ21lbnQgPSBxdWVyeVBhcmFtc1twYXJhbV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Byb21wdCc6XG4gICAgICAgICAgb2F1dGgucHJvbXB0ID0gcXVlcnlQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChyZXNwb25zZU1vZGUgIT09ICdxdWVyeScgfHwgIXRoaXMuaGFuZGxlUXVlcnlQYXJhbShwYXJhbSwgcXVlcnlQYXJhbXNbcGFyYW1dLCBvYXV0aCkpIHtcbiAgICAgICAgICAgIG9hdXRoLm5ld1VybCArPSAob2F1dGgubmV3VXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgcGFyYW0gKyAnPScgKyBxdWVyeVBhcmFtc1twYXJhbV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlTW9kZSA9PT0gJ2ZyYWdtZW50Jykge1xuICAgICAgbGV0IGZyYWdtZW50UGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgIGlmIChwYXJzZWRVcmkuZnJhZ21lbnRTdHJpbmcpIHtcbiAgICAgICAgZnJhZ21lbnRQYXJhbXMgPSB0aGlzLnBhcnNlUGFyYW1zKHBhcnNlZFVyaS5mcmFnbWVudFN0cmluZyk7XG4gICAgICB9XG4gICAgICBPYmplY3Qua2V5cyhmcmFnbWVudFBhcmFtcykuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgIG9hdXRoW3BhcmFtXSA9IGZyYWdtZW50UGFyYW1zW3BhcmFtXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb2F1dGg7XG4gIH1cbn1cbiJdfQ==