angular-simple-oidc
Version:
Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.
53 lines • 7.4 kB
JavaScript
const defaultUrlRegExp = /^(\w+:\/\/[^/?]+)?(.*?)(\?.+)?$/;
const protocolRelativeUrlRegExp = /^(\/\/[^/?]+)(.*?)(\?.+)?$/;
function splitUrl(partsStr, { protocolRelative }) {
const match = (protocolRelative && partsStr.match(protocolRelativeUrlRegExp)) ||
partsStr.match(defaultUrlRegExp) ||
[];
const beforePathname = match[1] || '';
const pathname = (match[2] || '')
// Remove leading slashes
.replace(/^\/+/, '')
// Remove trailing slashes
.replace(/\/+$/, '')
// Normalize consecutive slashes to just one
.replace(/\/+/g, '/');
const afterPathname = (match[3] || '');
return { beforePathname, pathname, afterPathname };
}
export function urlJoin(...parts) {
const lastArg = parts[parts.length - 1];
let options;
// If last argument is an object, then it's the options
// Note that null is an object, so we verify if is truthy
if (lastArg && typeof lastArg === 'object') {
options = lastArg;
parts = parts.slice(0, -1);
}
// Parse options
options = Object.assign({ leadingSlash: true, trailingSlash: false, protocolRelative: false }, options);
// Join parts
const partsStr = parts
.filter((part) => typeof part === 'string' || typeof part === 'number')
.join('/');
// Split the parts into beforePathname, pathname, and afterPathname
// (scheme://host)(/pathname)(?queryString)
const { beforePathname, pathname, afterPathname } = splitUrl(partsStr, options);
let url = '';
// Start with beforePathname if not empty (http://google.com)
if (beforePathname) {
url += beforePathname + (pathname ? '/' : '');
// Otherwise start with the leading slash
}
else if (options.leadingSlash) {
url += '/';
}
// Add pathname (foo/bar)
url += pathname;
// Add trailing slash
if (options.trailingSlash && !url.endsWith('/')) {
url += '/';
}
return url;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWpvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXNpbXBsZS1vaWRjL3NyYy9saWIvdXRpbHMvdXJsLWpvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUMzRCxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDO0FBRS9ELFNBQVMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixFQUFFO0lBQzVDLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsRUFBRSxDQUFDO0lBRVAsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IseUJBQXlCO1NBQ3hCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLDBCQUEwQjtTQUN6QixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQiw0Q0FBNEM7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLEtBQWU7SUFDdEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxPQUFPLENBQUM7SUFFWix1REFBdUQ7SUFDdkQseURBQXlEO0lBQ3pELElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtRQUN4QyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsZ0JBQWdCO0lBQ2hCLE9BQU8sbUJBQ0gsWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLEtBQUssRUFDcEIsZ0JBQWdCLEVBQUUsS0FBSyxJQUNwQixPQUFPLENBQ2IsQ0FBQztJQUVGLGFBQWE7SUFDYixNQUFNLFFBQVEsR0FBRyxLQUFLO1NBQ2pCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztTQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixtRUFBbUU7SUFDbkUsMkNBQTJDO0lBQzNDLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFaEYsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRWIsNkRBQTZEO0lBQzdELElBQUksY0FBYyxFQUFFO1FBQ2hCLEdBQUcsSUFBSSxjQUFjLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMseUNBQXlDO0tBQzVDO1NBQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO1FBQzdCLEdBQUcsSUFBSSxHQUFHLENBQUM7S0FDZDtJQUVELHlCQUF5QjtJQUN6QixHQUFHLElBQUksUUFBUSxDQUFDO0lBRWhCLHFCQUFxQjtJQUNyQixJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzdDLEdBQUcsSUFBSSxHQUFHLENBQUM7S0FDZDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgZGVmYXVsdFVybFJlZ0V4cCA9IC9eKFxcdys6XFwvXFwvW14vP10rKT8oLio/KShcXD8uKyk/JC87XG5jb25zdCBwcm90b2NvbFJlbGF0aXZlVXJsUmVnRXhwID0gL14oXFwvXFwvW14vP10rKSguKj8pKFxcPy4rKT8kLztcblxuZnVuY3Rpb24gc3BsaXRVcmwocGFydHNTdHIsIHsgcHJvdG9jb2xSZWxhdGl2ZSB9KSB7XG4gICAgY29uc3QgbWF0Y2ggPSAocHJvdG9jb2xSZWxhdGl2ZSAmJiBwYXJ0c1N0ci5tYXRjaChwcm90b2NvbFJlbGF0aXZlVXJsUmVnRXhwKSkgfHxcbiAgICAgICAgcGFydHNTdHIubWF0Y2goZGVmYXVsdFVybFJlZ0V4cCkgfHxcbiAgICAgICAgW107XG5cbiAgICBjb25zdCBiZWZvcmVQYXRobmFtZSA9IG1hdGNoWzFdIHx8ICcnO1xuICAgIGNvbnN0IHBhdGhuYW1lID0gKG1hdGNoWzJdIHx8ICcnKVxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyBzbGFzaGVzXG4gICAgICAgIC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICAgICAgICAucmVwbGFjZSgvXFwvKyQvLCAnJylcbiAgICAgICAgLy8gTm9ybWFsaXplIGNvbnNlY3V0aXZlIHNsYXNoZXMgdG8ganVzdCBvbmVcbiAgICAgICAgLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgICBjb25zdCBhZnRlclBhdGhuYW1lID0gKG1hdGNoWzNdIHx8ICcnKTtcblxuICAgIHJldHVybiB7IGJlZm9yZVBhdGhuYW1lLCBwYXRobmFtZSwgYWZ0ZXJQYXRobmFtZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsSm9pbiguLi5wYXJ0czogc3RyaW5nW10pIHtcbiAgICBjb25zdCBsYXN0QXJnID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgbGV0IG9wdGlvbnM7XG5cbiAgICAvLyBJZiBsYXN0IGFyZ3VtZW50IGlzIGFuIG9iamVjdCwgdGhlbiBpdCdzIHRoZSBvcHRpb25zXG4gICAgLy8gTm90ZSB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LCBzbyB3ZSB2ZXJpZnkgaWYgaXMgdHJ1dGh5XG4gICAgaWYgKGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBsYXN0QXJnO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbGVhZGluZ1NsYXNoOiB0cnVlLFxuICAgICAgICB0cmFpbGluZ1NsYXNoOiBmYWxzZSxcbiAgICAgICAgcHJvdG9jb2xSZWxhdGl2ZTogZmFsc2UsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEpvaW4gcGFydHNcbiAgICBjb25zdCBwYXJ0c1N0ciA9IHBhcnRzXG4gICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicpXG4gICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAvLyBTcGxpdCB0aGUgcGFydHMgaW50byBiZWZvcmVQYXRobmFtZSwgcGF0aG5hbWUsIGFuZCBhZnRlclBhdGhuYW1lXG4gICAgLy8gKHNjaGVtZTovL2hvc3QpKC9wYXRobmFtZSkoP3F1ZXJ5U3RyaW5nKVxuICAgIGNvbnN0IHsgYmVmb3JlUGF0aG5hbWUsIHBhdGhuYW1lLCBhZnRlclBhdGhuYW1lIH0gPSBzcGxpdFVybChwYXJ0c1N0ciwgb3B0aW9ucyk7XG5cbiAgICBsZXQgdXJsID0gJyc7XG5cbiAgICAvLyBTdGFydCB3aXRoIGJlZm9yZVBhdGhuYW1lIGlmIG5vdCBlbXB0eSAoaHR0cDovL2dvb2dsZS5jb20pXG4gICAgaWYgKGJlZm9yZVBhdGhuYW1lKSB7XG4gICAgICAgIHVybCArPSBiZWZvcmVQYXRobmFtZSArIChwYXRobmFtZSA/ICcvJyA6ICcnKTtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHN0YXJ0IHdpdGggdGhlIGxlYWRpbmcgc2xhc2hcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMubGVhZGluZ1NsYXNoKSB7XG4gICAgICAgIHVybCArPSAnLyc7XG4gICAgfVxuXG4gICAgLy8gQWRkIHBhdGhuYW1lIChmb28vYmFyKVxuICAgIHVybCArPSBwYXRobmFtZTtcblxuICAgIC8vIEFkZCB0cmFpbGluZyBzbGFzaFxuICAgIGlmIChvcHRpb25zLnRyYWlsaW5nU2xhc2ggJiYgIXVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIHVybCArPSAnLyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn1cbiJdfQ==