{"version":3,"sources":["webpack://insight-web-ui/./insight/scripts/api/apiFetch.js","webpack://insight-web-ui/./insight/scripts/common/pageHeader.js","webpack://insight-web-ui/./insight/scripts/login/authService.js","webpack://insight-web-ui/./insight/scripts/session.js"],"names":["apiFetch","path","init","headers","Headers","has","set","body","method","fetch","viewModel","pageHeader","params","self","this","data","loading","selected","ssoUrls","loginUser","showUserMenu","showSupportInfo","supportInfo","dataProcessHasErrors","dataProcessCurrentlyRunning","dataProcessesArePending","enableDataProcessNotifications","isAdminUser","userPermissions","showPasswordDialog","newPassword1","newPassword2","enableVoidMatrix","enableBudgets","logOut","togglePasswordDialog","checkNewPassword","document","getElementById","className","style","visibility","saveNewPassword","then","alert","passwordDialogClosed","openUserMenu","finally","on","event","target","parents","length","off","onClickDataProcessingStatus","url","window","location","href","substring","lastIndexOf","getDataProcessingCurrentStatus","response","statusObj","processCurrentlyRunning","errorsOccurredRecently","processesArePending","enableStatusNotifications","errorResult","currentUrl","search","indexOf","replace","localStorage","setItem","loginUrl","isAdmin","result","err","active","setInterval","template","element","ssoKey","localAuthService","authService","setAuthenticationValues","userId","appUsername","authUsername","token","permissions","persistUserTokensAcrossSessions","persistToken","getItem","setAuthValue","removeItem","getToken","prototype","authenticateUser","username","password","mealTicketUser","URL","credentials","jsonDataString","JSON","stringify","searchParams","toString","processData","resp","ok","json","includes","status","Promise","_","assign","catch","reason","getSsoUrls","getUser","auth","Authorization","getAuthorizationHeaderValue","reject","loadInsightUser","clearAuthentication","handleApiResult","jqXhr","goToLoginPage","unauthorizedPage","initializeSsoUser","sso","loggedInSso","getLoginRedirectUrl","getLoginUser","user","getSupportInfo","deferred","type","beforeSend","xhr","setRequestHeader","success","results","resolve","error","promise","changePassword","newPassword","sendPasswordResetEmail","emailAddress","request","contentType","dataType","checkPasswordResetTokenStatus","tokenValue","resetPassword","sendUsernameReminderEmail","key","value","String","logOutUser","allSettled","urls","logout","redirectUrl"],"mappings":"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","file":"865_9a2d0db938a2ce5843c3.js","sourcesContent":["import { authService } from '../login';\r\n\r\n/**\r\n * Sends an authenticated request to the back-end API.\r\n * \r\n * @param {string} path The API path.\r\n * @param {RequestInit?} init Custom settings to apply to the request.\r\n */\r\nexport function apiFetch(path, init = {}) {\r\n init.headers = new Headers(init.headers);\r\n\r\n if (!init.headers.has('Authorization'))\r\n init.headers.set('Authorization', authService.getAuthorizationHeaderValue());\r\n\r\n if (init.body && !init.headers.has('Content-Type') && init.method === 'POST')\r\n init.headers.set('Content-Type', 'application/json')\r\n\r\n return fetch(`${API_URL}/${path}`, init);\r\n}\r\n","/*\r\n pageHeader\r\n\r\n This component represents the page header for the application\r\n\r\n */\r\n\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { authService } from '../login';\r\nimport { logOutUser } from '../session';\r\nimport { featuresRepo } from './featuresRepo';\r\n\r\nko.components.register('page-header', {\r\n viewModel: pageHeader,\r\n template: {\r\n element: 'page-header-template'\r\n }\r\n});\r\n\r\n\r\nfunction pageHeader(params) {\r\n\r\n var self = this;\r\n\r\n params = params || {};\r\n\r\n var data = params && params.data ? params.data : params;\r\n\r\n if (data instanceof pageHeader)\r\n return data;\r\n\r\n //Base props\r\n self.loading = ko.observable(false);\r\n self.selected = ko.observable(data.selected);\r\n self.ssoUrls = ko.observable(null);\r\n self.loginUser = ko.observable(\"\");\r\n self.showUserMenu = ko.observable(false);\r\n self.showSupportInfo = ko.observable(false);\r\n self.supportInfo = ko.observable(\"\");\r\n self.dataProcessHasErrors = ko.observable(false);\r\n self.dataProcessCurrentlyRunning = ko.observable(\"\");\r\n self.dataProcessesArePending = ko.observable(false);\r\n self.enableDataProcessNotifications = ko.observable(false);\r\n self.isAdminUser = ko.observable(false);\r\n self.userPermissions = ko.observable([]);\r\n self.showPasswordDialog = ko.observable(false);\r\n self.newPassword1 = ko.observable(\"\");\r\n self.newPassword2 = ko.observable(\"\");\r\n self.enableVoidMatrix = ko.observable(false); //default to false until request returns with features\r\n self.enableBudgets = ko.observable(false); //default to false until request returns with features\r\n\r\n //Public functions\r\n\r\n self.logOut = function () {\r\n logOutUser();\r\n }\r\n\r\n self.togglePasswordDialog = function () {\r\n\r\n if (self.showPasswordDialog()) {\r\n self.showPasswordDialog(false);\r\n }\r\n else {\r\n self.showUserMenu(false);\r\n self.showPasswordDialog(true);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n self.checkNewPassword = function () {\r\n if (self.newPassword1() == self.newPassword2()) {\r\n document.getElementById(\"divSecondPassword\").className = \"\";\r\n document.getElementById(\"txtNoMatch\").style.visibility = 'hidden';\r\n document.getElementById(\"btnSaveNewPassword\").style.visibility = 'visible';\r\n return true;\r\n }\r\n else {\r\n\r\n document.getElementById(\"divSecondPassword\").className = \"form-group has-error has-feedback\";\r\n document.getElementById(\"txtNoMatch\").style.visibility = 'visible';\r\n document.getElementById(\"btnSaveNewPassword\").style.visibility = 'hidden';\r\n return false;\r\n }\r\n }\r\n\r\n self.saveNewPassword = function () {\r\n if (self.checkNewPassword()) {\r\n //post to server\r\n authService.changePassword(self.newPassword1()).then(function (data) {\r\n if (data == \"200\") {\r\n alert('Your password has been changed. You will now be logged out. Please login using your new password.');\r\n logOutUser();\r\n }\r\n });\r\n }\r\n }\r\n\r\n self.passwordDialogClosed = function () {\r\n self.showPasswordDialog(false);\r\n }\r\n\r\n\r\n self.openUserMenu = function () {\r\n if (!self.showUserMenu()) {\r\n self.loading(true);\r\n self.showUserMenu(true);\r\n\r\n authService.getSsoUrls().then(self.ssoUrls).finally(() => self.loading(false));\r\n\r\n //If the user clicks outside of the user menu, hide it\r\n $(document).on(\"mouseup.userMenu\", function (event) {\r\n var $clickedEl = $(event.target);\r\n if (!$clickedEl.parents('#page-header-user-menu').length > 0) {\r\n self.showUserMenu(false);\r\n $(document).off('mouseup.userMenu')\r\n }\r\n });\r\n }\r\n }\r\n\r\n self.onClickDataProcessingStatus = function () {\r\n var url = window.location.href;\r\n url = url.substring(0, url.lastIndexOf(\"/\"));\r\n url += \"/dataProcessingStatus.html\";\r\n window.location.href = url;\r\n }\r\n\r\n var getSupportInfo = function () {\r\n\r\n self.showSupportInfo(false);\r\n\r\n authService.getSupportInfo().then(\r\n function (response) {\r\n\r\n var supportInfo = response;\r\n if (supportInfo && supportInfo.length > 0) {\r\n self.supportInfo(supportInfo);\r\n self.showSupportInfo(true);\r\n }\r\n },\r\n function (errorResult) {\r\n }\r\n );\r\n };\r\n\r\n self.getDataProcessingCurrentStatus = function () {\r\n\r\n self.dataProcessHasErrors(false);\r\n self.dataProcessCurrentlyRunning(\"\");\r\n self.dataProcessesArePending(false);\r\n\r\n authService.getDataProcessingCurrentStatus().then(\r\n function (response) {\r\n\r\n var statusObj = response;\r\n if (statusObj) {\r\n\r\n self.dataProcessCurrentlyRunning(statusObj.processCurrentlyRunning || \"\");\r\n\r\n if (statusObj.errorsOccurredRecently === true)\r\n self.dataProcessHasErrors(true);\r\n\r\n if (statusObj.processesArePending === true)\r\n self.dataProcessesArePending(true);\r\n\r\n self.enableDataProcessNotifications(statusObj.enableStatusNotifications || false);\r\n }\r\n },\r\n function (errorResult) {\r\n }\r\n );\r\n };\r\n\r\n //Private functions\r\n var init = function () {\r\n\r\n if (self.selected() === \"ForgotLogin\" || self.selected() === \"ResetPassword\")\r\n return;\r\n\r\n var currentUrl = window.location.href;\r\n\r\n //Check to see if we're coming from Trackmax\r\n if (window.location.search.indexOf(\"fromtrackmax=1\") > 0) {\r\n\r\n currentUrl = currentUrl.replace(\"?fromtrackmax=1\", \"?\");\r\n currentUrl = currentUrl.replace(\"&fromtrackmax=1\", \"\");\r\n\r\n //Store the current url so that the login page can redirect later.\r\n localStorage.setItem(\"loginRedirect\", currentUrl);\r\n\r\n //Redirect to login page\r\n var loginUrl = currentUrl.substring(0, currentUrl.lastIndexOf(\"/\"));\r\n loginUrl += \"/login.html\";\r\n window.location.href = loginUrl;\r\n return;\r\n }\r\n\r\n var loginUser = authService.getLoginUser();\r\n if (loginUser && loginUser.length > 0)\r\n self.loginUser(loginUser);\r\n\r\n var isAdmin = authService.isAdminUser();\r\n self.isAdminUser(isAdmin);\r\n self.userPermissions(authService.userPermissions());\r\n\r\n featuresRepo.getFeatures().then(\r\n function (result) {\r\n if (result && result.enableVoidMatrix)\r\n self.enableVoidMatrix(result.enableVoidMatrix);\r\n\r\n if (result && result.enableBudgets)\r\n self.enableBudgets(result.enableBudgets);\r\n },\r\n function (err) {\r\n }\r\n );\r\n\r\n if (!(data.active ?? true)) return;\r\n\r\n getSupportInfo();\r\n self.getDataProcessingCurrentStatus();\r\n\r\n setInterval(function () {\r\n self.getDataProcessingCurrentStatus();\r\n }, 60000);\r\n };\r\n\r\n //Init the UI\r\n init();\r\n}\r\n","/*\r\n authService\r\n\r\n This class handles any authorization and authentication functionality\r\n\r\n */\r\n\r\nimport $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport { uiHelper } from '../common';\r\n\r\nconst ssoKey = 'sso';\r\n\r\nvar AuthService = (function () {\r\n\tfunction authService() {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Partial} auth \r\n\t */\r\n\tvar setAuthenticationValues = function ({ userId, appUsername, authUsername, token, permissions, persistUserTokensAcrossSessions } = {}) {\r\n\t\t//If persistUserTokensAcrossSessions == true, the user token is stored in LocalStorage and wil persist even when the user\r\n\t\t//closes the browser window. The api processes server side will determine when to expire the token.\r\n\t\t//If persistUserTokensAcrossSessions == false, the token is stored in a session cookie (no expiration set), which\r\n\t\t//will be deleted when the browser is closed.\r\n\t\t//NOTE: I found that Chrome did not delete the cookie we're using to store the token upon \r\n\t\t//closing the browser window. This was because I have a Chrome setting to enable background\r\n\t\t//Chrome process to run even if Chrome is closed. See link below:\r\n\t\t//http://stackoverflow.com/questions/10617954/chrome-doesnt-delete-session-cookies\r\n\r\n\t\t//If null or undefined, don't change the stored value\r\n\t\tvar persistToken = localStorage.getItem(\"persistToken\");\r\n\t\tif (persistUserTokensAcrossSessions !== undefined && persistUserTokensAcrossSessions !== null) {\r\n\t\t\tpersistToken = persistUserTokensAcrossSessions ? \"1\" : \"0\";\r\n\t\t\tlocalStorage.setItem(\"persistToken\", persistToken);\r\n\t\t}\r\n\r\n\t\tsetAuthValue(\"authUsername\", authUsername);\r\n\r\n\t\t//Store the username\r\n\t\tif (appUsername) {\r\n\t\t\tlocalStorage.setItem(\"loginUser\", appUsername);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlocalStorage.removeItem(\"loginUser\");\r\n\t\t}\r\n\r\n\t\tsetAuthValue(\"userId\", userId);\r\n\r\n\t\t//Store the userPermissions\r\n\t\tif (!_.isNullOrUndefined(permissions)) {\r\n\t\t\tlocalStorage.setItem(\"userPermissions\", permissions);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlocalStorage.removeItem(\"userPermissions\");\r\n\t\t}\r\n\r\n\t\tif (token) {\r\n\t\t\tif (persistToken === \"1\") {\r\n\t\t\t\tlocalStorage.setItem(\"userToken\", token);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tuiHelper.setCookie(\"userToken\", token);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar getToken = function () {\r\n\t\treturn uiHelper.getCookie(\"userToken\") || localStorage.getItem(\"userToken\");\r\n\t}\r\n\r\n\t/**\r\n\t * Authenticate the user credentials with the api\r\n\t * \r\n\t * @param {string} username \r\n\t * @param {string} password \r\n\t * @param {string} mealTicketUser \r\n\t * @returns {Promise}\r\n\t */\r\n\tauthService.prototype.authenticateUser = function (username, password, mealTicketUser) {\r\n\t\tconst url = new URL(`${API_URL}/account/authenticate`, location.href);\r\n\r\n\t\tvar credentials = {};\r\n\t\tcredentials.username = username;\r\n\t\tcredentials.password = password;\r\n\r\n\t\tvar jsonDataString = JSON.stringify(credentials);\r\n\r\n\t\tif (mealTicketUser) url.searchParams.set('mealTicketUser', mealTicketUser);\r\n\r\n\t\treturn fetch(url.toString(), {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: jsonDataString,\r\n\t\t\tprocessData: false,\r\n\t\t\theaders: { 'Content-Type': 'application/json; charset=utf-8' }\r\n\t\t})\r\n\t\t\t.then(resp => {\r\n\t\t\t\tif (resp.ok) return resp.json();\r\n\t\t\t\telse if ([401, 403].includes(resp.status)) throw 'Incorrect username or password.';\r\n\t\t\t\telse throw 'Unexpected error';\r\n\t\t\t})\r\n\t\t\t.then(resp => resp.url ? new Promise(_ => location.assign(resp.url)) : setAuthenticationValues(resp))\r\n\t\t\t.catch((reason) => {\r\n\t\t\t\tsetAuthenticationValues();\r\n\t\t\t\tthrow reason;\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves the URLs for interacting with the SSO provider.\r\n\t */\r\n\tauthService.prototype.getSsoUrls = function () {\r\n\t\tif (this.ssoUrls) return this.ssoUrls;\r\n\r\n\t\treturn this.ssoUrls =\r\n\t\t\tfetch(`${API_URL}/account/sso-urls`).then(response => /** @type {SsoUrls?} */(response.json()));\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a user and loads it into the client.\r\n\t * \r\n\t * @param {UserSecurityProperties | undefined} auth The user to load, or none to load from the client storage.\r\n\t */\r\n\tauthService.prototype.getUser = function (auth) {\r\n\t\treturn fetch(`${API_URL}/account/current-user`, {\r\n\t\t\theaders: { Authorization: this.getAuthorizationHeaderValue(auth) }\r\n\t\t})\r\n\t\t\t.then(response =>\r\n\t\t\t\tresponse.ok ? /** @type {Promise} **/(response.json()) : Promise.reject(response)\r\n\t\t\t)\r\n\t\t\t.then(response => {\r\n\t\t\t\tsetAuthenticationValues(response);\r\n\t\t\t\treturn this.loadInsightUser().then(() => response);\r\n\t\t\t})\r\n\t\t\t.catch(response => {\r\n\t\t\t\tsetAuthenticationValues();\r\n\t\t\t\tthrow response;\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the user's auth info from the client.\r\n\t */\r\n\tauthService.prototype.clearAuthentication = function () {\r\n\t\tsetAuthenticationValues();\r\n\t}\r\n\r\n\t//Handle errors returned from api calls\r\n\tauthService.prototype.handleApiResult = function (jqXhr) {\r\n\r\n\t\tvar currentUrl = window.location.href;\r\n\r\n\t\tif (jqXhr.status === 401) {\r\n\t\t\tgoToLoginPage();\r\n\t\t}\r\n\t\telse if (jqXhr.status === 403) {\r\n\t\t\t//Redirect to unauthorized page\r\n\t\t\tvar unauthorizedPage = currentUrl.substring(0, currentUrl.lastIndexOf(\"/\"));\r\n\t\t\tunauthorizedPage += \"/unauthorized.html\";\r\n\t\t\twindow.location.href = unauthorizedPage;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Loads the SSO user who just logged in to the client.\r\n\t */\r\n\tauthService.prototype.initializeSsoUser = function () {\r\n\t\tconst sso = /** @type {SsoAuth} **/ (uiHelper.getUriEncodedCookie(ssoKey));\r\n\r\n\t\treturn this\r\n\t\t\t.getUser({ token: sso.token, username: sso.userId })\r\n\t\t\t.then(_ => uiHelper.deleteCookie(ssoKey))\r\n\t\t\t.catch(response => this.handleApiResult(response))\r\n\t}\r\n\r\n\t/**\r\n\t * Loads the current Insight user into the client.\r\n\t */\r\n\tauthService.prototype.loadInsightUser = function () {\r\n\t\treturn fetch(`${API_URL}/account/current-insight-user`, {\r\n\t\t\theaders: { Authorization: this.getAuthorizationHeaderValue() }\r\n\t\t})\r\n\t\t\t.then(response => /** @type {Promise} */(response.json()))\r\n\t\t\t.then(({ isAdminUser }) => localStorage.setItem(\"isAdminUser\", isAdminUser))\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates whether the current user logged in via SSO.\r\n\t */\r\n\tauthService.prototype.loggedInSso = function () {\r\n\t\treturn uiHelper.hasCookie(ssoKey);\r\n\t}\r\n\r\n\t//Get the URL that the user should be redirected to upon logging in.\r\n\tauthService.prototype.getLoginRedirectUrl = function () {\r\n\t\treturn localStorage.getItem(\"loginRedirect\");\r\n\t}\r\n\r\n\tauthService.prototype.isAdminUser = function () {\r\n\t\tvar isAdmin = localStorage.getItem(\"isAdminUser\");\r\n\t\treturn isAdmin == \"true\";\r\n\t}\r\n\r\n\tauthService.prototype.userPermissions = function () {\r\n\t\tvar perms = localStorage.getItem(\"userPermissions\");\r\n\t\treturn perms || [];\r\n\t}\r\n\r\n\tauthService.prototype.getLoginUser = function () {\r\n\t\tconst user = localStorage.getItem(\"loginUser\");\r\n\r\n\t\tif (user) return user; else goToLoginPage();\r\n\t}\r\n\r\n\tauthService.prototype.getSupportInfo = function () {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/supportinfo`,\r\n\t\t\ttype: 'GET',\r\n\t\t\tbeforeSend: function (xhr) {\r\n\t\t\t\txhr.setRequestHeader(\"Authorization\", localAuthService.getAuthorizationHeaderValue());\r\n\t\t\t},\r\n\t\t\tsuccess: function (results) {\r\n\t\t\t\tdeferred.resolve(results);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tlocalAuthService.handleApiResult(jqXhr);\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\tauthService.prototype.getDataProcessingCurrentStatus = function () {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/dataprocessing/currentstatus`,\r\n\t\t\ttype: 'GET',\r\n\t\t\tbeforeSend: function (xhr) {\r\n\t\t\t\txhr.setRequestHeader(\"Authorization\", localAuthService.getAuthorizationHeaderValue());\r\n\t\t\t},\r\n\t\t\tsuccess: function (results) {\r\n\t\t\t\tdeferred.resolve(results);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tlocalAuthService.handleApiResult(jqXhr);\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\t/**\r\n\t * Get the stored auth token value to pass along in the\r\n\t * ajax request header for api calls\r\n\t *\r\n\t * @param {UserSecurityProperties | undefined} auth \r\n\t */\r\n\tauthService.prototype.getAuthorizationHeaderValue = function ({ token, username } = {\r\n\t\ttoken: getToken(),\r\n\t\tusername: localStorage.getItem('authUsername')\r\n\t}) {\r\n\t\treturn `Basic ${username}:${token}`;\r\n\t}\r\n\r\n\tauthService.prototype.changePassword = function (newPassword) {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/ChangeLogin?newpass=` + newPassword,\r\n\t\t\ttype: 'GET',\r\n\t\t\tbeforeSend: function (xhr) {\r\n\t\t\t\txhr.setRequestHeader(\"Authorization\", localAuthService.getAuthorizationHeaderValue());\r\n\t\t\t},\r\n\t\t\tsuccess: function (results, status, jqXhr) {\r\n\r\n\t\t\t\tdeferred.resolve(results);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tlocalAuthService.handleApiResult(jqXhr);\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\r\n\t}\r\n\r\n\tauthService.prototype.sendPasswordResetEmail = function (emailAddress) {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\tvar request = {};\r\n\t\trequest.emailAddress = emailAddress;\r\n\r\n\t\tvar jsonDataString = JSON.stringify(request);\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/account/sendpasswordresetemail`,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: jsonDataString,\r\n\t\t\tprocessData: false,\r\n\t\t\tcontentType: 'application/json; charset=utf-8',\r\n\t\t\tdataType: 'json',\r\n\t\t\tsuccess: function (response) {\r\n\t\t\t\tdeferred.resolve(response);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\tauthService.prototype.checkPasswordResetTokenStatus = function (tokenValue) {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\tvar request = {};\r\n\t\trequest.tokenValue = tokenValue;\r\n\r\n\t\tvar jsonDataString = JSON.stringify(request);\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/account/checkpasswordresettokenstatus`,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: jsonDataString,\r\n\t\t\tprocessData: false,\r\n\t\t\tcontentType: 'application/json; charset=utf-8',\r\n\t\t\tdataType: 'json',\r\n\t\t\tsuccess: function (response) {\r\n\t\t\t\tdeferred.resolve(response);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\tauthService.prototype.resetPassword = function (newPassword, tokenValue) {\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\tvar request = {};\r\n\t\trequest.newPassword = newPassword;\r\n\t\trequest.tokenValue = tokenValue;\r\n\r\n\t\tvar jsonDataString = JSON.stringify(request);\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/account/resetpassword`,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: jsonDataString,\r\n\t\t\tprocessData: false,\r\n\t\t\tcontentType: 'application/json; charset=utf-8',\r\n\t\t\tdataType: 'json',\r\n\t\t\tsuccess: function (response) {\r\n\t\t\t\tdeferred.resolve(response);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\tauthService.prototype.sendUsernameReminderEmail = function (emailAddress) {\r\n\r\n\t\tvar deferred = $.Deferred();\r\n\r\n\t\tvar request = {};\r\n\t\trequest.emailAddress = emailAddress;\r\n\r\n\t\tvar jsonDataString = JSON.stringify(request);\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: `${API_URL}/account/sendusernamereminderemail`,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: jsonDataString,\r\n\t\t\tprocessData: false,\r\n\t\t\tcontentType: 'application/json; charset=utf-8',\r\n\t\t\tdataType: 'json',\r\n\t\t\tsuccess: function (response) {\r\n\t\t\t\tdeferred.resolve(response);\r\n\t\t\t},\r\n\t\t\terror: function (jqXhr, status, error) {\r\n\t\t\t\tdeferred.reject(jqXhr);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\treturn authService;\r\n})();\r\n\r\nconst localAuthService = new AuthService();\r\n\r\nexport const authService = localAuthService;\r\n\r\nfunction goToLoginPage() {\r\n\t//Store the current url so that the login page can redirect later.\r\n\tlocalStorage.setItem('loginRedirect', location.href);\r\n\r\n\t//Redirect to login page\r\n\tvar loginUrl = location.href.substring(0, location.href.lastIndexOf('/'));\r\n\tloginUrl += '/login.html';\r\n\tlocation.assign(loginUrl);\r\n}\r\n\r\n/**\r\n * @param {string} key \r\n * @param {unknown} value \r\n */\r\nfunction setAuthValue(key, value) {\r\n\tif (value) localStorage.setItem(key, String(value));\r\n\telse localStorage.removeItem(key);\r\n}\r\n\r\n/**\r\n * @typedef {Object} AuthResponse\r\n * @property {string} email\r\n * @property {string[]} permissions\r\n * @property {boolean} persistUserTokensAcrossSessions\r\n * @property {string} token\r\n * @property {number} userId\r\n * @property {string} username\r\n */\r\n\r\n/**\r\n * @typedef {Object} InsightUser\r\n * @property {boolean} isAdminUser\r\n */\r\n\r\n/**\r\n * @typedef {Object} SsoAuth\r\n * @property {string} token\r\n * @property {string} userId\r\n */\r\n\r\n/**\r\n * @typedef {Object} SsoRedirectResponse\r\n * @property {string} url\r\n */\r\n\r\n/**\r\n * @typedef {Object} SsoUrls\r\n * @property {string | undefined} logout\r\n * @property {string | undefined} passwordReset\r\n */\r\n\r\n/**\r\n * @typedef {Object} UserSecurityProperties\r\n * @property {string} token\r\n * @property {string} username\r\n */\r\n","import { apiFetch } from './api';\r\nimport { authService } from './login';\r\n\r\nexport function logOutUser() {\r\n return Promise.allSettled([authService.getSsoUrls(), apiFetch('account/logout')]).then(\r\n /**\r\n * @param {[PromiseSettledResult]}\r\n */\r\n ([urls]) => {\r\n //Delete auth values and remove login redirect URL\r\n authService.clearAuthentication();\r\n localStorage.setItem('loginRedirect', '');\r\n\r\n if (urls.status === 'fulfilled' && urls.value?.logout) location.assign(urls.value.logout);\r\n else {\r\n //Redirect to login page\r\n var currentUrl = window.location.href;\r\n var redirectUrl = currentUrl.substring(0, currentUrl.lastIndexOf(\"/\"));\r\n redirectUrl += \"/login.html\";\r\n window.location.href = redirectUrl;\r\n }\r\n }\r\n )\r\n}\r\n"],"sourceRoot":""}