dash-button-web 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/dash-button.cjs.entry.js +13 -7
- package/dist/cjs/dash-button.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/web-compnont.cjs.js +1 -1
- package/dist/collection/components/my-component/dash-button.js +32 -8
- package/dist/collection/components/my-component/dash-button.js.map +1 -1
- package/dist/components/dash-button.js +14 -7
- package/dist/components/dash-button.js.map +1 -1
- package/dist/esm/dash-button.entry.js +13 -7
- package/dist/esm/dash-button.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/web-compnont.js +1 -1
- package/dist/types/components/my-component/dash-button.d.ts +2 -1
- package/dist/types/components.d.ts +2 -0
- package/dist/web-compnont/{p-e4d4f568.entry.js → p-099f7d20.entry.js} +3 -3
- package/dist/web-compnont/p-099f7d20.entry.js.map +1 -0
- package/dist/web-compnont/web-compnont.esm.js +1 -1
- package/dist/web-compnont/web-compnont.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/web-compnont/p-e4d4f568.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","getLens","b64","Error","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","push","join","extraBytes","parts","maxChunkLength","len2","ERROR","WINDOW","window","root","JS_SHA256_NO_WINDOW","WEB_WORKER","self","NODE_JS","JS_SHA256_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA256_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_SHA256_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","K","OUTPUT_TYPES","blocks","isArray","obj","Object","prototype","toString","call","JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW","isView","buffer","constructor","createOutputMethod","outputType","is224","message","Sha256","update","createMethod","method","nodeWrap","create","type","crypto","require$$0","Buffer","require$$1","algorithm","bufferFrom","from","JS_SHA256_NO_BUFFER_FROM","nodeMethod","createHash","digest","undefined","createHmacOutputMethod","key","HmacSha256","createHmacMethod","sharedMemory","this","h0","h1","h2","h3","h4","h5","h6","h7","block","bytes","hBytes","finalized","hashed","first","notString","index","lastByteIndex","hash","finalize","a","b","c","d","e","f","g","h","j","s0","s1","maj","t1","t2","ch","ab","da","cd","bc","chromeBugWorkAround","hex","array","arrayBuffer","dataView","DataView","setUint32","oKeyPad","iKeyPad","inner","innerHash","sha256","sha224","hmac","InvalidTokenError","name","b64DecodeUnicode","str","decodeURIComponent","atob","replace","m","p","toUpperCase","base64UrlDecode","err","jwtDecode","token","options","pos","header","part","decoded","JSON","parse","Promise","Keycloak","config","kc","adapter","refreshQueue","callbackStorage","loginIframe","enable","callbackList","interval","scripts","document","getElementsByTagName","src","iframeVersion","substring","useNonce","logInfo","createLogger","console","info","logWarn","warn","init","initOptions","didInitialize","authenticated","createCallbackStorage","adapters","loadAdapter","Cordova","cordova","checkLoginIframe","checkLoginIframeInterval","onLoad","loginRequired","responseMode","flow","responseType","timeSkew","redirectUri","silentCheckSsoRedirectUri","silentCheckSsoFallback","pkceMethod","enableLogging","scope","acrValues","messageReceiveTimeout","promise","createPromise","initPromise","then","onReady","setSuccess","catch","error","setError","configPromise","loadConfig","doLogin","prompt","locale","login","checkSsoSilently","ifrm","createElement","createLoginUrl","setAttribute","style","display","body","appendChild","messageCallback","event","origin","location","contentWindow","source","oauth","parseCallback","data","processCallback","removeChild","removeEventListener","addEventListener","setupCheckLoginIframe","unchanged","processInit","callback","href","history","replaceState","state","newUrl","valid","refreshToken","setToken","idToken","onAuthSuccess","scheduleCheckIframe","updateToken","onAuthError","domReady","checkReadyState","readyState","check3pCookiesSupported","generateRandomData","msCrypto","getRandomValues","Math","floor","random","generateCodeVerifier","generateRandomString","alphabet","randomData","chars","String","fromCharCode","apply","generatePkceChallenge","codeVerifier","hashBytes","encodedHash","base64","buildClaimsParameter","requestedAcr","claims","id_token","acr","stringify","createUUID","nonce","callbackState","encodeURIComponent","baseUrl","action","endpoints","register","authorize","url","clientId","maxAge","loginHint","idpHint","claimsParameter","pkceCodeVerifier","pkceChallenge","add","logout","createLogoutUrl","createRegisterUrl","createAccountUrl","realm","getRealmUrl","accountManagement","hasRealmRole","role","access","realmAccess","roles","hasResourceRole","resource","resourceAccess","loadUserProfile","req","XMLHttpRequest","open","setRequestHeader","onreadystatechange","status","profile","responseText","send","loadUserInfo","userinfo","userInfo","isTokenExpired","minValidity","tokenParsed","expiresIn","ceil","Date","getTime","isNaN","exec","params","withCredentials","timeLocal","tokenResponse","onAuthRefreshSuccess","pop","clearToken","onAuthRefreshError","iframePromise","onAuthLogout","authServerUrl","charAt","getOrigin","protocol","hostname","port","onActionUpdate","errorData","error_description","access_token","authSuccess","accessToken","fulfillPromise","storedNonce","refreshTokenParsed","idTokenParsed","configUrl","setupOidcEndoints","oidcConfiguration","checkSessionIframe","thirdPartyCookiesIframe","authorization_endpoint","token_endpoint","end_session_endpoint","check_session_iframe","userinfo_endpoint","fileLoaded","oidcProvider","match","substr","oidcProviderConfigUrl","oidcProviderConfig","xhr","responseURL","startsWith","tokenTimeoutHandle","clearTimeout","sessionId","session_state","subject","sub","realm_access","resource_access","iat","onTokenExpired","round","setTimeout","hexDigits","s","uuid","parseCallbackUrl","oauthState","get","supportedParams","queryIndex","fragmentIndex","parsed","parseCallbackParams","paramsString","oauthParams","result","slice","resolve","reject","applyTimeoutToPromise","timeout","errorMessage","timeoutHandle","timeoutPromise","race","finally","iframe","onload","authUrl","iframeOrigin","callbacks","splice","msg","postMessage","assign","accountUrl","encodeHash","cordovaOpenWindowWrapper","loginUrl","target","InAppBrowser","shallowCloneCordovaOptions","userOptions","cordovaOptions","keys","reduce","optionName","formatCordovaOptions","createCordovaOptions","hidden","getCordovaRedirectUri","ref","completed","closed","closeBrowser","close","reason","logoutUrl","registerUrl","universalLinks","subscribe","unsubscribe","plugins","browsertab","openUrl","LocalStorage","localStorage","setItem","removeItem","cs","clearExpired","time","value","getItem","expires","CookieStorage","getCookie","setCookie","cookieExpiration","minutes","exp","setTime","ca","cookie","expirationDate","toUTCString","fn","arguments","dashButtonCss","DashButtonStyle0","DashButtonComponent","keycloakUri","componentWillLoad","postTextDelayDuration","showPostLoginLoadingSpinner","initKeycloak","isAuth","getAppList","res","appList","appId","appIdList","tempAppList","map","filter","id","includes","appErrorModal","el","shadowRoot","querySelector","portalUrl","showUnauthorizedModal","countdownNumberEl","getElementById","countdown","textContent","setInterval","keycloak","authMethod","silentCheckSso","givenName","given_name","response","fetch","marketplaceUrl","jsonObj","json","showModal","appModal","closeModal","render","showPostLoginText","class","alt","onClick","bind","app","shortname","r","cx","cy"],"sources":["node_modules/base64-js/index.js","node_modules/js-sha256/src/sha256.js","node_modules/jwt-decode/build/esm/index.js","node_modules/keycloak-js/dist/keycloak.mjs","src/components/my-component/dash-button.css?tag=dash-button&encapsulation=shadow","src/components/my-component/dash-button.tsx"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.10.1\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2023\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA256_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (outputType, is224) {\n return function (message) {\n return new Sha256(is224, true).update(message)[outputType]();\n };\n };\n\n var createMethod = function (is224) {\n var method = createOutputMethod('hex', is224);\n if (NODE_JS) {\n method = nodeWrap(method, is224);\n }\n method.create = function () {\n return new Sha256(is224);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type, is224);\n }\n return method;\n };\n\n var nodeWrap = function (method, is224) {\n var crypto = require('crypto')\n var Buffer = require('buffer').Buffer;\n var algorithm = is224 ? 'sha224' : 'sha256';\n var bufferFrom;\n if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {\n bufferFrom = Buffer.from;\n } else {\n bufferFrom = function (message) {\n return new Buffer(message);\n };\n }\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n var createHmacOutputMethod = function (outputType, is224) {\n return function (key, message) {\n return new HmacSha256(key, is224, true).update(message)[outputType]();\n };\n };\n\n var createHmacMethod = function (is224) {\n var method = createHmacOutputMethod('hex', is224);\n method.create = function (key) {\n return new HmacSha256(key, is224);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type, is224);\n }\n return method;\n };\n\n function Sha256(is224, sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n if (is224) {\n this.h0 = 0xc1059ed8;\n this.h1 = 0x367cd507;\n this.h2 = 0x3070dd17;\n this.h3 = 0xf70e5939;\n this.h4 = 0xffc00b31;\n this.h5 = 0x68581511;\n this.h6 = 0x64f98fa7;\n this.h7 = 0xbefa4fa4;\n } else { // 256\n this.h0 = 0x6a09e667;\n this.h1 = 0xbb67ae85;\n this.h2 = 0x3c6ef372;\n this.h3 = 0xa54ff53a;\n this.h4 = 0x510e527f;\n this.h5 = 0x9b05688c;\n this.h6 = 0x1f83d9ab;\n this.h7 = 0x5be0cd19;\n }\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n this.is224 = is224;\n }\n\n Sha256.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha256.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha256.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\n h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n\n for (j = 16; j < 64; ++j) {\n // rightrotate\n t1 = blocks[j - 15];\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\n t1 = blocks[j - 2];\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\n }\n\n bc = b & c;\n for (j = 0; j < 64; j += 4) {\n if (this.first) {\n if (this.is224) {\n ab = 300032;\n t1 = blocks[0] - 1413257819;\n h = t1 - 150054599 << 0;\n d = t1 + 24177077 << 0;\n } else {\n ab = 704751109;\n t1 = blocks[0] - 210244248;\n h = t1 - 1521486534 << 0;\n d = t1 + 143694565 << 0;\n }\n this.first = false;\n } else {\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n ab = a & b;\n maj = ab ^ (a & c) ^ bc;\n ch = (e & f) ^ (~e & g);\n t1 = h + s1 + ch + K[j] + blocks[j];\n t2 = s0 + maj;\n h = d + t1 << 0;\n d = t1 + t2 << 0;\n }\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\n da = d & a;\n maj = da ^ (d & b) ^ ab;\n ch = (h & e) ^ (~h & f);\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\n t2 = s0 + maj;\n g = c + t1 << 0;\n c = t1 + t2 << 0;\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\n cd = c & d;\n maj = cd ^ (c & a) ^ da;\n ch = (g & h) ^ (~g & e);\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\n t2 = s0 + maj;\n f = b + t1 << 0;\n b = t1 + t2 << 0;\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\n bc = b & c;\n maj = bc ^ (b & d) ^ cd;\n ch = (f & g) ^ (~f & h);\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\n t2 = s0 + maj;\n e = a + t1 << 0;\n a = t1 + t2 << 0;\n this.chromeBugWorkAround = true;\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n this.h5 = this.h5 + f << 0;\n this.h6 = this.h6 + g << 0;\n this.h7 = this.h7 + h << 0;\n };\n\n Sha256.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\n HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\n HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\n HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\n HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\n HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\n HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\n HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\n HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\n if (!this.is224) {\n hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\n HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\n HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\n HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\n }\n return hex;\n };\n\n Sha256.prototype.toString = Sha256.prototype.hex;\n\n Sha256.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var arr = [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,\n (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,\n (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF\n ];\n if (!this.is224) {\n arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);\n }\n return arr;\n };\n\n Sha256.prototype.array = Sha256.prototype.digest;\n\n Sha256.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n dataView.setUint32(20, this.h5);\n dataView.setUint32(24, this.h6);\n if (!this.is224) {\n dataView.setUint32(28, this.h7);\n }\n return buffer;\n };\n\n function HmacSha256(key, is224, sharedMemory) {\n var i, type = typeof key;\n if (type === 'string') {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >> 12));\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >> 18));\n bytes[index++] = (0x80 | ((code >> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n } else {\n if (type === 'object') {\n if (key === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n key = new Uint8Array(key);\n } else if (!Array.isArray(key)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n }\n\n if (key.length > 64) {\n key = (new Sha256(is224, true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Sha256.call(this, is224, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacSha256.prototype = new Sha256();\n\n HmacSha256.prototype.finalize = function () {\n Sha256.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Sha256.call(this, this.is224, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Sha256.prototype.finalize.call(this);\n }\n };\n\n var exports = createMethod();\n exports.sha256 = exports;\n exports.sha224 = createMethod(true);\n exports.sha256.hmac = createHmacMethod();\n exports.sha224.hmac = createHmacMethod(true);\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha256 = exports.sha256;\n root.sha224 = exports.sha224;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n","import base64 from 'base64-js';\nimport sha256 from 'js-sha256';\nimport { jwtDecode } from 'jwt-decode';\n\n/*\n * Copyright 2016 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nif (typeof Promise === 'undefined') {\n throw Error('Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.');\n}\n\nfunction Keycloak (config) {\n if (!(this instanceof Keycloak)) {\n throw new Error(\"The 'Keycloak' constructor must be invoked with 'new'.\")\n }\n\n var kc = this;\n var adapter;\n var refreshQueue = [];\n var callbackStorage;\n\n var loginIframe = {\n enable: true,\n callbackList: [],\n interval: 5\n };\n\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n if ((scripts[i].src.indexOf('keycloak.js') !== -1 || scripts[i].src.indexOf('keycloak.min.js') !== -1) && scripts[i].src.indexOf('version=') !== -1) {\n kc.iframeVersion = scripts[i].src.substring(scripts[i].src.indexOf('version=') + 8).split('&')[0];\n }\n }\n\n var useNonce = true;\n var logInfo = createLogger(console.info);\n var logWarn = createLogger(console.warn);\n\n kc.init = function (initOptions) {\n if (kc.didInitialize) {\n throw new Error(\"A 'Keycloak' instance can only be initialized once.\");\n }\n\n kc.didInitialize = true;\n\n kc.authenticated = false;\n\n callbackStorage = createCallbackStorage();\n var adapters = ['default', 'cordova', 'cordova-native'];\n\n if (initOptions && adapters.indexOf(initOptions.adapter) > -1) {\n adapter = loadAdapter(initOptions.adapter);\n } else if (initOptions && typeof initOptions.adapter === \"object\") {\n adapter = initOptions.adapter;\n } else {\n if (window.Cordova || window.cordova) {\n adapter = loadAdapter('cordova');\n } else {\n adapter = loadAdapter();\n }\n }\n\n if (initOptions) {\n if (typeof initOptions.useNonce !== 'undefined') {\n useNonce = initOptions.useNonce;\n }\n\n if (typeof initOptions.checkLoginIframe !== 'undefined') {\n loginIframe.enable = initOptions.checkLoginIframe;\n }\n\n if (initOptions.checkLoginIframeInterval) {\n loginIframe.interval = initOptions.checkLoginIframeInterval;\n }\n\n if (initOptions.onLoad === 'login-required') {\n kc.loginRequired = true;\n }\n\n if (initOptions.responseMode) {\n if (initOptions.responseMode === 'query' || initOptions.responseMode === 'fragment') {\n kc.responseMode = initOptions.responseMode;\n } else {\n throw 'Invalid value for responseMode';\n }\n }\n\n if (initOptions.flow) {\n switch (initOptions.flow) {\n case 'standard':\n kc.responseType = 'code';\n break;\n case 'implicit':\n kc.responseType = 'id_token token';\n break;\n case 'hybrid':\n kc.responseType = 'code id_token token';\n break;\n default:\n throw 'Invalid value for flow';\n }\n kc.flow = initOptions.flow;\n }\n\n if (initOptions.timeSkew != null) {\n kc.timeSkew = initOptions.timeSkew;\n }\n\n if(initOptions.redirectUri) {\n kc.redirectUri = initOptions.redirectUri;\n }\n\n if (initOptions.silentCheckSsoRedirectUri) {\n kc.silentCheckSsoRedirectUri = initOptions.silentCheckSsoRedirectUri;\n }\n\n if (typeof initOptions.silentCheckSsoFallback === 'boolean') {\n kc.silentCheckSsoFallback = initOptions.silentCheckSsoFallback;\n } else {\n kc.silentCheckSsoFallback = true;\n }\n\n if (initOptions.pkceMethod) {\n if (initOptions.pkceMethod !== \"S256\") {\n throw 'Invalid value for pkceMethod';\n }\n kc.pkceMethod = initOptions.pkceMethod;\n }\n\n if (typeof initOptions.enableLogging === 'boolean') {\n kc.enableLogging = initOptions.enableLogging;\n } else {\n kc.enableLogging = false;\n }\n\n if (typeof initOptions.scope === 'string') {\n kc.scope = initOptions.scope;\n }\n\n if (typeof initOptions.acrValues === 'string') {\n kc.acrValues = initOptions.acrValues;\n }\n\n if (typeof initOptions.messageReceiveTimeout === 'number' && initOptions.messageReceiveTimeout > 0) {\n kc.messageReceiveTimeout = initOptions.messageReceiveTimeout;\n } else {\n kc.messageReceiveTimeout = 10000;\n }\n }\n\n if (!kc.responseMode) {\n kc.responseMode = 'fragment';\n }\n if (!kc.responseType) {\n kc.responseType = 'code';\n kc.flow = 'standard';\n }\n\n var promise = createPromise();\n\n var initPromise = createPromise();\n initPromise.promise.then(function() {\n kc.onReady && kc.onReady(kc.authenticated);\n promise.setSuccess(kc.authenticated);\n }).catch(function(error) {\n promise.setError(error);\n });\n\n var configPromise = loadConfig();\n\n function onLoad() {\n var doLogin = function(prompt) {\n if (!prompt) {\n options.prompt = 'none';\n }\n\n if (initOptions && initOptions.locale) {\n options.locale = initOptions.locale;\n }\n kc.login(options).then(function () {\n initPromise.setSuccess();\n }).catch(function (error) {\n initPromise.setError(error);\n });\n };\n\n var checkSsoSilently = function() {\n var ifrm = document.createElement(\"iframe\");\n var src = kc.createLoginUrl({prompt: 'none', redirectUri: kc.silentCheckSsoRedirectUri});\n ifrm.setAttribute(\"src\", src);\n ifrm.setAttribute(\"sandbox\", \"allow-storage-access-by-user-activation allow-scripts allow-same-origin\");\n ifrm.setAttribute(\"title\", \"keycloak-silent-check-sso\");\n ifrm.style.display = \"none\";\n document.body.appendChild(ifrm);\n\n var messageCallback = function(event) {\n if (event.origin !== window.location.origin || ifrm.contentWindow !== event.source) {\n return;\n }\n\n var oauth = parseCallback(event.data);\n processCallback(oauth, initPromise);\n\n document.body.removeChild(ifrm);\n window.removeEventListener(\"message\", messageCallback);\n };\n\n window.addEventListener(\"message\", messageCallback);\n };\n\n var options = {};\n switch (initOptions.onLoad) {\n case 'check-sso':\n if (loginIframe.enable) {\n setupCheckLoginIframe().then(function() {\n checkLoginIframe().then(function (unchanged) {\n if (!unchanged) {\n kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n } else {\n initPromise.setSuccess();\n }\n }).catch(function (error) {\n initPromise.setError(error);\n });\n });\n } else {\n kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n }\n break;\n case 'login-required':\n doLogin(true);\n break;\n default:\n throw 'Invalid value for onLoad';\n }\n }\n\n function processInit() {\n var callback = parseCallback(window.location.href);\n\n if (callback) {\n window.history.replaceState(window.history.state, null, callback.newUrl);\n }\n\n if (callback && callback.valid) {\n return setupCheckLoginIframe().then(function() {\n processCallback(callback, initPromise);\n }).catch(function (error) {\n initPromise.setError(error);\n });\n } else if (initOptions) {\n if (initOptions.token && initOptions.refreshToken) {\n setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);\n\n if (loginIframe.enable) {\n setupCheckLoginIframe().then(function() {\n checkLoginIframe().then(function (unchanged) {\n if (unchanged) {\n kc.onAuthSuccess && kc.onAuthSuccess();\n initPromise.setSuccess();\n scheduleCheckIframe();\n } else {\n initPromise.setSuccess();\n }\n }).catch(function (error) {\n initPromise.setError(error);\n });\n });\n } else {\n kc.updateToken(-1).then(function() {\n kc.onAuthSuccess && kc.onAuthSuccess();\n initPromise.setSuccess();\n }).catch(function(error) {\n kc.onAuthError && kc.onAuthError();\n if (initOptions.onLoad) {\n onLoad();\n } else {\n initPromise.setError(error);\n }\n });\n }\n } else if (initOptions.onLoad) {\n onLoad();\n } else {\n initPromise.setSuccess();\n }\n } else {\n initPromise.setSuccess();\n }\n }\n\n function domReady() {\n var promise = createPromise();\n\n var checkReadyState = function () {\n if (document.readyState === 'interactive' || document.readyState === 'complete') {\n document.removeEventListener('readystatechange', checkReadyState);\n promise.setSuccess();\n }\n };\n document.addEventListener('readystatechange', checkReadyState);\n\n checkReadyState(); // just in case the event was already fired and we missed it (in case the init is done later than at the load time, i.e. it's done from code)\n\n return promise.promise;\n }\n\n configPromise.then(function () {\n domReady()\n .then(check3pCookiesSupported)\n .then(processInit)\n .catch(function (error) {\n promise.setError(error);\n });\n });\n configPromise.catch(function (error) {\n promise.setError(error);\n });\n\n return promise.promise;\n };\n\n kc.login = function (options) {\n return adapter.login(options);\n };\n\n function generateRandomData(len) {\n // use web crypto APIs if possible\n var array = null;\n var crypto = window.crypto || window.msCrypto;\n if (crypto && crypto.getRandomValues && window.Uint8Array) {\n array = new Uint8Array(len);\n crypto.getRandomValues(array);\n return array;\n }\n\n // fallback to Math random\n array = new Array(len);\n for (var j = 0; j < array.length; j++) {\n array[j] = Math.floor(256 * Math.random());\n }\n return array;\n }\n\n function generateCodeVerifier(len) {\n return generateRandomString(len, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');\n }\n\n function generateRandomString(len, alphabet){\n var randomData = generateRandomData(len);\n var chars = new Array(len);\n for (var i = 0; i < len; i++) {\n chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);\n }\n return String.fromCharCode.apply(null, chars);\n }\n\n function generatePkceChallenge(pkceMethod, codeVerifier) {\n switch (pkceMethod) {\n // The use of the \"plain\" method is considered insecure and therefore not supported.\n case \"S256\":\n // hash codeVerifier, then encode as url-safe base64 without padding\n var hashBytes = new Uint8Array(sha256.arrayBuffer(codeVerifier));\n var encodedHash = base64.fromByteArray(hashBytes)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/\\=/g, '');\n return encodedHash;\n default:\n throw 'Invalid value for pkceMethod';\n }\n }\n\n function buildClaimsParameter(requestedAcr){\n var claims = {\n id_token: {\n acr: requestedAcr\n }\n };\n return JSON.stringify(claims);\n }\n\n kc.createLoginUrl = function(options) {\n var state = createUUID();\n var nonce = createUUID();\n\n var redirectUri = adapter.redirectUri(options);\n\n var callbackState = {\n state: state,\n nonce: nonce,\n redirectUri: encodeURIComponent(redirectUri)\n };\n\n if (options && options.prompt) {\n callbackState.prompt = options.prompt;\n }\n\n var baseUrl;\n if (options && options.action == 'register') {\n baseUrl = kc.endpoints.register();\n } else {\n baseUrl = kc.endpoints.authorize();\n }\n\n var scope = options && options.scope || kc.scope;\n if (!scope) {\n // if scope is not set, default to \"openid\"\n scope = \"openid\";\n } else if (scope.indexOf(\"openid\") === -1) {\n // if openid scope is missing, prefix the given scopes with it\n scope = \"openid \" + scope;\n }\n\n var url = baseUrl\n + '?client_id=' + encodeURIComponent(kc.clientId)\n + '&redirect_uri=' + encodeURIComponent(redirectUri)\n + '&state=' + encodeURIComponent(state)\n + '&response_mode=' + encodeURIComponent(kc.responseMode)\n + '&response_type=' + encodeURIComponent(kc.responseType)\n + '&scope=' + encodeURIComponent(scope);\n if (useNonce) {\n url = url + '&nonce=' + encodeURIComponent(nonce);\n }\n\n if (options && options.prompt) {\n url += '&prompt=' + encodeURIComponent(options.prompt);\n }\n\n if (options && options.maxAge) {\n url += '&max_age=' + encodeURIComponent(options.maxAge);\n }\n\n if (options && options.loginHint) {\n url += '&login_hint=' + encodeURIComponent(options.loginHint);\n }\n\n if (options && options.idpHint) {\n url += '&kc_idp_hint=' + encodeURIComponent(options.idpHint);\n }\n\n if (options && options.action && options.action != 'register') {\n url += '&kc_action=' + encodeURIComponent(options.action);\n }\n\n if (options && options.locale) {\n url += '&ui_locales=' + encodeURIComponent(options.locale);\n }\n\n if (options && options.acr) {\n var claimsParameter = buildClaimsParameter(options.acr);\n url += '&claims=' + encodeURIComponent(claimsParameter);\n }\n\n if ((options && options.acrValues) || kc.acrValues) {\n url += '&acr_values=' + encodeURIComponent(options.acrValues || kc.acrValues);\n }\n\n if (kc.pkceMethod) {\n var codeVerifier = generateCodeVerifier(96);\n callbackState.pkceCodeVerifier = codeVerifier;\n var pkceChallenge = generatePkceChallenge(kc.pkceMethod, codeVerifier);\n url += '&code_challenge=' + pkceChallenge;\n url += '&code_challenge_method=' + kc.pkceMethod;\n }\n\n callbackStorage.add(callbackState);\n\n return url;\n };\n\n kc.logout = function(options) {\n return adapter.logout(options);\n };\n\n kc.createLogoutUrl = function(options) {\n var url = kc.endpoints.logout()\n + '?client_id=' + encodeURIComponent(kc.clientId)\n + '&post_logout_redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));\n\n if (kc.idToken) {\n url += '&id_token_hint=' + encodeURIComponent(kc.idToken);\n }\n\n return url;\n };\n\n kc.register = function (options) {\n return adapter.register(options);\n };\n\n kc.createRegisterUrl = function(options) {\n if (!options) {\n options = {};\n }\n options.action = 'register';\n return kc.createLoginUrl(options);\n };\n\n kc.createAccountUrl = function(options) {\n var realm = getRealmUrl();\n var url = undefined;\n if (typeof realm !== 'undefined') {\n url = realm\n + '/account'\n + '?referrer=' + encodeURIComponent(kc.clientId)\n + '&referrer_uri=' + encodeURIComponent(adapter.redirectUri(options));\n }\n return url;\n };\n\n kc.accountManagement = function() {\n return adapter.accountManagement();\n };\n\n kc.hasRealmRole = function (role) {\n var access = kc.realmAccess;\n return !!access && access.roles.indexOf(role) >= 0;\n };\n\n kc.hasResourceRole = function(role, resource) {\n if (!kc.resourceAccess) {\n return false;\n }\n\n var access = kc.resourceAccess[resource || kc.clientId];\n return !!access && access.roles.indexOf(role) >= 0;\n };\n\n kc.loadUserProfile = function() {\n var url = getRealmUrl() + '/account';\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.setRequestHeader('Accept', 'application/json');\n req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n var promise = createPromise();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n kc.profile = JSON.parse(req.responseText);\n promise.setSuccess(kc.profile);\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n\n return promise.promise;\n };\n\n kc.loadUserInfo = function() {\n var url = kc.endpoints.userinfo();\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.setRequestHeader('Accept', 'application/json');\n req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n var promise = createPromise();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n kc.userInfo = JSON.parse(req.responseText);\n promise.setSuccess(kc.userInfo);\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n\n return promise.promise;\n };\n\n kc.isTokenExpired = function(minValidity) {\n if (!kc.tokenParsed || (!kc.refreshToken && kc.flow != 'implicit' )) {\n throw 'Not authenticated';\n }\n\n if (kc.timeSkew == null) {\n logInfo('[KEYCLOAK] Unable to determine if token is expired as timeskew is not set');\n return true;\n }\n\n var expiresIn = kc.tokenParsed['exp'] - Math.ceil(new Date().getTime() / 1000) + kc.timeSkew;\n if (minValidity) {\n if (isNaN(minValidity)) {\n throw 'Invalid minValidity';\n }\n expiresIn -= minValidity;\n }\n return expiresIn < 0;\n };\n\n kc.updateToken = function(minValidity) {\n var promise = createPromise();\n\n if (!kc.refreshToken) {\n promise.setError();\n return promise.promise;\n }\n\n minValidity = minValidity || 5;\n\n var exec = function() {\n var refreshToken = false;\n if (minValidity == -1) {\n refreshToken = true;\n logInfo('[KEYCLOAK] Refreshing token: forced refresh');\n } else if (!kc.tokenParsed || kc.isTokenExpired(minValidity)) {\n refreshToken = true;\n logInfo('[KEYCLOAK] Refreshing token: token expired');\n }\n\n if (!refreshToken) {\n promise.setSuccess(false);\n } else {\n var params = 'grant_type=refresh_token&' + 'refresh_token=' + kc.refreshToken;\n var url = kc.endpoints.token();\n\n refreshQueue.push(promise);\n\n if (refreshQueue.length == 1) {\n var req = new XMLHttpRequest();\n req.open('POST', url, true);\n req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n req.withCredentials = true;\n\n params += '&client_id=' + encodeURIComponent(kc.clientId);\n\n var timeLocal = new Date().getTime();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n logInfo('[KEYCLOAK] Token refreshed');\n\n timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n var tokenResponse = JSON.parse(req.responseText);\n\n setToken(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], timeLocal);\n\n kc.onAuthRefreshSuccess && kc.onAuthRefreshSuccess();\n for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n p.setSuccess(true);\n }\n } else {\n logWarn('[KEYCLOAK] Failed to refresh token');\n\n if (req.status == 400) {\n kc.clearToken();\n }\n\n kc.onAuthRefreshError && kc.onAuthRefreshError();\n for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n p.setError(true);\n }\n }\n }\n };\n\n req.send(params);\n }\n }\n };\n\n if (loginIframe.enable) {\n var iframePromise = checkLoginIframe();\n iframePromise.then(function() {\n exec();\n }).catch(function(error) {\n promise.setError(error);\n });\n } else {\n exec();\n }\n\n return promise.promise;\n };\n\n kc.clearToken = function() {\n if (kc.token) {\n setToken(null, null, null);\n kc.onAuthLogout && kc.onAuthLogout();\n if (kc.loginRequired) {\n kc.login();\n }\n }\n };\n\n function getRealmUrl() {\n if (typeof kc.authServerUrl !== 'undefined') {\n if (kc.authServerUrl.charAt(kc.authServerUrl.length - 1) == '/') {\n return kc.authServerUrl + 'realms/' + encodeURIComponent(kc.realm);\n } else {\n return kc.authServerUrl + '/realms/' + encodeURIComponent(kc.realm);\n }\n } else {\n return undefined;\n }\n }\n\n function getOrigin() {\n if (!window.location.origin) {\n return window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');\n } else {\n return window.location.origin;\n }\n }\n\n function processCallback(oauth, promise) {\n var code = oauth.code;\n var error = oauth.error;\n var prompt = oauth.prompt;\n\n var timeLocal = new Date().getTime();\n\n if (oauth['kc_action_status']) {\n kc.onActionUpdate && kc.onActionUpdate(oauth['kc_action_status']);\n }\n\n if (error) {\n if (prompt != 'none') {\n var errorData = { error: error, error_description: oauth.error_description };\n kc.onAuthError && kc.onAuthError(errorData);\n promise && promise.setError(errorData);\n } else {\n promise && promise.setSuccess();\n }\n return;\n } else if ((kc.flow != 'standard') && (oauth.access_token || oauth.id_token)) {\n authSuccess(oauth.access_token, null, oauth.id_token, true);\n }\n\n if ((kc.flow != 'implicit') && code) {\n var params = 'code=' + code + '&grant_type=authorization_code';\n var url = kc.endpoints.token();\n\n var req = new XMLHttpRequest();\n req.open('POST', url, true);\n req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n params += '&client_id=' + encodeURIComponent(kc.clientId);\n params += '&redirect_uri=' + oauth.redirectUri;\n\n if (oauth.pkceCodeVerifier) {\n params += '&code_verifier=' + oauth.pkceCodeVerifier;\n }\n\n req.withCredentials = true;\n\n req.onreadystatechange = function() {\n if (req.readyState == 4) {\n if (req.status == 200) {\n\n var tokenResponse = JSON.parse(req.responseText);\n authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');\n scheduleCheckIframe();\n } else {\n kc.onAuthError && kc.onAuthError();\n promise && promise.setError();\n }\n }\n };\n\n req.send(params);\n }\n\n function authSuccess(accessToken, refreshToken, idToken, fulfillPromise) {\n timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n setToken(accessToken, refreshToken, idToken, timeLocal);\n\n if (useNonce && ((kc.tokenParsed && kc.tokenParsed.nonce != oauth.storedNonce) ||\n (kc.refreshTokenParsed && kc.refreshTokenParsed.nonce != oauth.storedNonce) ||\n (kc.idTokenParsed && kc.idTokenParsed.nonce != oauth.storedNonce))) {\n\n logInfo('[KEYCLOAK] Invalid nonce, clearing token');\n kc.clearToken();\n promise && promise.setError();\n } else {\n if (fulfillPromise) {\n kc.onAuthSuccess && kc.onAuthSuccess();\n promise && promise.setSuccess();\n }\n }\n }\n\n }\n\n function loadConfig(url) {\n var promise = createPromise();\n var configUrl;\n\n if (!config) {\n configUrl = 'keycloak.json';\n } else if (typeof config === 'string') {\n configUrl = config;\n }\n\n function setupOidcEndoints(oidcConfiguration) {\n if (! oidcConfiguration) {\n kc.endpoints = {\n authorize: function() {\n return getRealmUrl() + '/protocol/openid-connect/auth';\n },\n token: function() {\n return getRealmUrl() + '/protocol/openid-connect/token';\n },\n logout: function() {\n return getRealmUrl() + '/protocol/openid-connect/logout';\n },\n checkSessionIframe: function() {\n var src = getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html';\n if (kc.iframeVersion) {\n src = src + '?version=' + kc.iframeVersion;\n }\n return src;\n },\n thirdPartyCookiesIframe: function() {\n var src = getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';\n if (kc.iframeVersion) {\n src = src + '?version=' + kc.iframeVersion;\n }\n return src;\n },\n register: function() {\n return getRealmUrl() + '/protocol/openid-connect/registrations';\n },\n userinfo: function() {\n return getRealmUrl() + '/protocol/openid-connect/userinfo';\n }\n };\n } else {\n kc.endpoints = {\n authorize: function() {\n return oidcConfiguration.authorization_endpoint;\n },\n token: function() {\n return oidcConfiguration.token_endpoint;\n },\n logout: function() {\n if (!oidcConfiguration.end_session_endpoint) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.end_session_endpoint;\n },\n checkSessionIframe: function() {\n if (!oidcConfiguration.check_session_iframe) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.check_session_iframe;\n },\n register: function() {\n throw 'Redirection to \"Register user\" page not supported in standard OIDC mode';\n },\n userinfo: function() {\n if (!oidcConfiguration.userinfo_endpoint) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.userinfo_endpoint;\n }\n };\n }\n }\n\n if (configUrl) {\n var req = new XMLHttpRequest();\n req.open('GET', configUrl, true);\n req.setRequestHeader('Accept', 'application/json');\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200 || fileLoaded(req)) {\n var config = JSON.parse(req.responseText);\n\n kc.authServerUrl = config['auth-server-url'];\n kc.realm = config['realm'];\n kc.clientId = config['resource'];\n setupOidcEndoints(null);\n promise.setSuccess();\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n } else {\n if (!config.clientId) {\n throw 'clientId missing';\n }\n\n kc.clientId = config.clientId;\n\n var oidcProvider = config['oidcProvider'];\n if (!oidcProvider) {\n if (!config['url']) {\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n if (scripts[i].src.match(/.*keycloak\\.js/)) {\n config.url = scripts[i].src.substr(0, scripts[i].src.indexOf('/js/keycloak.js'));\n break;\n }\n }\n }\n if (!config.realm) {\n throw 'realm missing';\n }\n\n kc.authServerUrl = config.url;\n kc.realm = config.realm;\n setupOidcEndoints(null);\n promise.setSuccess();\n } else {\n if (typeof oidcProvider === 'string') {\n var oidcProviderConfigUrl;\n if (oidcProvider.charAt(oidcProvider.length - 1) == '/') {\n oidcProviderConfigUrl = oidcProvider + '.well-known/openid-configuration';\n } else {\n oidcProviderConfigUrl = oidcProvider + '/.well-known/openid-configuration';\n }\n var req = new XMLHttpRequest();\n req.open('GET', oidcProviderConfigUrl, true);\n req.setRequestHeader('Accept', 'application/json');\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200 || fileLoaded(req)) {\n var oidcProviderConfig = JSON.parse(req.responseText);\n setupOidcEndoints(oidcProviderConfig);\n promise.setSuccess();\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n } else {\n setupOidcEndoints(oidcProvider);\n promise.setSuccess();\n }\n }\n }\n\n return promise.promise;\n }\n\n function fileLoaded(xhr) {\n return xhr.status == 0 && xhr.responseText && xhr.responseURL.startsWith('file:');\n }\n\n function setToken(token, refreshToken, idToken, timeLocal) {\n if (kc.tokenTimeoutHandle) {\n clearTimeout(kc.tokenTimeoutHandle);\n kc.tokenTimeoutHandle = null;\n }\n\n if (refreshToken) {\n kc.refreshToken = refreshToken;\n kc.refreshTokenParsed = jwtDecode(refreshToken);\n } else {\n delete kc.refreshToken;\n delete kc.refreshTokenParsed;\n }\n\n if (idToken) {\n kc.idToken = idToken;\n kc.idTokenParsed = jwtDecode(idToken);\n } else {\n delete kc.idToken;\n delete kc.idTokenParsed;\n }\n\n if (token) {\n kc.token = token;\n kc.tokenParsed = jwtDecode(token);\n kc.sessionId = kc.tokenParsed.session_state;\n kc.authenticated = true;\n kc.subject = kc.tokenParsed.sub;\n kc.realmAccess = kc.tokenParsed.realm_access;\n kc.resourceAccess = kc.tokenParsed.resource_access;\n\n if (timeLocal) {\n kc.timeSkew = Math.floor(timeLocal / 1000) - kc.tokenParsed.iat;\n }\n\n if (kc.timeSkew != null) {\n logInfo('[KEYCLOAK] Estimated time difference between browser and server is ' + kc.timeSkew + ' seconds');\n\n if (kc.onTokenExpired) {\n var expiresIn = (kc.tokenParsed['exp'] - (new Date().getTime() / 1000) + kc.timeSkew) * 1000;\n logInfo('[KEYCLOAK] Token expires in ' + Math.round(expiresIn / 1000) + ' s');\n if (expiresIn <= 0) {\n kc.onTokenExpired();\n } else {\n kc.tokenTimeoutHandle = setTimeout(kc.onTokenExpired, expiresIn);\n }\n }\n }\n } else {\n delete kc.token;\n delete kc.tokenParsed;\n delete kc.subject;\n delete kc.realmAccess;\n delete kc.resourceAccess;\n\n kc.authenticated = false;\n }\n }\n\n function createUUID() {\n var hexDigits = '0123456789abcdef';\n var s = generateRandomString(36, hexDigits).split(\"\");\n s[14] = '4';\n s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);\n s[8] = s[13] = s[18] = s[23] = '-';\n var uuid = s.join('');\n return uuid;\n }\n\n function parseCallback(url) {\n var oauth = parseCallbackUrl(url);\n if (!oauth) {\n return;\n }\n\n var oauthState = callbackStorage.get(oauth.state);\n\n if (oauthState) {\n oauth.valid = true;\n oauth.redirectUri = oauthState.redirectUri;\n oauth.storedNonce = oauthState.nonce;\n oauth.prompt = oauthState.prompt;\n oauth.pkceCodeVerifier = oauthState.pkceCodeVerifier;\n }\n\n return oauth;\n }\n\n function parseCallbackUrl(url) {\n var supportedParams;\n switch (kc.flow) {\n case 'standard':\n supportedParams = ['code', 'state', 'session_state', 'kc_action_status', 'iss'];\n break;\n case 'implicit':\n supportedParams = ['access_token', 'token_type', 'id_token', 'state', 'session_state', 'expires_in', 'kc_action_status', 'iss'];\n break;\n case 'hybrid':\n supportedParams = ['access_token', 'token_type', 'id_token', 'code', 'state', 'session_state', 'expires_in', 'kc_action_status', 'iss'];\n break;\n }\n\n supportedParams.push('error');\n supportedParams.push('error_description');\n supportedParams.push('error_uri');\n\n var queryIndex = url.indexOf('?');\n var fragmentIndex = url.indexOf('#');\n\n var newUrl;\n var parsed;\n\n if (kc.responseMode === 'query' && queryIndex !== -1) {\n newUrl = url.substring(0, queryIndex);\n parsed = parseCallbackParams(url.substring(queryIndex + 1, fragmentIndex !== -1 ? fragmentIndex : url.length), supportedParams);\n if (parsed.paramsString !== '') {\n newUrl += '?' + parsed.paramsString;\n }\n if (fragmentIndex !== -1) {\n newUrl += url.substring(fragmentIndex);\n }\n } else if (kc.responseMode === 'fragment' && fragmentIndex !== -1) {\n newUrl = url.substring(0, fragmentIndex);\n parsed = parseCallbackParams(url.substring(fragmentIndex + 1), supportedParams);\n if (parsed.paramsString !== '') {\n newUrl += '#' + parsed.paramsString;\n }\n }\n\n if (parsed && parsed.oauthParams) {\n if (kc.flow === 'standard' || kc.flow === 'hybrid') {\n if ((parsed.oauthParams.code || parsed.oauthParams.error) && parsed.oauthParams.state) {\n parsed.oauthParams.newUrl = newUrl;\n return parsed.oauthParams;\n }\n } else if (kc.flow === 'implicit') {\n if ((parsed.oauthParams.access_token || parsed.oauthParams.error) && parsed.oauthParams.state) {\n parsed.oauthParams.newUrl = newUrl;\n return parsed.oauthParams;\n }\n }\n }\n }\n\n function parseCallbackParams(paramsString, supportedParams) {\n var p = paramsString.split('&');\n var result = {\n paramsString: '',\n oauthParams: {}\n };\n for (var i = 0; i < p.length; i++) {\n var split = p[i].indexOf(\"=\");\n var key = p[i].slice(0, split);\n if (supportedParams.indexOf(key) !== -1) {\n result.oauthParams[key] = p[i].slice(split + 1);\n } else {\n if (result.paramsString !== '') {\n result.paramsString += '&';\n }\n result.paramsString += p[i];\n }\n }\n return result;\n }\n\n function createPromise() {\n // Need to create a native Promise which also preserves the\n // interface of the custom promise type previously used by the API\n var p = {\n setSuccess: function(result) {\n p.resolve(result);\n },\n\n setError: function(result) {\n p.reject(result);\n }\n };\n p.promise = new Promise(function(resolve, reject) {\n p.resolve = resolve;\n p.reject = reject;\n });\n\n return p;\n }\n\n // Function to extend existing native Promise with timeout\n function applyTimeoutToPromise(promise, timeout, errorMessage) {\n var timeoutHandle = null;\n var timeoutPromise = new Promise(function (resolve, reject) {\n timeoutHandle = setTimeout(function () {\n reject({ \"error\": errorMessage || \"Promise is not settled within timeout of \" + timeout + \"ms\" });\n }, timeout);\n });\n\n return Promise.race([promise, timeoutPromise]).finally(function () {\n clearTimeout(timeoutHandle);\n });\n }\n\n function setupCheckLoginIframe() {\n var promise = createPromise();\n\n if (!loginIframe.enable) {\n promise.setSuccess();\n return promise.promise;\n }\n\n if (loginIframe.iframe) {\n promise.setSuccess();\n return promise.promise;\n }\n\n var iframe = document.createElement('iframe');\n loginIframe.iframe = iframe;\n\n iframe.onload = function() {\n var authUrl = kc.endpoints.authorize();\n if (authUrl.charAt(0) === '/') {\n loginIframe.iframeOrigin = getOrigin();\n } else {\n loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));\n }\n promise.setSuccess();\n };\n\n var src = kc.endpoints.checkSessionIframe();\n iframe.setAttribute('src', src );\n iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');\n iframe.setAttribute('title', 'keycloak-session-iframe' );\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n var messageCallback = function(event) {\n if ((event.origin !== loginIframe.iframeOrigin) || (loginIframe.iframe.contentWindow !== event.source)) {\n return;\n }\n\n if (!(event.data == 'unchanged' || event.data == 'changed' || event.data == 'error')) {\n return;\n }\n\n\n if (event.data != 'unchanged') {\n kc.clearToken();\n }\n\n var callbacks = loginIframe.callbackList.splice(0, loginIframe.callbackList.length);\n\n for (var i = callbacks.length - 1; i >= 0; --i) {\n var promise = callbacks[i];\n if (event.data == 'error') {\n promise.setError();\n } else {\n promise.setSuccess(event.data == 'unchanged');\n }\n }\n };\n\n window.addEventListener('message', messageCallback, false);\n\n return promise.promise;\n }\n\n function scheduleCheckIframe() {\n if (loginIframe.enable) {\n if (kc.token) {\n setTimeout(function() {\n checkLoginIframe().then(function(unchanged) {\n if (unchanged) {\n scheduleCheckIframe();\n }\n });\n }, loginIframe.interval * 1000);\n }\n }\n }\n\n function checkLoginIframe() {\n var promise = createPromise();\n\n if (loginIframe.iframe && loginIframe.iframeOrigin ) {\n var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');\n loginIframe.callbackList.push(promise);\n var origin = loginIframe.iframeOrigin;\n if (loginIframe.callbackList.length == 1) {\n loginIframe.iframe.contentWindow.postMessage(msg, origin);\n }\n } else {\n promise.setSuccess();\n }\n\n return promise.promise;\n }\n\n function check3pCookiesSupported() {\n var promise = createPromise();\n\n if (loginIframe.enable || kc.silentCheckSsoRedirectUri) {\n var iframe = document.createElement('iframe');\n iframe.setAttribute('src', kc.endpoints.thirdPartyCookiesIframe());\n iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');\n iframe.setAttribute('title', 'keycloak-3p-check-iframe' );\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n var messageCallback = function(event) {\n if (iframe.contentWindow !== event.source) {\n return;\n }\n\n if (event.data !== \"supported\" && event.data !== \"unsupported\") {\n return;\n } else if (event.data === \"unsupported\") {\n logWarn(\n \"[KEYCLOAK] Your browser is blocking access to 3rd-party cookies, this means:\\n\\n\" +\n \" - It is not possible to retrieve tokens without redirecting to the Keycloak server (a.k.a. no support for silent authentication).\\n\" +\n \" - It is not possible to automatically detect changes to the session status (such as the user logging out in another tab).\\n\\n\" +\n \"For more information see: https://www.keycloak.org/docs/latest/securing_apps/#_modern_browsers\"\n );\n\n loginIframe.enable = false;\n if (kc.silentCheckSsoFallback) {\n kc.silentCheckSsoRedirectUri = false;\n }\n }\n\n document.body.removeChild(iframe);\n window.removeEventListener(\"message\", messageCallback);\n promise.setSuccess();\n };\n\n window.addEventListener('message', messageCallback, false);\n } else {\n promise.setSuccess();\n }\n\n return applyTimeoutToPromise(promise.promise, kc.messageReceiveTimeout, \"Timeout when waiting for 3rd party check iframe message.\");\n }\n\n function loadAdapter(type) {\n if (!type || type == 'default') {\n return {\n login: function(options) {\n window.location.assign(kc.createLoginUrl(options));\n return createPromise().promise;\n },\n\n logout: function(options) {\n window.location.replace(kc.createLogoutUrl(options));\n return createPromise().promise;\n },\n\n register: function(options) {\n window.location.assign(kc.createRegisterUrl(options));\n return createPromise().promise;\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n window.location.href = accountUrl;\n } else {\n throw \"Not supported by the OIDC server\";\n }\n return createPromise().promise;\n },\n\n redirectUri: function(options, encodeHash) {\n\n if (options && options.redirectUri) {\n return options.redirectUri;\n } else if (kc.redirectUri) {\n return kc.redirectUri;\n } else {\n return location.href;\n }\n }\n };\n }\n\n if (type == 'cordova') {\n loginIframe.enable = false;\n var cordovaOpenWindowWrapper = function(loginUrl, target, options) {\n if (window.cordova && window.cordova.InAppBrowser) {\n // Use inappbrowser for IOS and Android if available\n return window.cordova.InAppBrowser.open(loginUrl, target, options);\n } else {\n return window.open(loginUrl, target, options);\n }\n };\n\n var shallowCloneCordovaOptions = function (userOptions) {\n if (userOptions && userOptions.cordovaOptions) {\n return Object.keys(userOptions.cordovaOptions).reduce(function (options, optionName) {\n options[optionName] = userOptions.cordovaOptions[optionName];\n return options;\n }, {});\n } else {\n return {};\n }\n };\n\n var formatCordovaOptions = function (cordovaOptions) {\n return Object.keys(cordovaOptions).reduce(function (options, optionName) {\n options.push(optionName+\"=\"+cordovaOptions[optionName]);\n return options;\n }, []).join(\",\");\n };\n\n var createCordovaOptions = function (userOptions) {\n var cordovaOptions = shallowCloneCordovaOptions(userOptions);\n cordovaOptions.location = 'no';\n if (userOptions && userOptions.prompt == 'none') {\n cordovaOptions.hidden = 'yes';\n }\n return formatCordovaOptions(cordovaOptions);\n };\n\n var getCordovaRedirectUri = function() {\n return kc.redirectUri || 'http://localhost';\n };\n \n return {\n login: function(options) {\n var promise = createPromise();\n\n var cordovaOptions = createCordovaOptions(options);\n var loginUrl = kc.createLoginUrl(options);\n var ref = cordovaOpenWindowWrapper(loginUrl, '_blank', cordovaOptions);\n var completed = false;\n\n var closed = false;\n var closeBrowser = function() {\n closed = true;\n ref.close();\n };\n\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n var callback = parseCallback(event.url);\n processCallback(callback, promise);\n closeBrowser();\n completed = true;\n }\n });\n\n ref.addEventListener('loaderror', function(event) {\n if (!completed) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n var callback = parseCallback(event.url);\n processCallback(callback, promise);\n closeBrowser();\n completed = true;\n } else {\n promise.setError();\n closeBrowser();\n }\n }\n });\n\n ref.addEventListener('exit', function(event) {\n if (!closed) {\n promise.setError({\n reason: \"closed_by_user\"\n });\n }\n });\n\n return promise.promise;\n },\n\n logout: function(options) {\n var promise = createPromise();\n\n var logoutUrl = kc.createLogoutUrl(options);\n var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes,clearcache=yes');\n\n var error;\n\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n ref.close();\n }\n });\n\n ref.addEventListener('loaderror', function(event) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n ref.close();\n } else {\n error = true;\n ref.close();\n }\n });\n\n ref.addEventListener('exit', function(event) {\n if (error) {\n promise.setError();\n } else {\n kc.clearToken();\n promise.setSuccess();\n }\n });\n\n return promise.promise;\n },\n\n register : function(options) {\n var promise = createPromise();\n var registerUrl = kc.createRegisterUrl();\n var cordovaOptions = createCordovaOptions(options);\n var ref = cordovaOpenWindowWrapper(registerUrl, '_blank', cordovaOptions);\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n ref.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n }\n });\n return promise.promise;\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n var ref = cordovaOpenWindowWrapper(accountUrl, '_blank', 'location=no');\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n ref.close();\n }\n });\n } else {\n throw \"Not supported by the OIDC server\";\n }\n },\n\n redirectUri: function(options) {\n return getCordovaRedirectUri();\n }\n }\n }\n\n if (type == 'cordova-native') {\n loginIframe.enable = false;\n\n return {\n login: function(options) {\n var promise = createPromise();\n var loginUrl = kc.createLoginUrl(options);\n\n universalLinks.subscribe('keycloak', function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n });\n\n window.cordova.plugins.browsertab.openUrl(loginUrl);\n return promise.promise;\n },\n\n logout: function(options) {\n var promise = createPromise();\n var logoutUrl = kc.createLogoutUrl(options);\n\n universalLinks.subscribe('keycloak', function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n kc.clearToken();\n promise.setSuccess();\n });\n\n window.cordova.plugins.browsertab.openUrl(logoutUrl);\n return promise.promise;\n },\n\n register : function(options) {\n var promise = createPromise();\n var registerUrl = kc.createRegisterUrl(options);\n universalLinks.subscribe('keycloak' , function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n });\n window.cordova.plugins.browsertab.openUrl(registerUrl);\n return promise.promise;\n\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n window.cordova.plugins.browsertab.openUrl(accountUrl);\n } else {\n throw \"Not supported by the OIDC server\";\n }\n },\n\n redirectUri: function(options) {\n if (options && options.redirectUri) {\n return options.redirectUri;\n } else if (kc.redirectUri) {\n return kc.redirectUri;\n } else {\n return \"http://localhost\";\n }\n }\n }\n }\n\n throw 'invalid adapter type: ' + type;\n }\n\n var LocalStorage = function() {\n if (!(this instanceof LocalStorage)) {\n return new LocalStorage();\n }\n\n localStorage.setItem('kc-test', 'test');\n localStorage.removeItem('kc-test');\n\n var cs = this;\n\n function clearExpired() {\n var time = new Date().getTime();\n for (var i = 0; i < localStorage.length; i++) {\n var key = localStorage.key(i);\n if (key && key.indexOf('kc-callback-') == 0) {\n var value = localStorage.getItem(key);\n if (value) {\n try {\n var expires = JSON.parse(value).expires;\n if (!expires || expires < time) {\n localStorage.removeItem(key);\n }\n } catch (err) {\n localStorage.removeItem(key);\n }\n }\n }\n }\n }\n\n cs.get = function(state) {\n if (!state) {\n return;\n }\n\n var key = 'kc-callback-' + state;\n var value = localStorage.getItem(key);\n if (value) {\n localStorage.removeItem(key);\n value = JSON.parse(value);\n }\n\n clearExpired();\n return value;\n };\n\n cs.add = function(state) {\n clearExpired();\n\n var key = 'kc-callback-' + state.state;\n state.expires = new Date().getTime() + (60 * 60 * 1000);\n localStorage.setItem(key, JSON.stringify(state));\n };\n };\n\n var CookieStorage = function() {\n if (!(this instanceof CookieStorage)) {\n return new CookieStorage();\n }\n\n var cs = this;\n\n cs.get = function(state) {\n if (!state) {\n return;\n }\n\n var value = getCookie('kc-callback-' + state);\n setCookie('kc-callback-' + state, '', cookieExpiration(-100));\n if (value) {\n return JSON.parse(value);\n }\n };\n\n cs.add = function(state) {\n setCookie('kc-callback-' + state.state, JSON.stringify(state), cookieExpiration(60));\n };\n\n cs.removeItem = function(key) {\n setCookie(key, '', cookieExpiration(-100));\n };\n\n var cookieExpiration = function (minutes) {\n var exp = new Date();\n exp.setTime(exp.getTime() + (minutes*60*1000));\n return exp;\n };\n\n var getCookie = function (key) {\n var name = key + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n };\n\n var setCookie = function (key, value, expirationDate) {\n var cookie = key + '=' + value + '; '\n + 'expires=' + expirationDate.toUTCString() + '; ';\n document.cookie = cookie;\n };\n };\n\n function createCallbackStorage() {\n try {\n return new LocalStorage();\n } catch (err) {\n }\n\n return new CookieStorage();\n }\n\n function createLogger(fn) {\n return function() {\n if (kc.enableLogging) {\n fn.apply(console, Array.prototype.slice.call(arguments));\n }\n };\n }\n}\n\nexport { Keycloak as default };\n",".button {\n\tdisplay: flex;\n\theight: 50px;\n\tpadding: 0;\n\tbackground: #3e7671;\n\tborder: none;\n\toutline: none;\n\tborder-radius: 5px;\n\toverflow: hidden;\n\tfont-size: 16px;\n\tfont-weight: 500;\n\tcursor: pointer;\n min-width: 220px;\n max-width: 220px;\n}\n\n.button:hover {\n\tbackground: #008168;\n}\n\n.button:active {\n\tbackground: #3e7671;\n}\n\n.button-text{\n\tdisplay: block;\n\tmargin: auto;\n\tpadding: 0 24px;\n\tcolor: #fff;\n text-overflow: ellipsis;\n overflow:hidden;\n white-space:nowrap;\n width: 80px;\n}\n\n.button-icon {\n margin: auto;\n padding: 10px; \n}\n\n.button-profile {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tcolor: #fff;\n}\n\n.button-profile img {\n\theight: 50px;\n}\n\n.button-text-full-width {\n width: auto!important;\n}\n\n.button-link {\n text-decoration: none!important;\n}\n\n/* Menu icon */\n.gg-menu-grid-r {\n color: #fff;\n box-sizing: border-box;\n position: relative;\n display: block;\n transform: scale(var(--ggs,1));\n width: 16px;\n height: 16px;\n}\n \n.gg-menu-grid-r::before {\n content: \"\";\n display: block;\n box-sizing: border-box;\n position: absolute;\n width: 4px;\n height: 4px;\n background: currentColor;\n box-shadow:\n 0 6px 0,\n 6px 6px 0,\n 12px 6px 0,\n 6px 12px 0,\n 12px 12px 0,\n 6px 0 0,\n 12px 0 0,\n 0 12px 0;\n} \n\n/* Drop down section */\n.dropdown {\n position: relative;\n display: inline-block;\n}\n \n.dropdown-content {\n display: none;\n position: absolute;\n right: 0;\n background-color: #f9f9f9;\n min-width: 180px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n border-radius: 5px;\n}\n \n.dropdown-content a {\n color: #71797E;\n padding: 16px 20px;\n text-decoration: none;\n display: block;\n cursor: pointer;\n}\n \n.dropdown-content a:hover {\n background-color: #f1f1f1;\n color: #000;\n opacity: 0.7;\n}\n\n.dropdown:hover .dropdown-content {\n display: block;\n}\n\n\n/* Modal Content */\n.modal {\n display: none;\n position: fixed;\n z-index: 1;\n padding-top: 100px;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background-color: rgb(0,0,0);\n background-color: rgba(0,0,0,0.4);\n text-align: center;\n }\n \n\n .modal-content {\n background-color: #fefefe;\n margin: auto;\n padding: 20px;\n border: 1px solid #888;\n width: 40%;\n }\n\n .modal-body {\n max-height: 50vh;\n overflow-y: auto;\n }\n \n .close {\n color: #aaaaaa;\n float: right;\n font-size: 28px;\n font-weight: bold;\n }\n \n .close:hover,\n .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n }\n\n .modal-app {\n background-color: #c3e9bc;\n padding: 15px;\n margin: 10px;\n border-radius: 5px;\n }\n\n .external-app-link {\n text-decoration:none; \n color: #000;\n }\n\n .gray-text {\n color: #606060;\n }\n\n .green-text {\n color: #3e7671;\n }\n\n #countdown {\n position: relative;\n margin: auto;\n margin-top: 30px;\n height: 40px;\n width: 40px;\n text-align: center;\n }\n \n #countdown-number {\n color: #2e2e2e;\n display: inline-block;\n line-height: 40px;\n }\n \n svg {\n position: absolute;\n top: 0;\n right: 0;\n width: 40px;\n height: 40px;\n transform: rotateY(-180deg) rotateZ(-90deg);\n }\n \n svg circle {\n stroke-dasharray: 113px;\n stroke-dashoffset: 0px;\n stroke-linecap: round;\n stroke-width: 4px;\n stroke: #008168;\n fill: none;\n animation: countdown 6s linear infinite forwards;\n }\n \n @keyframes countdown {\n from {\n stroke-dashoffset: 0px;\n }\n to {\n stroke-dashoffset: 113px;\n }\n }\n\n .lds-ring {\n color: #fff\n }\n .lds-ring {\n display: flex;\n justify-content: center;\n align-items: center;\n margin: auto;\n position: relative;\n }\n .lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 30px;\n height: 30px;\n margin: 3px;\n border: 3px solid currentColor;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n .lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n }\n .lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n }\n .lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }","import { Component, Prop, State, h, Element } from '@stencil/core';\nimport Keycloak from \"keycloak-js\";\n\n\n@Component({\n tag: 'dash-button',\n styleUrl: 'dash-button.css',\n shadow: true,\n})\nexport class DashButtonComponent {\n\n @Element() el;\n \n @Prop() showPostLoginText: boolean = false;\n @Prop() silentCheckSso: boolean = false;\n @Prop() redirectUri: string;\n @Prop() authMethod: string = \"check-sso\";\n\n @Prop() keycloakUri: string = \"http://localhost:8080\";\n @Prop() realm: string = \"\";\n @Prop() clientId: string = \"\";\n\n @Prop() appId: string = \"\";\n @Prop() portalUrl: string = \"\";\n @Prop() marketplaceUrl: string = \"\";\n @Prop() showUnauthorizedModal: boolean = false;\n @Prop() postTextDelayDuration: number;\n\n @State() keycloak: any = new Keycloak({\n url: this.keycloakUri,\n realm: this.realm,\n clientId: this.clientId,\n });;\n\n @State() isAuth = false;\n @State() givenName: string = \"\";\n @State() silentCheckSsoRedirectUri: string = window.location.origin + '/assets/verificar-sso.html';\n\n @State() appList = []\n\n @State() showPostLoginLoadingSpinner = false;\n\n componentWillLoad() {\n //\n // User set post-text-delay-duration for displaying loading spinner\n //\n if(this.postTextDelayDuration > 0) {\n // Show loading spinner\n this.showPostLoginLoadingSpinner = true\n // Removing a loading spinner after the delay period ending\n setTimeout(() => {\n this.showPostLoginLoadingSpinner = false\n }, this.postTextDelayDuration);\n }\n\n //\n // Init Keycloak\n //\n this.initKeycloak().then(() => {\n // Check if the user is authenticated\n if(this.isAuth) {\n this.getAppList().then(res => {\n this.appList = res\n\n // If the user has set an app ID, check if they have permission to access\n if(this.appId) {\n \n // Retrieve the list of buttons that are configured to set the app ID\n const appIdList = this.appId.replace(/'/g, '').split(',');\n // Remote appID list parsed from object\n const tempAppList = this.appList.map(obj => obj['shortname'])\n\n // Check if the user has permission to access the selected application\n if(appIdList.filter(id => tempAppList.includes(id)).length == 0) {\n // Update local storage app permission\n localStorage.setItem(\"ZDZW_app_permission\", JSON.stringify(false));\n\n // Show modal\n const appErrorModal = this.el.shadowRoot.querySelector('#appPermissionErrorModal');\n appErrorModal.style.display = \"block\";\n\n // If a redirect URL is provided, show the loading spinner\n if (this.portalUrl && this.showUnauthorizedModal) {\n var countdownNumberEl = this.el.shadowRoot.getElementById('countdown-number');\n var countdown = 6;\n\n countdownNumberEl.textContent = countdown.toString();\n\n setInterval(() => {\n countdown = --countdown <= 0 ? 6 : countdown;\n countdownNumberEl.textContent = countdown.toString();\n\n // Once the countdown finishes, redirect to the provided URL\n if(countdown == 1) {\n // appErrorModal.style.display = \"none\";\n window.location.replace(this.portalUrl.toString());\n }\n }, 1000);\n }\n } else {\n // The user is authenticated and has the necessary permissions\n // Update local storage app permission\n localStorage.setItem(\"ZDZW_app_permission\", JSON.stringify(true));\n }\n }\n\n })\n }\n })\n }\n\n async initKeycloak() {\n // Remove the initiation time permission localstorage object\n localStorage.removeItem(\"ZDZW_app_permission\");\n\n await this.keycloak.init(\n {\n onLoad: this.authMethod,\n checkLoginIframe: false,\n silentCheckSsoRedirectUri: this.silentCheckSso ? this.silentCheckSsoRedirectUri : '',\n }).then(res => {\n if(res) {\n this.isAuth = true\n localStorage.setItem(\"keycloak\", JSON.stringify(this.keycloak));\n document.cookie = \"ZDZW_cookie=\" + JSON.parse(localStorage.getItem('keycloak')).token;\n\n this.givenName = JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.given_name\n } \n });\n }\n\n async getAppList() {\n // const token = await JSON.parse(localStorage.getItem('keycloak')).token;\n // const response = await fetch(this.marketplaceUrl + '/api/v1/product/nameAndShortName', {\n // headers: new Headers({\n // 'Authorization': 'Bearer ' + token,\n // }),\n // })\n\n const response = await fetch(this.marketplaceUrl + '/api/v1/product/nameAndShortName')\n const jsonObj = await response.json()\n return jsonObj\n }\n\n login() { \n this.keycloak.login() \n }\n\n logout() {\n localStorage.removeItem(\"keycloak\");\n document.cookie = \"ZDZW_cookie=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n this.keycloak.logout() \n } \n\n showModal() {\n const appModal = this.el.shadowRoot.querySelector('#appListModal');\n appModal.style.display = \"block\";\n }\n\n closeModal() {\n const appModal = this.el.shadowRoot.querySelector('#appListModal');\n appModal.style.display = \"none\";\n }\n\n render() {\n return <div>\n <div>\n {\n (() => {\n if(this.isAuth && this.showPostLoginText) {\n // User set post-text-delay-duration for displaying loading spinner\n if(this.showPostLoginLoadingSpinner) {\n return (\n <a id=\"login-btn\" class=\"button button-link\">\n <div class=\"lds-ring\"><div></div><div></div><div></div><div></div></div>\n </a>\n )\n } else {\n return (\n <a href={this.redirectUri} id=\"login-btn\" class=\"button button-link\">\n <span class=\"button-text button-text-full-width\">Go to Dashboard</span>\n </a>\n )\n }\n \n } else if (this.isAuth) {\n return (\n <div id=\"profile-btn\" class=\"dropdown\">\n <button type=\"button\" class=\"button\">\n <span class=\"button-profile\">\n <img src=\"https://i.pravatar.cc/100?img=32\" alt=\"\"/>\n </span>\n <span id=\"given-name\" class=\"button-text\">{this.givenName}</span>\n <div class=\"button-icon\">\n <span class=\"gg-menu-grid-r\"></span>\n </div>\n </button>\n <div class=\"dropdown-content\">\n <a onClick={this.showModal.bind(this)} id=\"applications-btn\">Applications</a>\n <a href={this.portalUrl} target='_blank' id=\"applications-btn\">Portal</a>\n <a href={this.marketplaceUrl} target='_blank' id=\"applications-btn\">Marketplace</a>\n <a onClick={this.logout.bind(this)} id=\"logout-btn\">Logout</a>\n </div>\n </div>\n )\n } else {\n return (\n <button onClick={this.login.bind(this)} id=\"login-btn\" type=\"button\" class=\"button\">\n <span class=\"button-text\">Login</span>\n </button>\n )\n }\n })() \n } \n </div>\n \n <div id=\"appListModal\" class=\"modal\">\n \n <div class=\"modal-content\">\n <span onClick={this.closeModal.bind(this)} class=\"close\">×</span>\n <h3>Applications</h3>\n <div class=\"modal-body\">\n {this.appList.length > 0 ? this.appList.map( app => {\n return (\n <a class=\"external-app-link\" target='_blank' href={\"https://\" + app.shortname + \"-zdzw\"+ this.portalUrl.replace(/(^\\w+:|^)\\/\\//, '').replace('.portal-frontend-zdzw','')}>\n <div class=\"modal-app\">\n <div>{app.name}</div>\n </div>\n </a>\n );\n }) : <div><h3 class=\"gray-text\">Not installed application found.</h3> <p class=\"gray-text\">Please contact administration.</p></div>}\n </div>\n </div>\n \n </div>\n\n <div id=\"appPermissionErrorModal\" class=\"modal\">\n <div class=\"modal-content\">\n <img src=\"data:image/png;base64,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\"/>\n <h2 class=\"green-text margin-b\">You don't have permission to access this application.</h2>\n <h3 class=\"green-text\">Please contact the administration.</h3>\n \n {(this.portalUrl && this.showUnauthorizedModal) ? \n <div>\n <h4 class=\"gray-text\">You will be automatically redirected to the portal.</h4>\n <div id=\"countdown\">\n <div id=\"countdown-number\"></div>\n <svg>\n <circle r=\"18\" cx=\"20\" cy=\"20\"></circle>\n </svg>\n </div>\n </div>\n : <div></div>\n }\n </div>\n </div>\n\n </div>;\n }\n}\n"],"mappings":"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"}
|