{"version":3,"sources":["components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/api-authorization/LoginMenu.js","components/NavMenu.js","components/Layout.js","components/api-authorization/AuthorizeRoute.js","components/api-authorization/Login.js","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","img/airplayGreen.svg","img/airplayWhite.svg","components/Utils.js","components/AirServerList.js","components/PlusX.js","components/Switch.js","components/Tabs/PersonalizationTab.js","components/AutofillStopper.js","components/Tabs/subComponents/InfoRow.js","components/Tabs/NetworkTab.js","components/Tabs/GuestConnectivityTab.js","components/ConfirmationDialog.js","components/Tabs/DeviceManagementTab.js","components/Tabs/ModeratorModeTab.js","components/Tabs/ScreenMirroringTab.js","components/Tabs/AudioAndVideoTab.js","components/Tabs/SecurityTab.js","components/Tabs/LocalizationTab.js","components/Tabs/AboutTab.js","components/DetailsPane.js","components/CreateGroupPane.js","components/AddDevicePane.js","components/Notification.js","components/MainPage.js","components/UserManagement/Roles.js","components/UserManagement/Users.js","components/UserManagement/UserAddEdit.js","components/UserManagement/RoleAddEdit.js","components/UserManagement/UserHandler.js","components/UserManagement/RoleHandler.js","components/UserManagement/IOTHandler.js","components/UserManagement/UserManagement.js","components/UserManagement/History.js","components/UserManagement/FirstLogin.js","App.js","index.js"],"names":["ApplicationName","QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","AuthorizeService","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","a","this","getUser","user","profile","ensureUserManagerInitialized","userManager","access_token","state","signinSilent","createArguments","silentUser","updateState","success","console","log","Error","signinPopup","popUpUser","message","error","signinRedirect","redirect","url","signinCallback","window","location","href","signoutPopup","undefined","signoutRedirect","signoutCallback","response","data","notifySubscribers","callback","push","subscription","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","removeUser","addAccessTokenExpiring","authService","LoginMenu","props","isAuthenticated","userName","_subscription","subscribe","populateState","unsubscribe","Promise","all","setState","name","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","className","tag","Link","to","title","tooltipTitle","position","trigger","arrow","size","round","textSizeRatio","Component","NavMenu","editMultipleDevices","createGroup","addDevice","detailsPaneVisible","numSelectedDevices","loggedIn","noGroupsCreated","selectedPage","set_selectedPage","canManageUsers","useState","set_isAuthenticated","useEffect","checkIfAuthenticated","buttons","Button","variant","onClick","disabled","Navbar","collapseOnSelect","expand","Container","Brand","Toggle","Collapse","id","Nav","Fragment","Layout","children","AuthorizeRoute","ready","authenticated","authenticationChanged","populateAuthenticationState","redirectUrl","encodeURI","component","rest","render","action","login","getReturnUrl","processLoginCallback","URLSearchParams","search","get","redirectToProfile","redirectToRegister","returnUrl","signIn","result","navigateToReturnUrl","completeSignIn","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","replace","Logout","isReady","history","logout","processLogoutCallback","online","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","path","Utils","d","Date","getHours","getMinutes","getSeconds","getMilliseconds","ipaddress","nullable","test","obj1","obj2","Object","is","keys","concat","forEach","key","value","diff","clean","el","isObject","internalClean","transform","isCollection","cleaned","isEmpty","isArray","n","isNaN","parseFloat","isFinite","str","jsonString","DISCONNECTED","HOMESCREEN_FULL","HOMESCREEN_FULL_CENTER","HOMESCREEN_FULL_LEFT","HOMESCREEN_FULL_RIGHT","HOMESCREEN_MINIMAL","HOMESCREEN_NONE","SESSION_DEFAULT","SESSION_SINGLE","SESSION_FOCUS","SESSION_GRID","TURN_DISPLAY_OFF_INACTIVE_NEVER","TURN_DISPLAY_OFF_INACTIVE_IMMEDIALLY","TURN_DISPLAY_OFF_INACTIVE_1_MINUTE","TURN_DISPLAY_OFF_INACTIVE_15_MINUTES","TURN_DISPLAY_OFF_INACTIVE_1_HOUR","SAMPLE_RATE_44100","SAMPLE_RATE_48000","SAMPLE_RATE_96000","SAMPLE_RATE_192000","ENGLISH","HOUR_12","HOUR_24","UTC","AirServerList","devices","openDetailsPane","groupId","isDeviceChecked","handleDeviceCheckChange","isGroupChecked","handleGroupCheckChange","expandedInUI","getProtocolIcons","device","isInitializing","img0","img1","img2","secureColor","insecureColor","services","config","airplay","iconSrc","customStyle","enabled","authMode","airplayWhite","airplayGreen","opacity","src","style","height","alt","googlecast","iconColor","prompt","icon","faChromecast","color","viewBox","miracast","pin","faTv","getCheckForUpdatesStr","updater","automaticUpdateEnabled","getVersion","info","version","getStatusText","deviceConnected","getStatusTip","toLocaleString","getHotspot","hotspot","getModerator","moderator","getStatusClass","deviceConnectionState","connectionState","getIpAddress","hasString","activeIpv4EthernetAddresses","activeIpv4Addresses","activeIpv4WifiAddresses","contents","trClass","tableClass","fetching","margin","type","width","timeout","Table","bordered","responsive","tableHead","tableBody","checked","onChange","e","stopPropagation","getTrClassName","selected","deviceId","faEllipsisH","handleRowClick","renderAirserversTable","PlusX","setChecked","multipleEdit","plusXPadding","htmlFor","faTimesCircle","faPlusCircle","Switch","isOn","handleToggle","labelText","visible","readonly","addClassName","labelCss","background","PersonalizationTab","handleChangeName","handleChangeBackground","checked_background","setChecked_background","backgroundValid","homescreenLayout","set_homescreenLayout","checked_homescreenLayout","setChecked_homescreenLayout","showHowToConnect","set_showHowToConnect","checked_showHowToConnect","setChecked_showHowToConnect","showWiFiQrCode","set_showWiFiQrCode","checked_showWiFiQrCode","setChecked_showWiFiQrCode","showGuestAccessWhileInUse","set_showGuestAccessWhileInUse","checked_showGuestAccessWhileInUse","setChecked_showGuestAccessWhileInUse","sessionLayout","set_sessionLayout","checked_sessionLayout","setChecked_sessionLayout","displayYourOwnNetwork","handleToggleDisplayYourOwnNetwork","checked_displayYourOwnNetwork","setChecked_displayYourOwnNetwork","wifiSsid","set_wifiSsid","wifiPassword","set_wifiPassword","Form","autoComplete","Label","Row","Col","xs","Group","controlId","Control","maxLength","placeholder","target","retval","getBackgroundCss","as","mapHomescreenLayout","mapSessionLayout","AutofillStopper","display","InfoRow","text","label","valueLink","rel","dangerouslySetInnerHTML","__html","NetworkTab","networkReadOnly","deviceInfo","checked_enterpriseSecurity","handleEnterpriseSecurityChange","enterpriseSecurity","setChecked_enterpriseSecurity","enterprisePassword","enterpriseUsername","set_enterprisePassword","set_enterpriseUsername","checked_proxy","handleChangeProxyHostname","handleProxyPortChange","proxyEnabled","proxyHostname","proxyHostnameValid","proxyPort","setChecked_proxy","set_proxyEnabled","hostName","activeIpv6Addresses","ethernetMacAddress","wifiMacAddress","readOnly","GuestConnectivityTab","freq","builtInHotspot","checked_builtInHotspot","setChecked_builtInHotspot","handleToggleHotspot","checked_hotspotPassword","handleSetHotspotPassword","hotspotInterfaceInfoRegdom","hotspotInterfaceInfoWidth","hotspotPassword","setChecked_hotspotPassword","requestedFrequency","irChannels","set_requestedFrequency","currentFrequency","clientIsolation","set_clientIsolation","guestAccessType","checked_guestAccessType","handleGuestAccessTypeChange","setChecked_guestAccessType","hotspotPasswordValid","checked_clientIsolation","setChecked_clientIsolation","getChannelListItem","dfs","dfsSuffix","prettyText","activeIpv4HotspotAddresses","getHotspotPasswordClass","mapGuestAccessType","Array","frequency","mapChannels","ConfirmationDialog","show","header","extraQuestion","questionChecked","set_questionChecked","callFalseResult","Modal","onHide","Header","closeButton","Title","Body","Footer","DeviceManagementTab","showPowerOffDeviceConfirmation","showConfirmationPowerOffDevice","powerOffDeviceConfirmationResult","showRebootDeviceConfirmation","showConfirmationRebootDevice","rebootDeviceConfirmationResult","showRemoveDeviceConfirmation","showConfirmationRemoveDevice","removeDeviceConfirmationResult","showResetAllSettingsConfirmation","showConfirmationResetAllSettings","resetAllSettingsConfirmationResult","changeSelectedGroup","set_groupId","checked_groups","groups","setChecked_groups","defaultValue","group","groupName","ModeratorModeTab","set_moderator","checked_moderator","setChecked_moderator","showEndSessionConfirmation","showConfirmationEndSession","endSessionConfirmationResult","ScreenMirroringTab","airplayMode","set_airplayMode","airplayPassword","set_airplayPassword","checked_airplay","setChecked_airplay","googleCastMode","set_googleCastMode","checked_googleCast","setChecked_googleCast","miracastMode","set_miracastMode","checked_miracast","setChecked_miracast","Number","fillAirPlayOptions","fillGoogleCastOptions","fillMiracastOptions","AudioAndVideoTab","softRotation","checked_displayRotation","handleDisplayRotationChange","setChecked_displayRotation","displayPowerManagement","set_displayPowerManagement","checked_turnDisplayOutOffWhenInactive","setChecked_turnDisplayOutOffWhenInactive","sampleRate","set_sampleRate","checked_sampleRate","setChecked_sampleRate","sleepTimerMinutes","set_sleepTimerMinutes","forceLowResolution","set_forceLowResolution","airplayAudioReceiver","set_airplayAudioReceiver","hdmiCecEnabled","set_hdmiCecEnabled","hdmiCecSupported","checked_airplayAudioReceiver","setChecked_airplayAudioReceiver","checked_forceLowResolution","setChecked_forceLowResolution","checked_hdmiCecEnabled","setChecked_hdmiCecEnabled","mapDisplayRotation","mapTurnDisplayOutOffWhenInactive","mapSampleRate","SecurityTab","sslPrivateKey","sslCertificate","set_sslPrivateKey","set_sslCertificate","checked_privateKeyAndCert","setChecked_privateKeyAndCert","enableDeviceManagement","set_enableDeviceManagement","checked_enableDeviceManagement","setChecked_enableDeviceManagement","deviceManagementPassword","handleChangeDeviceManagementPassword","checked_deviceManagementPassword","setChecked_deviceManagementPassword","deviceManagementPasswordValid","rows","LocalizationTab","wifiCountry","set_wifiCountry","checked_country","setChecked_country","language","set_language","checked_language","setChecked_language","clock","set_clock","checked_clock","setChecked_clock","timezone","set_timezone","checked_timezone","setChecked_timezone","mapCountry","mapLanguage","mapClock","mapTimezone","AboutTab","deviceConfig","set_automaticUpdateEnabled","checked_automaticUpdateEnabled","setChecked_automaticUpdateEnabled","installUpdatesConfirmationResult","latestDeviceVersion","connectedState","showConfirmationCheckAndInstallUpdates","set_showConfirmationCheckAndInstallUpdates","deviceSerial","DetailsPane","paneVisible","closeDetailsPane","unselectDevices","removeDevice","removeDevices","displayNotification","displayError","set_showTimeout","APPLY_TEXT","APPLYING_TEXT","NORMAL_TAB_COLOR","ERROR_TAB_COLOR","loading","set_loading","sentFetch","set_sentFetch","applyButtonText","set_applyButtonText","set_latestDeviceVersion","numRedCrosses","set_numRedCrosses","set_name","set_background","set_backgroundValid","set_builtInHotspot","checkForUpdates","set_checkForUpdates","set_currentFrequency","set_deviceConfig","set_deviceConnectionState","set_deviceManagementPassword","set_deviceManagementPasswordValid","set_displayYourOwnNetwork","set_enterpriseSecurity","externalWifiPassword","set_externalWifiPassword","externalWifiSsid","set_externalWifiSsid","set_guestAccessType","set_hdmiCecSupported","set_hotspotInterfaceInfoRegdom","hotspotInterfaceInfoTxPower","set_hotspotInterfaceInfoTxPower","set_hotspotInterfaceInfoWidth","set_hotspotPassword","set_hotspotPasswordValid","initialGroupId","set_initialGroupId","set_irChannels","set_proxyHostname","set_proxyHostnameValid","set_proxyPort","set_softRotation","upperChannelsClicked","set_upperChannelsClicked","set_version","checked_upper5g","setChecked_upper5g","showConfirmationApplyAndRebootDevice","set_showConfirmationApplyAndRebootDevice","set_showConfirmationEndSession","set_showConfirmationPowerOffDevice","set_showConfirmationRebootDevice","set_showConfirmationRemoveDevice","set_showConfirmationResetAllSettings","createAirServerInput","externalwifi","management","airplayAuthMode","password","audioReceiver","googleCastAuthMode","miracastAuthMode","useShortPin","passphrase","ssid","networkaccesscontrol","username","adminPassword","tmpForwardToInternet","tmpForwardToLAN","backgroundUrl","URL","protocol","toString","network","forwardToInternet","forwardToLAN","sleepTimerEnabled","cecEnabled","sleepTimerSeconds","v2","showQrCode","wifi","country","decoder","deviceUpdate","JSON","parse","stringify","removeDuplicates","srcJson","compareJson","modified","obj","entries","callUpdateDevice","airServerInput","token","exitPaneWhenDone","axios","headers","method","then","getDeviceAlias","exitPane","catch","toLowerCase","includes","putMultipleEdit","multipleDevices","body","constructDeviceAndGroupIdLists","deviceIds","groupIds","removeEmptyObjects","dict","constructMultipleEditInput","eapSecurity","targetGroup","validateInput","valid","invalidProps","isUrl","join","normalTabColor","handleApplyClick","getAccessToken","warn","sendToolsCommand","attribute","notifyWhenDone","uri","toggleMultipleInput","attributeName","attributeValue","errorMsg","deviceName","ip","changeRedCrossCount","delta","isInitialized","tags","v2props","interfaceInfo","regdom","txPower","cecSupported","saveHubData","Jumbotron","detailsPaneHeader","Tabs","defaultActiveKey","Tab","faCloud","eventKey","resetSettings","setTimeout","val","faInfo","faUser","substr","faCommentAltCheck","faProjectDiagram","isNumeric","isValidNumber","faRouter","showApplyAndRebootDeviceConfirmation","applyAndRebootDeviceConfirmationResult","faTvMusic","faGlobeStand","faShieldCheck","CreateGroupPane","closeCreateGroupPane","set_groupName","handleCreateGroupClick","groupDeviceId","uuidv4","handleUnauthorized","autoFocus","onKeyPress","keyCode","which","AddDevicePane","set_groups","closeAddDevicePane","cloudToken","set_cloudToken","authToken","chosenGroup","adoptInput","post","find","g","findIndex","cloneDeep","closePane","callAdoptDevice","styled","div","backgroundColor","shift","left","Notification","msg","showNotification","set_showNotification","duration","set_shift","showing","set_showing","set_timeout","myWidth","clearTimeout","distance","MainPage","createGroupPaneVisible","addingDevice","selectedDeviceId","handleNumSelectedDevices","numGroups","orgName","set_redirect","showRemoveGroupConfirmation","set_showRemoveGroupConfirmation","removeGroupConfirmationText","set_removeGroupConfirmationText","groupIdForRemoval","set_groupIdForRemoval","groupNameForRemoval","set_groupNameForRemoval","groupIdForRenaming","set_groupIdForRenaming","newGroupName","set_newGroupName","showTimeout","MAINPAGE_TIMEOUT","hubConnection","set_hubConnection","promise","initGroups","fetchGroups","HOUR","DAY","connection","HubConnectionBuilder","withUrl","accessTokenFactory","withAutomaticReconnect","build","serverTimeoutInMilliseconds","HubConnectionState","Disconnected","start","on","update","item","mergeDeep","source","output","assign","debug","twin","twinIsGroup","deviceType","groupIndex","deviceIndex","oldGroup","oldIndex","newGroups","onclose","err","toast","useCallback","removeGroupConfirmationResult","temp","removeGroupFromState","removeGroup","countSelectedDevices","count","removeDevicesFromBackend","toggleExpandedInUI","fetched","groupNameChanged","groupNameValue","onBlur","onFocus","select","handleGroupKeyPress","faPen","faTrashAlt","removeGroupClick","faCaretDown","faCaretLeft","tempGroups","updateAttributes","pauseOnFocusLoss","hideProgressBar","autoClose","Roles","roles","handleShowAdd","handleShowEdit","getRoleClassByName","removeRoleClick","iotGroups","getCanCreateData","role","faCheck","faTimes","getGroups","groupNames","sort","n1","n2","localeCompare","hover","class","colSpan","faUserTag","deviceGroupsManaged","Users","users","removeUserClick","getRoleClass","getRoleCreated","created","toISOString","split","faUserFriends","email","UserAddEdit","showModal","handleAddUser","handleEditUser","hideModal","userForEditing","roleId","set_roleId","set_email","initState","deviceAdminRole","r","centered","RoleAddEdit","handleAddRole","handleEditRole","roleForEditing","set_canManageUsers","managesAllGroups","set_managesAllGroups","myIotGroups","set_myIotGroups","tmpGroups","groupIsManagedByRole","Check","foundGroup","toggleGroupSelected","UserHandler","USERMANAGEMENT_TIMEOUT","set_error500","organizationId","organizationName","set_orgName","orgNameForRenaming","set_orgNameForRenaming","set_isRenamingOrgName","savedOrgName","set_roles","set_users","RoleId","Name","Email","UserId","newUser","constructUser","newUsers","u1","u2","tmpUsers","u","prevRole","nextRole","noOtherCloudAdmin","set_showRemoveUserConfirmation","set_userForRemoval","userForRemoval","tmp","Token","Password","succeeded","failed","RoleHandler","getGroupIds","newRole","constructRole","newRoles","r1","r2","set_showRemoveRoleConfirmation","set_roleForRemoval","roleForRemoval","removeRole","tmpRoles","prevRoleIndex","IOTHandler","TIMEOUT","set_iotGroups","set_fetchedIotGroups","UserManagement","error500","fetchedIotGroups","addOrEdit","set_addOrEdit","isRenamingOrgName","userAddEditVisible","set_userAddEditVisible","hideUserModal","set_userForEditing","showRemoveUserConfirmation","roleAddEditVisible","set_roleAddEditVisible","showRemoveRoleConfirmation","set_roleForEditing","addUser","editUser","addRole","editRole","changeOrganizationName","fetchOrganizationData","fetchUserManagementData","fetchAll","orgNameValue","handleOrgKeyPress","removeUserConfirmationResult","removeRoleConfirmationResult","FirstLogin","set_password","passwordRetyped","set_passwordRetyped","illegalPassword","set_illegalPassword","loggingIn","set_loggingIn","params","reload","confirmAccount","App","set_detailsPaneVisible","set_createGroupPaneVisible","set_addingDevice","set_selectedDeviceId","selectedDeviceConnectionState","set_selectedDeviceConnectionState","set_numSelectedDevices","set_multipleEdit","set_loggedIn","set_noGroupsCreated","yes","checkIfUserCanManageOtherUsers","exact","num","from","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename"],"mappings":"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","file":"static/js/main.bfd05e9b.chunk.js","sourcesContent":["export const ApplicationName = 'CloudManagement';\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationClientConfigurationUrl: `/_configuration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: '/',\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: '/Identity/Account/Register',\r\n IdentityManagePath: '/Identity/Account/Manage'\r\n};\r\n\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants';\r\n\r\nexport class AuthorizeService {\r\n _callbacks = [];\r\n _nextSubscriptionId = 0;\r\n _user = null;\r\n _isAuthenticated = false;\r\n\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n _popUpDisabled = true;\r\n\r\n async isAuthenticated() {\r\n const user = await this.getUser();\r\n return !!user;\r\n }\r\n\r\n async getUser() {\r\n if (this._user && this._user.profile) {\r\n return this._user.profile;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.profile;\r\n }\r\n\r\n async getAccessToken() {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n async signIn(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n this.updateState(silentUser);\r\n return this.success(state);\r\n } catch (silentError) {\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError);\r\n\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n const popUpUser = await this.userManager.signinPopup(this.createArguments());\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError) {\r\n if (popUpError.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error(\"The user closed the window.\");\r\n } else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError);\r\n }\r\n\r\n // PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n await this.userManager.signinRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectError) {\r\n console.log(\"Redirect authentication error: \", redirectError);\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async completeSignIn(url) {\r\n try {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.signinCallback(url);\r\n this.updateState(user);\r\n return this.success(user && user.state);\r\n } catch (error) {\r\n console.log('There was an error signing in: ', error);\r\n window.location.href = \"/\";\r\n return this.error(`There was an error signing in.`);\r\n }\r\n }\r\n\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n async signOut(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n await this.userManager.signoutPopup(this.createArguments());\r\n this.updateState(undefined);\r\n return this.success(state);\r\n } catch (popupSignOutError) {\r\n //console.log(\"Popup signout error: \", popupSignOutError);\r\n try {\r\n await this.userManager.signoutRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectSignOutError) {\r\n console.log(\"Redirect signout error: \", redirectSignOutError);\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n }\r\n\r\n async completeSignOut(url) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const response = await this.userManager.signoutCallback(url);\r\n this.updateState(null);\r\n return this.success(response && response.data);\r\n } catch (error) {\r\n console.log(`There was an error trying to log out '${error}'.`);\r\n return this.error(error);\r\n }\r\n }\r\n\r\n updateState(user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n }\r\n\r\n subscribe(callback) {\r\n this._callbacks.push({ callback, subscription: this._nextSubscriptionId++ });\r\n return this._nextSubscriptionId - 1;\r\n }\r\n\r\n unsubscribe(subscriptionId) {\r\n const subscriptionIndex = this._callbacks\r\n .map((element, index) => element.subscription === subscriptionId ? { found: true, index } : { found: false })\r\n .filter(element => element.found === true);\r\n if (subscriptionIndex.length !== 1) {\r\n throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n }\r\n\r\n this._callbacks = this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n notifySubscribers() {\r\n for (let i = 0; i < this._callbacks.length; i++) {\r\n const callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n }\r\n\r\n createArguments(state) {\r\n return { useReplaceToNavigate: true, data: state };\r\n }\r\n\r\n error(message) {\r\n return { status: AuthenticationResultStatus.Fail, message };\r\n }\r\n\r\n success(state) {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n redirect() {\r\n return { status: AuthenticationResultStatus.Redirect };\r\n }\r\n\r\n async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n if (!response.ok) {\r\n throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n }\r\n\r\n let settings = await response.json();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.userStore = new WebStorageStateStore({\r\n prefix: ApplicationName\r\n });\r\n\r\n this.userManager = new UserManager(settings);\r\n\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager.removeUser();\r\n this.updateState(undefined);\r\n });\r\n\r\n this.userManager.events.addAccessTokenExpiring(function () {\r\n //console.log(\"Oidc Authentication token about to expire...\");\r\n });\r\n }\r\n\r\n static get instance() { return authService }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail'\r\n};\r\n","import React, { Component, Fragment } from 'react';\r\nimport { NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './AuthorizeService';\r\nimport { ApplicationPaths } from './ApiAuthorizationConstants';\r\nimport { Tooltip, } from 'react-tippy';\r\nimport Avatar from 'react-avatar';\r\n\r\nexport class LoginMenu extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isAuthenticated: false,\r\n userName: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.populateState());\r\n this.populateState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n async populateState() {\r\n const [isAuthenticated, user] = await Promise.all([authService.isAuthenticated(), authService.getUser()])\r\n this.setState({\r\n isAuthenticated,\r\n userName: user && user.name\r\n });\r\n }\r\n\r\n tooltipTitle() {\r\n return 'Account Settings';\r\n }\r\n\r\n render() {\r\n const { isAuthenticated, userName } = this.state;\r\n if (!isAuthenticated) {\r\n const registerPath = `${ApplicationPaths.Register}`;\r\n const loginPath = `${ApplicationPaths.Login}`;\r\n return this.anonymousView(registerPath, loginPath);\r\n } else {\r\n const profilePath = `${ApplicationPaths.Profile}`;\r\n const logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n return this.authenticatedView(userName, profilePath, logoutPath);\r\n }\r\n }\r\n\r\n authenticatedView(userName, profilePath, logoutPath) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n \r\n \r\n \r\n \r\n \r\n Logout\r\n \r\n );\r\n }\r\n\r\n anonymousView(registerPath, loginPath) {\r\n return (\r\n \r\n Register\r\n \r\n \r\n Login\r\n \r\n );\r\n }\r\n}\r\n","import React, { Fragment, useState, useEffect } from 'react';\r\nimport { Button, Nav, Navbar, Container } from 'react-bootstrap';\r\nimport { LoginMenu } from './api-authorization/LoginMenu';\r\nimport { NavLink } from 'react-router-dom';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport './NavMenu.css';\r\n\r\nexport default function NavMenu({ editMultipleDevices, createGroup, addDevice, detailsPaneVisible, numSelectedDevices, loggedIn, noGroupsCreated, selectedPage,\r\n\tset_selectedPage, canManageUsers }) {\r\n\r\n\tconst [isAuthenticated, set_isAuthenticated] = useState(false);\r\n\t\r\n\tuseEffect(() => {\r\n\t\tasync function checkIfAuthenticated() {\r\n\t\t\tconst loggedIn = await authService.isAuthenticated();\r\n\r\n\t\t\tset_isAuthenticated(loggedIn);\r\n\t\t}\r\n\r\n\t\tcheckIfAuthenticated();\r\n\t}, []);\r\n\r\n let buttons = null;\r\n if (selectedPage === 'Devices') {\r\n buttons = noGroupsCreated ?\r\n \r\n\t\t\t\t{\r\n\t\t\t\t\tcanManageUsers &&\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n \r\n :\r\n \r\n\t\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tcanManageUsers &&\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n \r\n ;\r\n }\r\n\r\n return (\r\n \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tCLOUD MANAGEMENT\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n \r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport NavMenu from './NavMenu';\r\n\r\nexport default function Layout({ children, editMultipleDevices, createGroup, addDevice, detailsPaneVisible, numSelectedDevices, loggedIn, noGroupsCreated, selectedPage,\r\n\tset_selectedPage, canManageUsers }) {\r\n\t\t\r\n return (\r\n
\r\n \r\n \r\n {children}\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport { ApplicationPaths, QueryParameterNames } from './ApiAuthorizationConstants'\r\nimport authService from './AuthorizeService'\r\n\r\nexport default class AuthorizeRoute extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ready: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.authenticationChanged());\r\n this.populateAuthenticationState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n render() {\r\n const { ready, authenticated } = this.state;\r\n const redirectUrl = `${ApplicationPaths.Login}?${QueryParameterNames.ReturnUrl}=${encodeURI(window.location.href)}`\r\n if (!ready) {\r\n return
;\r\n } else {\r\n const { component: Component, ...rest } = this.props;\r\n return {\r\n if (authenticated) {\r\n return \r\n } else {\r\n return \r\n }\r\n }} />\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ ready: true, authenticated });\r\n }\r\n\r\n async authenticationChanged() {\r\n this.setState({ ready: false, authenticated: false });\r\n await this.populateAuthenticationState();\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n if (!!message) {\r\n return
{message}
\r\n } else {\r\n switch (action) {\r\n case LoginActions.Login:\r\n return (
Loading Login Page ...
);\r\n case LoginActions.LoginCallback:\r\n return (
Logging In ...
);\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return (
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async login(returnUrl) {\r\n\t\tconst state = { returnUrl };\r\n const result = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n }\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n\r\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURI(ApplicationPaths.Login)}`);\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser he gets sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { QueryParameterNames, LogoutActions, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n\t\t\t\t//this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n\t\t\t\tthis.setState({ isReady: true, message: \"\" });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return
\r\n }\r\n if (!!message) {\r\n return (
{message}
);\r\n } else {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n return (
Logging Out ...
);\r\n case LogoutActions.LogoutCallback:\r\n return (
Logging Out ...
);\r\n case LogoutActions.LoggedOut:\r\n return (
{message}
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async logout(returnUrl) {\r\n this.props.online(false);\r\n\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n this.setState({ message: \"You successfully logged out!\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\r\n\r\nexport default function ApiAuthorizationRoutes({ online }) {\r\n\r\n function loginAction(name) {\r\n return ();\r\n }\r\n\r\n function logoutAction(name) {\r\n return ();\r\n }\r\n\r\n return (\r\n \r\n loginAction(LoginActions.Login)} />\r\n loginAction(LoginActions.LoginFailed)} />\r\n loginAction(LoginActions.LoginCallback)} />\r\n loginAction(LoginActions.Profile)} />\r\n loginAction(LoginActions.Register)} />\r\n logoutAction(LogoutActions.Logout)} />\r\n logoutAction(LogoutActions.LogoutCallback)} />\r\n logoutAction(LogoutActions.LoggedOut)} />\r\n );\r\n}\r\n\r\n\r\n","export default __webpack_public_path__ + \"static/media/airplayGreen.c87afcff.svg\";","export default __webpack_public_path__ + \"static/media/airplayWhite.42447e20.svg\";","//import _ from \"lodash\";\r\nimport { transform, isObject, isEmpty, isArray } from 'lodash';\r\n\r\n// A class with common functions shared between all the components in the application:\r\nexport default class Utils {\r\n\r\n static getCurrentTime() {\r\n const d = new Date();\r\n return d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds() + ':' + d.getMilliseconds();\r\n }\r\n\r\n static validateIPaddress(ipaddress, nullable) {\r\n if (nullable && (ipaddress === null || ipaddress === \"\" || ipaddress === \"...\")) {\r\n return true;\r\n }\r\n if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static diff(obj1, obj2) {\r\n const result = {};\r\n if (Object.is(obj1, obj2)) {\r\n return undefined;\r\n }\r\n if (!obj2 || typeof obj2 !== 'object') {\r\n return obj2;\r\n }\r\n Object.keys(obj1 || {}).concat(Object.keys(obj2 || {})).forEach(key => {\r\n if (obj2[key] !== obj1[key] && !Object.is(obj1[key], obj2[key])) {\r\n result[key] = obj2[key];\r\n }\r\n if (typeof obj2[key] === 'object' && typeof obj1[key] === 'object') {\r\n const value = Utils.diff(obj1[key], obj2[key]);\r\n if (value !== undefined) {\r\n result[key] = value;\r\n }\r\n }\r\n });\r\n\r\n let retval = Utils.clean(result);\r\n return retval;\r\n }\r\n\r\n static clean(el) {\r\n function internalClean(el) {\r\n return transform(el, function (result, value, key) {\r\n var isCollection = isObject(value);\r\n var cleaned = isCollection ? internalClean(value) : value;\r\n\r\n if (isCollection && isEmpty(cleaned)) {\r\n return;\r\n }\r\n\r\n isArray(result) ? result.push(cleaned) : (result[key] = cleaned);\r\n });\r\n }\r\n\r\n return isObject(el) ? internalClean(el) : el;\r\n }\r\n\r\n static isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n\r\n static hasString(str) {\r\n if (str !== undefined && str !== null && str !== '') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n\t}\r\n\r\n\tstatic escapeSpecialChars(jsonString) {\r\n\t\treturn jsonString.replace(/\\n/g, \"\\\\n\")\r\n\t\t\t.replace(/\\r/g, \"\\\\r\")\r\n\t\t\t.replace(/\\t/g, \"\\\\t\")\r\n\t\t\t.replace(/\\f/g, \"\\\\f\");\r\n\t}\r\n}\r\n\r\nexport const CONNECTED = 'Connected';\r\nexport const DISCONNECTED = 'Disconnected';\r\nexport const HOMESCREEN_FULL = 'full';\r\nexport const HOMESCREEN_FULL_CENTER = 'full-center';\r\nexport const HOMESCREEN_FULL_LEFT = 'full-left';\r\nexport const HOMESCREEN_FULL_RIGHT = 'full-right';\r\nexport const HOMESCREEN_MINIMAL = 'minimal';\r\nexport const HOMESCREEN_NONE = 'none';\r\nexport const SESSION_DEFAULT = 'default';\r\nexport const SESSION_SINGLE = 'single';\r\nexport const SESSION_FOCUS = 'focus';\r\nexport const SESSION_GRID = 'grid';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_NEVER = '0';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_IMMEDIALLY = '1';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_1_MINUTE = '2';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_15_MINUTES = '3';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_1_HOUR = '4';\r\nexport const TURN_DISPLAY_OFF_INACTIVE_3_HOURS = '5';\r\nexport const SAMPLE_RATE_44100 = '44100 Hz';\r\nexport const SAMPLE_RATE_48000 = '48000 Hz';\r\nexport const SAMPLE_RATE_96000 = '96000 Hz';\r\nexport const SAMPLE_RATE_192000 = '192000 Hz';\r\nexport const ENGLISH = 'english';\r\nexport const DEUTSCH = 'deutsch';\r\nexport const ICELANDIC = 'icelandic';\r\nexport const HOUR_12 = '12-hour';\r\nexport const HOUR_24 = '24-hour';\r\nexport const HOUR_OFF = 'off';\r\nexport const UTC = 'UTC';\r\n\r\nexport const dummyRoles = [\r\n\t{\r\n\t\tname: 'Cloud Admin',\r\n\t\tgroups: 'ALL',\r\n\t\tcanCreateUsers: true\r\n\t},\r\n\t{\r\n\t\tname: 'Device Admin',\r\n\t\tgroups: 'ALL',\r\n\t\tcanCreateUsers: false\r\n\t},\r\n\t{\r\n\t\tname: 'East Building Admin',\r\n groups: 'EB Floor 1, EB Floor 2, EB Floor 3, EB Floor 4',\r\n\t\tcanCreateUsers: false\r\n\t},\r\n\t{\r\n\t\tname: 'West Building Admin',\r\n\t\tgroups: 'WB Floor 1, WB Floor 2',\r\n\t\tcanCreateUsers: false\r\n\t}\r\n];\r\n\r\nexport const dummyUsers = [\r\n\t{\r\n\t\tname: 'Robert Watson',\r\n\t\temail: 'robert@walmart.com',\r\n\t\trole: 0,\r\n\t\tcreated: '27/03/2019'\r\n\t},\r\n\t{\r\n\t\tname: 'Charles Burns',\r\n\t\temail: 'charlie@walmart.com',\r\n\t\trole: 1,\r\n\t\tcreated: '06/07/2020'\r\n\t},\r\n\t{\r\n\t\tname: 'Susan Chambers',\r\n\t\temail: 'susan7@walmart.com',\r\n\t\trole: 2,\r\n\t\tcreated: '18/11/2020'\r\n\t},\r\n\t{\r\n\t\tname: 'Someone with a really really longerester name',\r\n\t\temail: 'someone_with_a_really_really_long_name@walmart.com',\r\n\t\trole: 0,\r\n\t\tcreated: '12/10/2020'\r\n\t}\r\n];\r\n\r\nexport const dummyAADGroups = [\r\n\t{\r\n\t\tgroup: 'Team Bears',\r\n\t\trole: 'East Building Admin'\r\n\t},\r\n\t{\r\n\t\tgroup: 'Team Foxes',\r\n\t\trole: 'West Building Admin'\r\n\t}\r\n];\r\n","import React from 'react';\r\nimport { Table } from 'react-bootstrap';\r\nimport '../main.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faChromecast } from '@fortawesome/free-brands-svg-icons';\r\nimport { faTv, faEllipsisH } from '@fortawesome/pro-regular-svg-icons';\r\nimport airplayGreen from '../img/airplayGreen.svg';\r\nimport airplayWhite from '../img/airplayWhite.svg';\r\nimport { Tooltip, } from 'react-tippy';\r\nimport Utils, { DISCONNECTED } from './Utils';\r\nimport \"react-loader-spinner/dist/loader/css/react-spinner-loader.css\"\r\nimport Loader from 'react-loader-spinner'\r\n\r\nexport default function AirServerList({ devices, detailsPaneVisible, openDetailsPane, groupId, isDeviceChecked, handleDeviceCheckChange, isGroupChecked,\r\n handleGroupCheckChange, expandedInUI }) {\r\n\r\n const INITIALIZING_COLUMN_TEXT = '';\r\n const INITIALIZING_TEXT = 'Initializing...';\r\n\r\n function handleRowClick(e, deviceId, connectionState) {\r\n if (deviceId && !detailsPaneVisible) {\r\n openDetailsPane(deviceId, connectionState);\r\n }\r\n\r\n e.stopPropagation();\r\n }\r\n\r\n function getProtocolIcons(device) {\r\n if (isInitializing(device)) {\r\n return INITIALIZING_COLUMN_TEXT;\r\n }\r\n\r\n let img0 = null, img1 = null, img2 = null;\r\n const secureColor = '#6ce9b5', insecureColor = 'white', offOpacity = 0.2;\r\n const services = device.config.services;\r\n\r\n if (services.airplay) {\r\n let title = 'AirPlay: ';\r\n let iconSrc;\r\n let customStyle = {}\r\n if (!services.airplay.enabled) {\r\n title += 'Off';\r\n iconSrc = airplayWhite;\r\n customStyle = { opacity: offOpacity };\r\n } else if (services.airplay.authMode === 0) {\r\n title += 'Everyone';\r\n iconSrc = airplayWhite;\r\n } else if (services.airplay.authMode === 1) {\r\n title += 'Code';\r\n iconSrc = airplayGreen;\r\n } else {\r\n title += 'Password';\r\n iconSrc = airplayGreen;\r\n }\r\n\r\n img0 = (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (services.googlecast) {\r\n let title = 'Google Cast: ';\r\n let iconColor;\r\n let customStyle = {}\r\n if (!services.googlecast.enabled) {\r\n title += 'Off';\r\n iconColor = insecureColor;\r\n customStyle = { opacity: offOpacity };\r\n } else if (services.googlecast.prompt) {\r\n title += 'Prompt';\r\n iconColor = secureColor;\r\n } else {\r\n title += 'Everyone';\r\n iconColor = insecureColor;\r\n }\r\n\r\n img1 = (\r\n \r\n );\r\n }\r\n\r\n if (services.miracast) {\r\n let title = 'Miracast: ';\r\n let iconColor;\r\n let customStyle = {}\r\n if (!services.miracast.enabled) {\r\n title += 'Off';\r\n iconColor = insecureColor;\r\n customStyle = { opacity: offOpacity };\r\n } else if (services.miracast.pin === true) {\r\n title += 'Code';\r\n iconColor = secureColor;\r\n } else {\r\n title += 'Everyone';\r\n iconColor = insecureColor;\r\n }\r\n\r\n img2 = (\r\n \r\n );\r\n }\r\n \r\n return (
{img0}{img1}{img2}
);\r\n }\r\n\r\n function isInitializing(device) {\r\n // See if perhaps the whole idea of \"Initializing\" state is not the best and not use it:\r\n return !device.config || !device.config.device;\r\n }\r\n\r\n function getCheckForUpdatesStr(device) {\r\n if (!isInitializing(device)) {\r\n if (!device.config.services || !device.config.services.updater) return \"\";\r\n\r\n if (device.config.services.updater.automaticUpdateEnabled) {\r\n return 'Automatic';\r\n } else {\r\n return 'Manual';\r\n }\r\n } else {\r\n return INITIALIZING_COLUMN_TEXT;\r\n }\r\n }\r\n\r\n function getVersion(device) {\r\n if (!isInitializing(device)) {\r\n if (!device.config.device.info) return \"\";\r\n return device.config.device.info.version ? device.config.device.info.version : '';\r\n } else {\r\n return INITIALIZING_COLUMN_TEXT;\r\n }\r\n }\r\n\r\n function getStatusText(device) {\r\n if (isInitializing(device)) {\r\n return INITIALIZING_TEXT;\r\n } else {\r\n return !deviceConnected(device) ? 'Offline' : 'Online'\r\n }\r\n }\r\n\r\n function getStatusTip(device) {\r\n if (!device.config || !device.config[\"$metadata\"]) return \"\";\r\n return \"Since \" + new Date(device.config[\"$metadata\"][\"$lastUpdated\"]).toLocaleString();\r\n }\r\n\r\n function getHotspot(device) {\r\n if (!isInitializing(device)) {\r\n if (!device.config.services.hotspot) return \"\";\r\n return device.config.services.hotspot.enabled ? 'Enabled' : 'Disabled';\r\n } else {\r\n return INITIALIZING_COLUMN_TEXT;\r\n }\r\n }\r\n\r\n function getModerator(device) {\r\n if (!isInitializing(device)) {\r\n if (!device.config.moderator) return \"\";\r\n return device.config.moderator.enabled === false ? 'Off' : 'On';\r\n } else {\r\n return INITIALIZING_COLUMN_TEXT;\r\n }\r\n }\r\n\r\n function getStatusClass(device) {\r\n if (isInitializing(device)) {\r\n return 'statusUpdating';\r\n } else {\r\n return !deviceConnected(device) ? 'statusOffline' : 'statusOnline';\r\n }\r\n }\r\n\r\n function deviceConnectionState(device) {\r\n return device.connectionState;\r\n }\r\n\r\n function deviceConnected(device) {\r\n return deviceConnectionState(device) !== DISCONNECTED ? true : false;\r\n }\r\n\r\n function getIpAddress(device) {\r\n if (isInitializing(device)) return \"\";\r\n if (!device.config.device.info) return \"\";\r\n if (Utils.hasString(device.config.device.info.activeIpv4EthernetAddresses) && device.config.device.info.activeIpv4EthernetAddresses !== '...') {\r\n return device.config.device.info.activeIpv4EthernetAddresses;\r\n } else if (Utils.hasString(device.config.device.info.activeIpv4Addresses) && device.config.device.info.activeIpv4Addresses !== '...') {\r\n return device.config.device.info.activeIpv4Addresses;\r\n } else if (Utils.hasString(device.config.device.info.activeIpv4WifiAddresses) && device.config.device.info.activeIpv4WifiAddresses !== '...') {\r\n return device.config.device.info.activeIpv4WifiAddresses;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n function renderAirserversTable() {\r\n let trClass = '', tableClass = 'table';\r\n if (detailsPaneVisible) {\r\n trClass = 'trNotSelectable';\r\n tableClass = 'table';\r\n }\r\n\r\n if (devices && devices.length === 0) {\r\n return (\r\n
\r\n {\r\n expandedInUI ?\r\n (devices.fetching ? (
) :\r\n (

No devices found

)) :\r\n (
\r\n \r\n {tableHead()}\r\n {tableBody()}\r\n
\r\n
)\r\n }\r\n
\r\n );\r\n }\r\n\r\n function tableHead() {\r\n return expandedInUI ?\r\n (\r\n handleGroupCheckChange(groupId)} className={isGroupChecked(groupId) ? 'connectedDeviceRow selectedRow' : 'connectedDeviceRow'}>\r\n \r\n handleGroupCheckChange(groupId)} onClick={(e) => e.stopPropagation()} />\r\n \r\n NAME\r\n STATUS\r\n IP ADDRESS\r\n VERSION\r\n UPDATES\r\n PROTOCOLS\r\n HOTSPOT\r\n MODERATOR\r\n SETTINGS\r\n \r\n )\r\n : null;\r\n }\r\n\r\n function tableBody() {\r\n function getTrClassName(device) {\r\n //return trClass + (deviceConnected(device) ? ' connectedDeviceRow' : '') + (device.selected ? ' selectedRow' : '');\r\n return trClass + ' connectedDeviceRow' + (device.selected ? ' selectedRow' : '');\r\n }\r\n\r\n return expandedInUI ?\r\n (\r\n {devices.map(device =>\r\n handleDeviceCheckChange(device.deviceId)}>\r\n \r\n handleDeviceCheckChange(device.deviceId)} onClick={(e) => e.stopPropagation()} />\r\n \r\n {device.config && device.config.device ? device.config.device.name : \"\"}\r\n {getStatusText(device)}\r\n {getIpAddress(device)}\r\n {getVersion(device)}\r\n {getCheckForUpdatesStr(device)}\r\n {getProtocolIcons(device)}\r\n {getHotspot(device)}\r\n {getModerator(device)}\r\n \r\n {\r\n isInitializing(device) ? null : ( handleRowClick(e, device.deviceId, deviceConnectionState(device))} size='2x' />)\r\n }\r\n \r\n \r\n )}\r\n )\r\n : null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n {tableHead()}\r\n {tableBody()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n let contents = renderAirserversTable();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle, faTimesCircle } from '@fortawesome/pro-regular-svg-icons';\r\nimport 'react-tippy/dist/tippy.css';\r\nimport { Tooltip, } from 'react-tippy';\r\n\r\nexport default function PlusX({ name, checked, setChecked, multipleEdit, plusXPadding = '' }) {\r\n function handleChange() {\r\n setChecked(!checked);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport '../main.css';\r\n\r\nexport default function Switch({ isOn, handleToggle, labelText, visible = true, readonly = false, addClassName = '' }) {\r\n let labelCss = readonly ? 'react-switch-label-disabled' : 'react-switch-label';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { Fragment } from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\nimport { HOMESCREEN_FULL, HOMESCREEN_FULL_CENTER, HOMESCREEN_FULL_LEFT, HOMESCREEN_FULL_RIGHT, HOMESCREEN_MINIMAL, HOMESCREEN_NONE, SESSION_DEFAULT, SESSION_GRID, SESSION_SINGLE, SESSION_FOCUS } from '../Utils';\r\n\r\nexport default function PersonalizationTab({ multipleEdit, name, handleChangeName, background, handleChangeBackground, checked_background, setChecked_background, backgroundValid,\r\n homescreenLayout, set_homescreenLayout, checked_homescreenLayout, setChecked_homescreenLayout,\r\n showHowToConnect, set_showHowToConnect, checked_showHowToConnect, setChecked_showHowToConnect,\r\n showWiFiQrCode, set_showWiFiQrCode, checked_showWiFiQrCode, setChecked_showWiFiQrCode,\r\n showGuestAccessWhileInUse, set_showGuestAccessWhileInUse, checked_showGuestAccessWhileInUse, setChecked_showGuestAccessWhileInUse,\r\n sessionLayout, set_sessionLayout, checked_sessionLayout, setChecked_sessionLayout,\r\n displayYourOwnNetwork, handleToggleDisplayYourOwnNetwork, checked_displayYourOwnNetwork, setChecked_displayYourOwnNetwork,\r\n wifiSsid, set_wifiSsid, wifiPassword, set_wifiPassword }) {\r\n\r\n function mapHomescreenLayout() {\r\n if (multipleEdit && !checked_homescreenLayout) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeHomescreenLayout(e) {\r\n set_homescreenLayout(e.target.value);\r\n }\r\n\r\n function mapSessionLayout() {\r\n if (multipleEdit && !checked_sessionLayout) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeSessionLayout(e) {\r\n set_sessionLayout(e.target.value);\r\n }\r\n\r\n function getBackgroundCss() {\r\n let retval = backgroundValid ? '' : 'formIsInvalid';\r\n if (multipleEdit && !checked_background) retval += ' form-control-disabled'\r\n return retval;\r\n }\r\n\r\n return (\r\n
\r\n Personalization\r\n\r\n {/*Friendly Name*/}\r\n {!multipleEdit ? (\r\n \r\n \r\n \r\n Name/Room\r\n \r\n \r\n \r\n \r\n ) : null}\r\n\r\n {/*Background URL*/}\r\n \r\n Background\r\n \r\n \r\n handleChangeBackground(e.target.value)}\r\n placeholder={(multipleEdit && !checked_background) ? '' : 'Enter background url'} className={getBackgroundCss()} disabled={multipleEdit && !checked_background} maxLength={512} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n backgroundValid ? null : (Please provide a valid background URL)\r\n }\r\n \r\n\r\n {/*Homescreen Layout*/}\r\n \r\n \r\n \r\n Homescreen Layout\r\n \r\n \r\n \r\n \r\n \r\n {mapHomescreenLayout()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Session Layout*/}\r\n \r\n \r\n \r\n Session Layout\r\n \r\n \r\n \r\n \r\n \r\n {mapSessionLayout()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n (homescreenLayout !== HOMESCREEN_MINIMAL) && (\r\n \r\n {/*Show How To Connect*/}\r\n \r\n \r\n { set_showHowToConnect(!showHowToConnect) }} labelText='Show How To Connect' visible={!(multipleEdit && !checked_showHowToConnect)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Show QR Code*/}\r\n \r\n \r\n { set_showWiFiQrCode(!showWiFiQrCode) }} labelText='Show QR Code' visible={!(multipleEdit && !checked_showWiFiQrCode)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n {/*Show Guest Access While In Use*/}\r\n \r\n \r\n { set_showGuestAccessWhileInUse(!showGuestAccessWhileInUse) }} labelText='Show Guest Access While In Use'\r\n visible={!(multipleEdit && !checked_showGuestAccessWhileInUse)} />\r\n \r\n \r\n \r\n \r\n \r\n\r\n\t\t\t{/*Show Your Own Guest Network*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t{\r\n\t\t\t\t\t!(!displayYourOwnNetwork || (multipleEdit && !checked_displayYourOwnNetwork)) &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tNetwork SSID\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t { set_wifiSsid(e.target.value) }} placeholder=\"Enter ssid\" maxLength=\"150\" />\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tWi-Fi Password\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t { set_wifiPassword(e.target.value) }}\r\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter password\" maxLength=\"150\" />\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n \r\n\r\n\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport default function AutofillStopper() {\r\n return (\r\n
\r\n {/* fake fields are a workaround for chrome autofill getting the wrong fields */}\r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\n\r\nfunction prettyText(text) {\r\n return text === '' ? 'Not Available' : text;\r\n}\r\n\r\nexport default function InfoRow({ label, value, valueLink = '' }) {\r\n return (\r\n \r\n {label}\r\n \r\n {\r\n valueLink !== '' ?\r\n ({value}) :\r\n (
)\r\n }\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport AutofillStopper from '../AutofillStopper';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\nimport InfoRow from './subComponents/InfoRow';\r\n\r\nexport default function NetworkTab({ networkReadOnly, multipleEdit, deviceInfo,\r\n checked_enterpriseSecurity, handleEnterpriseSecurityChange, enterpriseSecurity, setChecked_enterpriseSecurity, enterprisePassword, enterpriseUsername, set_enterprisePassword, set_enterpriseUsername,\r\n checked_proxy, handleChangeProxyHostname, handleProxyPortChange, proxyEnabled, proxyHostname, proxyHostnameValid, proxyPort, setChecked_proxy, set_proxyEnabled\r\n}) {\r\n\r\n //ipSettings, checked_ipSettings, changeIpSettings, ipAddress, handleChangeIpAddress, ipAddressValid, netmask, handleChangeNetmask, netmaskValid, gateway, gatewayValid, handleChangeGateway, dns1, dns1Valid, handleChangeDns1, dns2, dns2Valid, handleChangeDns2,\r\n //wifiAdapterDetected, wifiEnabled, set_wifiEnabled, wifiStatus, wifiSsid, set_wifiSsid, wifiPassword, set_wifiPassword, wifiAuthUsername, set_wifiAuthUsername, wifiAuthPassword, set_wifiAuthPassword, wifiSecurityType, set_wifiSecurityType, activeIpv4WifiAddresses\r\n\r\n\tfunction formatIpv6(str) {\r\n return str.replace(/\\s+/g, \",
\\n\");\r\n }\r\n\r\n return (\r\n
\r\n {networkReadOnly ? 'Network (read only)' : 'Network'}\r\n\r\n\t\t\t{\r\n\t\t\t\t!multipleEdit &&\r\n\t\t\t\t\r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\r\n \r\n \r\n {/*802.1X Security*/}\r\n \r\n \r\n \r\n 802.1X Security\r\n \r\n {/*Security None or Enterprise*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* fake fields are a workaround for chrome autofill getting the wrong fields */}\r\n \r\n {/*Proxy username and password*/}\r\n \r\n \r\n \r\n Username\r\n { set_enterpriseUsername(e.target.value) }} placeholder=\"Enter username\" />\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Password\r\n { set_enterprisePassword(e.target.value) }} placeholder=\"Enter password\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n networkReadOnly ? null : ()\r\n }\r\n \r\n \r\n\r\n \r\n \r\n { set_proxyEnabled(!proxyEnabled) }} labelText='Proxy' readonly={networkReadOnly} visible={!(multipleEdit && !checked_proxy)} />\r\n \r\n \r\n {\r\n networkReadOnly ? null : ()\r\n }\r\n \r\n \r\n \r\n \r\n \r\n Hostname\r\n handleChangeProxyHostname(e.target.value)}\r\n placeholder=\"proxy.example.com\" readOnly={networkReadOnly} className={proxyHostnameValid ? '' : 'formIsInvalid'} />\r\n {\r\n proxyHostnameValid ? null : (Please provide a valid url)\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n Port\r\n { handleProxyPortChange(e.target.value) }} placeholder=\"8080\" readOnly={networkReadOnly} />\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\n\r\nexport default function GuestConnectivityTab({ builtInHotspot, checked_builtInHotspot, setChecked_builtInHotspot, handleToggleHotspot, multipleEdit, checked_hotspotPassword, handleSetHotspotPassword,\r\n hotspotInterfaceInfoRegdom,\r\n hotspotInterfaceInfoWidth, hotspotPassword, setChecked_hotspotPassword, requestedFrequency, irChannels, set_requestedFrequency, currentFrequency, clientIsolation, set_clientIsolation, guestAccessType,\r\n checked_guestAccessType, handleGuestAccessTypeChange, setChecked_guestAccessType,\r\n hotspotPasswordValid, deviceInfo, checked_clientIsolation, setChecked_clientIsolation}) {\r\n\r\n function getChannel(freq, width)\r\n {\r\n // Channel (Band) Width\r\n\r\n /* see 802.11 17.3.8.3.2 and Annex J */\r\n if (freq === 2484)\r\n return 14 + \" (2.4 GHz) \" + width;\r\n else if (freq < 2484)\r\n return ((freq - 2407) / 5) + \" (2.4 GHz) \" + width;\r\n else if (freq >= 4910 && freq <= 4980)\r\n return ((freq - 4000) / 5) + \" (4.9 GHz) \" + width;\r\n else if (freq < 5925)\r\n return ((freq - 5000) / 5) + \" (5 GHz) \" + width;\r\n else if (freq === 5935)\r\n return 2 + \" (6 GHz) \" + width;\r\n else if (freq <= 45000) /* DMG band lower limit */\r\n /* see 802.11ax D6.1 27.3.22.2 */\r\n return ((freq - 5950) / 5) + \" (6 GHz) \" + width;\r\n else if (freq >= 58320 && freq <= 70200)\r\n return ((freq - 56160) / 2160) + \" (802.11ad) \" + width;\r\n else\r\n return 0;\r\n }\r\n\r\n function getBand(freq) {\r\n if (freq < 2495)\r\n return \"2.4 GHz\";\r\n else if (freq >= 3655 && freq <= 3695)\r\n return \"3.65 GHz\";\r\n else if (freq >= 4910 && freq < 4990)\r\n return \"4.9 GHz\";\r\n else if (freq > 5150 && freq < 5895)\r\n return \"5 GHz\";\r\n else if (freq > 5855 && freq < 5990)\r\n return \"5.9 GHz\";\r\n else if (freq > 5925 && freq < 7125)\r\n return \"6 GHz\";\r\n else return \"\";\r\n }\r\n\r\n function getChannelListItem(freq, dfs) {\r\n let dfsSuffix = dfs ? \" (DFS)\" : \"\"\r\n\r\n if (freq === 2484)\r\n return 14 + \" (2.4 GHz) \" + dfsSuffix;\r\n else if (freq < 2484)\r\n return ((freq - 2407) / 5) + \" (2.4 GHz) \" + dfsSuffix;\r\n else if (freq >= 4910 && freq <= 4980)\r\n return ((freq - 4000) / 5) + \" (4.9 GHz) \" + dfsSuffix;\r\n else if (freq < 5925)\r\n return ((freq - 5000) / 5) + \" (5 GHz) \" + dfsSuffix;\r\n else if (freq === 5935)\r\n return 2 + \" (6 GHz) \" + dfsSuffix;\r\n else if (freq <= 45000) /* DMG band lower limit */\r\n /* see 802.11ax D6.1 27.3.22.2 */\r\n return ((freq - 5950) / 5) + \" (6 GHz) \" + dfsSuffix;\r\n else if (freq >= 58320 && freq <= 70200)\r\n return ((freq - 56160) / 2160) + \" (802.11ad) \" + dfsSuffix;\r\n else\r\n return 0;\r\n }\r\n\r\n function getChannelKey(freq) {\r\n return \"freq-\"+freq\r\n }\r\n\r\n function mapChannels() {\r\n let retval = [];\r\n retval.push();\r\n if (irChannels && Array.isArray(irChannels)) {\r\n //let lastBand = \"\";\r\n for (let i = 0; i < irChannels.length; i++) {\r\n let frequency = irChannels[i].frequency;\r\n let dfs = irChannels[i].dfs;\r\n //let band = getBand(frequency)\r\n\r\n //if (band !== lastBand) {\r\n // if (lastBand !== \"\") {\r\n // retval.push()\r\n // }\r\n // lastBand = band;\r\n // retval.push()\r\n //}\r\n retval.push()\r\n }\r\n //if (irChannels.length) {\r\n // retval.push()\r\n //}\r\n }\r\n return retval;\r\n }\r\n\r\n function mapGuestAccessType() {\r\n if (multipleEdit && !checked_guestAccessType) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function changeSelectedFrequency(e) {\r\n set_requestedFrequency(e.target.value);\r\n }\r\n\r\n function prettyText(text) {\r\n return text ? text : 'Not Available';\r\n }\r\n\r\n function getHotspotPasswordClass() {\r\n let retval = hotspotPasswordValid ? '' : 'formIsInvalid';\r\n if (multipleEdit && !checked_hotspotPassword) retval += ' form-control-disabled'\r\n return retval;\r\n }\r\n\r\n return (\r\n
\r\n Guest Connectivity\r\n \r\n \r\n {/* Wi-Fi information rows end here. */}\r\n {\r\n multipleEdit || !builtInHotspot ? null : (\r\n \r\n\r\n \r\n Current Frequency\r\n \r\n {getChannel(currentFrequency, hotspotInterfaceInfoWidth)}\r\n \r\n \r\n\r\n \r\n Regulatory Domain\r\n \r\n {prettyText(hotspotInterfaceInfoRegdom)}\r\n \r\n \r\n \r\n Wi-Fi Hotspot IP Address\r\n \r\n {prettyText(deviceInfo.activeIpv4HotspotAddresses)}\r\n \r\n \r\n {/*\r\n \r\n TX Power\r\n \r\n {hotspotInterfaceInfoTxPower}\r\n \r\n \r\n */}\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Wi-Fi Hotspot Password\r\n \r\n \r\n handleSetHotspotPassword(e.target.value)}\r\n placeholder={(multipleEdit && !checked_hotspotPassword) ? '' : 'Passphrase'} className={getHotspotPasswordClass()} disabled={multipleEdit && !checked_hotspotPassword} maxLength={63} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n Access\r\n \r\n \r\n \r\n {mapGuestAccessType()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {\r\n multipleEdit ? null : (\r\n \r\n \r\n \r\n \r\n Channel\r\n \r\n \r\n \r\n \r\n \r\n { mapChannels() }\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n \r\n \r\n \r\n { set_clientIsolation(!clientIsolation) }}\r\n labelText='Client Isolation' visible={!(multipleEdit && !checked_clientIsolation)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport Switch from './Switch';\r\n\r\nexport default function ConfirmationDialog({ show, text, result, header = 'Confirmation', extraQuestion = '' }) {\r\n const [questionChecked, set_questionChecked] = useState(false);\r\n\r\n function callTrueResult() {\r\n if (extraQuestion === '') {\r\n result(true);\r\n } else {\r\n result(true, questionChecked);\r\n }\r\n \r\n set_questionChecked(false);\r\n }\r\n\r\n function callFalseResult() {\r\n result(false);\r\n set_questionChecked(false);\r\n }\r\n\r\n return (\r\n \r\n \r\n {header}\r\n \r\n \r\n {text}\r\n {\r\n extraQuestion === '' ? null : (
{ set_questionChecked(!questionChecked) }} labelText={extraQuestion} addClassName='questionColor' />
)\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Container, Button, Col } from 'react-bootstrap';\r\nimport ConfirmationDialog from '../ConfirmationDialog';\r\nimport PlusX from '../PlusX';\r\n\r\nexport default function DeviceManagementTab({ multipleEdit,\r\n showPowerOffDeviceConfirmation, showConfirmationPowerOffDevice, powerOffDeviceConfirmationResult,\r\n showRebootDeviceConfirmation, showConfirmationRebootDevice, rebootDeviceConfirmationResult,\r\n showRemoveDeviceConfirmation, showConfirmationRemoveDevice, removeDeviceConfirmationResult,\r\n showResetAllSettingsConfirmation, showConfirmationResetAllSettings, resetAllSettingsConfirmationResult,\r\n changeSelectedGroup, groupId, set_groupId, checked_groups, groups, setChecked_groups }) {\r\n\r\n\r\n function detachHeader() {\r\n if (multipleEdit) {\r\n return 'Detach devices from cloud';\r\n } else {\r\n return 'Detach device from cloud';\r\n }\r\n }\r\n\r\n function detachText() {\r\n if (multipleEdit) {\r\n return 'This will detach the selected devices from the AirServer Cloud Management';\r\n } else {\r\n return 'This will detach this device from the AirServer Cloud Management';\r\n }\r\n }\r\n\r\n function detachExtraQuestion() {\r\n if (multipleEdit) {\r\n return 'Also reset all settings on all selected devices';\r\n } else {\r\n return 'Also reset all settings on device';\r\n }\r\n }\r\n\r\n function plusXgroupsChecked(enabled) {\r\n setChecked_groups(enabled);\r\n if (enabled) {\r\n set_groupId(groups[0].deviceId)\r\n }\r\n }\r\n\r\n return (\r\n
\r\n Cloud Management\r\n \r\n\r\n \r\n Group\r\n \r\n \r\n \r\n \r\n {multipleEdit && !checked_groups ? null : groups.map(group =>\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n {/*Reset all settings*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Col, Button } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\nimport ConfirmationDialog from '../ConfirmationDialog';\r\n\r\nexport default function ModeratorModeTab({ multipleEdit, moderator, set_moderator, checked_moderator, setChecked_moderator,\r\n\tshowEndSessionConfirmation, showConfirmationEndSession, endSessionConfirmationResult }) {\r\n\r\n return (\r\n
\r\n Moderator\r\n \r\n \r\n \r\n { set_moderator(!moderator) }} labelText='Moderator' visible={!(multipleEdit && !checked_moderator)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\n\r\nexport default function ScreenMirroringTab({ multipleEdit, airplayMode, set_airplayMode, airplayPassword, set_airplayPassword, checked_airplay, setChecked_airplay, googleCastMode, set_googleCastMode, checked_googleCast, setChecked_googleCast, miracastMode, set_miracastMode, checked_miracast, setChecked_miracast }) {\r\n\r\n function fillAirPlayOptions() {\r\n if (multipleEdit && !checked_airplay) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function fillGoogleCastOptions() {\r\n if (multipleEdit && !checked_googleCast) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function fillMiracastOptions() {\r\n if (multipleEdit && !checked_miracast) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n return (\r\n
\r\n \r\n Screen Mirroring\r\n \r\n \r\n AirPlay\r\n \r\n \r\n \r\n \r\n set_airplayMode(Number(e.target.value))} value={airplayMode}>\r\n {fillAirPlayOptions()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n set_airplayPassword(e.target.value)} maxLength=\"32\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Google Cast\r\n \r\n \r\n \r\n \r\n { set_googleCastMode(e.target.value); }} value={googleCastMode}>\r\n {fillGoogleCastOptions()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Miracast\r\n \r\n \r\n \r\n \r\n { set_miracastMode(e.target.value); }} value={miracastMode}>\r\n {fillMiracastOptions()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport Switch from '../Switch';\r\nimport PlusX from '../PlusX';\r\nimport {TURN_DISPLAY_OFF_INACTIVE_NEVER, TURN_DISPLAY_OFF_INACTIVE_IMMEDIALLY, TURN_DISPLAY_OFF_INACTIVE_1_MINUTE, TURN_DISPLAY_OFF_INACTIVE_15_MINUTES, TURN_DISPLAY_OFF_INACTIVE_1_HOUR,\r\n TURN_DISPLAY_OFF_INACTIVE_3_HOURS, SAMPLE_RATE_44100, SAMPLE_RATE_48000, SAMPLE_RATE_96000, SAMPLE_RATE_192000} from '../Utils';\r\n\r\nexport default function AudioAndVideoTab({ multipleEdit, softRotation, checked_displayRotation, handleDisplayRotationChange, setChecked_displayRotation,\r\n displayPowerManagement, set_displayPowerManagement, checked_turnDisplayOutOffWhenInactive, setChecked_turnDisplayOutOffWhenInactive,\r\n sampleRate, set_sampleRate, checked_sampleRate, setChecked_sampleRate, sleepTimerMinutes, set_sleepTimerMinutes, forceLowResolution, set_forceLowResolution, airplayAudioReceiver, set_airplayAudioReceiver, hdmiCecEnabled, set_hdmiCecEnabled, hdmiCecSupported,\r\n checked_airplayAudioReceiver, setChecked_airplayAudioReceiver, checked_forceLowResolution, setChecked_forceLowResolution, checked_hdmiCecEnabled, setChecked_hdmiCecEnabled}) {\r\n\r\n function mapTurnDisplayOutOffWhenInactive() {\r\n if (multipleEdit && !checked_turnDisplayOutOffWhenInactive) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function mapDisplayRotation() {\r\n if (multipleEdit && !checked_displayRotation) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function getTurnDisplayOutOffWhenInactive() {\r\n if (displayPowerManagement === false) {\r\n return TURN_DISPLAY_OFF_INACTIVE_NEVER;\r\n } else {\r\n if (sleepTimerMinutes < 1) {\r\n return TURN_DISPLAY_OFF_INACTIVE_IMMEDIALLY;\r\n } else if (sleepTimerMinutes === 1) {\r\n return TURN_DISPLAY_OFF_INACTIVE_1_MINUTE;\r\n } else if (sleepTimerMinutes <= 15) {\r\n return TURN_DISPLAY_OFF_INACTIVE_15_MINUTES;\r\n } else if (sleepTimerMinutes <= 60) {\r\n return TURN_DISPLAY_OFF_INACTIVE_1_HOUR;\r\n } else {\r\n return TURN_DISPLAY_OFF_INACTIVE_3_HOURS;\r\n }\r\n }\r\n }\r\n\r\n function handleAirPlayAudioReceiverChange() {\r\n set_airplayAudioReceiver(!airplayAudioReceiver);\r\n }\r\n function handleForceLowResolutionChange() {\r\n set_forceLowResolution(!forceLowResolution);\r\n }\r\n\r\n function handleHdmiCecEnableChanged() {\r\n if (!multipleEdit && !hdmiCecSupported) return;\r\n set_hdmiCecEnabled(!hdmiCecEnabled)\r\n }\r\n\r\n function dropdownChangeTurnDisplayOutOffWhenInactive(e) {\r\n const val = e.target.value;\r\n\r\n switch (val) {\r\n case TURN_DISPLAY_OFF_INACTIVE_NEVER:\r\n set_displayPowerManagement(false);\r\n set_sleepTimerMinutes(0);\r\n break;\r\n\r\n case TURN_DISPLAY_OFF_INACTIVE_IMMEDIALLY:\r\n set_displayPowerManagement(true);\r\n set_sleepTimerMinutes(0);\r\n break;\r\n\r\n case TURN_DISPLAY_OFF_INACTIVE_1_MINUTE:\r\n set_displayPowerManagement(true);\r\n set_sleepTimerMinutes(1);\r\n break;\r\n\r\n case TURN_DISPLAY_OFF_INACTIVE_15_MINUTES:\r\n set_displayPowerManagement(true);\r\n set_sleepTimerMinutes(15);\r\n break;\r\n\r\n case TURN_DISPLAY_OFF_INACTIVE_1_HOUR:\r\n set_displayPowerManagement(true);\r\n set_sleepTimerMinutes(60);\r\n break;\r\n\r\n default:\r\n set_displayPowerManagement(true);\r\n set_sleepTimerMinutes(60 * 3);\r\n break;\r\n }\r\n }\r\n\r\n function mapSampleRate() {\r\n if (multipleEdit && !checked_sampleRate) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeSampleRate(e) {\r\n set_sampleRate(e.target.value);\r\n }\r\n\r\n return (\r\n
\r\n Audio and Video\r\n \r\n \r\n\r\n \r\n\r\n \r\n {/*AirPlay Audio Receiver*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/*Force Low Resolution*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n {/*Display Rotation*/}\r\n \r\n \r\n \r\n Screen Rotation\r\n \r\n \r\n \r\n \r\n \r\n {mapDisplayRotation()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Turn Display Output off When Inactive*/}\r\n \r\n \r\n \r\n Turn Display Output off When Inactive\r\n \r\n \r\n \r\n \r\n \r\n {mapTurnDisplayOutOffWhenInactive()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Sample Rate*/}\r\n \r\n \r\n \r\n Sample Rate\r\n \r\n \r\n \r\n \r\n \r\n {mapSampleRate()}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {/*Screen Resolution*/}\r\n {/**/}\r\n {/* */}\r\n {/* */}\r\n {/* Screen Resolution - Coming Soon*/}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n\r\n \r\n \r\n\r\n\r\n \r\n
\r\n );\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport { Form, Col, Row } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\n\r\nexport default function SecurityTab({ multipleEdit, sslPrivateKey, sslCertificate, set_sslPrivateKey, set_sslCertificate, checked_privateKeyAndCert, setChecked_privateKeyAndCert,\r\n\tenableDeviceManagement, set_enableDeviceManagement, checked_enableDeviceManagement, setChecked_enableDeviceManagement, deviceManagementPassword, handleChangeDeviceManagementPassword, checked_deviceManagementPassword,\r\n\tsetChecked_deviceManagementPassword, deviceManagementPasswordValid }) {\r\n\treturn (\r\n\t\t
\r\n\t\t\tSecurity\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t { set_enableDeviceManagement(!enableDeviceManagement) }}\r\n\t\t\t\t\t\t\tlabelText='Device Management' visible={!(multipleEdit && !checked_enableDeviceManagement)} />\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t(!multipleEdit && enableDeviceManagement) || (multipleEdit && enableDeviceManagement && checked_enableDeviceManagement) ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t { handleChangeDeviceManagementPassword(e.target.value) }}\r\n\t\t\t\t\t\t\t\t\t\tplaceholder={(multipleEdit && !checked_deviceManagementPassword) ? '' : 'Management password'} autoComplete='off' className={multipleEdit && !checked_deviceManagementPassword ? \"form-control-disabled form-control\" : \"\" }\r\n\t\t\t\t\t\t\t\t\t\tmaxLength=\"150\" disabled={multipleEdit && !checked_deviceManagementPassword} />\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t: null\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t{\r\n\t\t\t\t\t(!multipleEdit && enableDeviceManagement && !deviceManagementPasswordValid) || (multipleEdit && enableDeviceManagement && checked_enableDeviceManagement && !deviceManagementPasswordValid) ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDevice Management password cannot be empty\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)\r\n\t\t\t\t\t: null\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tTLS/SSL Security\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tmultipleEdit && !checked_privateKeyAndCert ? null : (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tPrivate Key\r\n\t\t\t\t\t\t\t\t\t { set_sslPrivateKey(e.target.value) }} placeholder=\"Enter private key\" maxLength=\"512\" />\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCertificate\r\n\t\t\t\t\t\t\t\t\t { set_sslCertificate(e.target.value) }} placeholder=\"Enter certificate\" maxLength=\"1024\" />\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\r\n\t\t\t\t{\r\n\t\t\t\t\t(!multipleEdit || (multipleEdit && checked_privateKeyAndCert)) && (!sslPrivateKey || !sslCertificate) ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPrivate Key and Certificate must not be empty\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)\r\n\t\t\t\t\t: null\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\n\r\nimport { Form, Col } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport {ENGLISH, HOUR_OFF, HOUR_12, HOUR_24 } from '../Utils';\r\n\r\nexport default function LocalizationTab({ multipleEdit, wifiCountry, set_wifiCountry, checked_country, setChecked_country, language, set_language, checked_language, setChecked_language, clock, set_clock, checked_clock, setChecked_clock,\r\n timezone, set_timezone, checked_timezone, setChecked_timezone }) {\r\n\r\n function mapLanguage() {\r\n if (multipleEdit && !checked_language) return null;\r\n let retval = [];\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeWiFiCountry(e) {\r\n set_wifiCountry(e.target.value);\r\n }\r\n\r\n function dropdownChangeLanguage(e) {\r\n set_language(e.target.value);\r\n }\r\n\r\n function mapClock() {\r\n if (multipleEdit && !checked_clock) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeClock(e) {\r\n set_clock(e.target.value);\r\n }\r\n\r\n function mapCountry() {\r\n if (multipleEdit && !checked_country) return null;\r\n let retval = [];\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n retval.push()\r\n return retval;\r\n }\r\n\r\n function mapTimezone() {\r\n if (multipleEdit && !checked_timezone) return null;\r\n let retval = [];\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n retval.push();\r\n return retval;\r\n }\r\n\r\n function dropdownChangeTimezone(e) {\r\n set_timezone(e.target.value);\r\n }\r\n\r\n return (\r\n\t\t
\r\n\t\t\tLocalization\r\n\r\n {/*Country*/}\r\n \r\n \r\n \r\n Country\r\n \r\n \r\n \r\n \r\n \r\n {mapCountry()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Language*/}\r\n \r\n \r\n \r\n Language\r\n \r\n \r\n \r\n \r\n \r\n {mapLanguage()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Clock*/}\r\n \r\n \r\n \r\n Clock\r\n \r\n \r\n \r\n \r\n \r\n {mapClock()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Timezone*/}\r\n \r\n \r\n \r\n Timezone\r\n \r\n \r\n \r\n \r\n \r\n {mapTimezone()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t
\r\n\t);\r\n}\r\n","import React, { useState, Fragment } from 'react';\r\nimport { Form, Col, Button } from 'react-bootstrap';\r\nimport PlusX from '../PlusX';\r\nimport Switch from '../Switch';\r\nimport ConfirmationDialog from '../ConfirmationDialog';\r\nimport InfoRow from './subComponents/InfoRow';\r\n\r\nexport default function AboutTab({ deviceInfo, deviceConfig, automaticUpdateEnabled, set_automaticUpdateEnabled, multipleEdit, checked_automaticUpdateEnabled, setChecked_automaticUpdateEnabled,\r\n installUpdatesConfirmationResult, version, latestDeviceVersion, connectedState}) {\r\n const [showConfirmationCheckAndInstallUpdates, set_showConfirmationCheckAndInstallUpdates] = useState(false);\r\n\r\n function showCheckAndInstallUpdates() {\r\n set_showConfirmationCheckAndInstallUpdates(true);\r\n }\r\n\r\n function handleInstallUpdatesConfirmationResult(result) {\r\n set_showConfirmationCheckAndInstallUpdates(false);\r\n installUpdatesConfirmationResult(result);\r\n }\r\n\r\n function updateAvailable() {\r\n return (new Date(version) < new Date(latestDeviceVersion));\r\n }\r\n\r\n function getUpToDateText() {\r\n if (updateAvailable()) {\r\n return `Update Available: ${latestDeviceVersion}`;\r\n } else {\r\n return 'This device is up to date';\r\n }\r\n }\r\n function getStatusTip() {\r\n if (!deviceConfig[\"$metadata\"]) return \"\";\r\n return \" since \" + new Date(deviceConfig[\"$metadata\"][\"$lastUpdated\"]).toLocaleString();\r\n }\r\n return (\r\n
\r\n About\r\n \r\n \r\n \r\n \r\n {\r\n multipleEdit ? null : (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n Updates\r\n \r\n \r\n \r\n {/*Automatic updates*/}\r\n \r\n \r\n { set_automaticUpdateEnabled(!automaticUpdateEnabled) }} labelText='Automatic Updates' visible={!(multipleEdit && !checked_automaticUpdateEnabled)} />\r\n \r\n \r\n \r\n \r\n \r\n {/*Release notes*/}\r\n {\r\n multipleEdit ? null : (\r\n \r\n \r\n {\r\n latestDeviceVersion ? (\r\n

\r\n {\r\n getUpToDateText()\r\n }\r\n

\r\n ) : null\r\n }\r\n \r\n
\r\n )\r\n }\r\n\r\n {\r\n automaticUpdateEnabled ? null :\r\n

\r\n Automatic updates provide new features and security\r\n enhancements required to protect this device and others\r\n on the same network from potential threats. We strongly recommend\r\n that you always have automatic updates enabled.\r\n

\r\n }\r\n\r\n {/*Updates button and confirmation dialog*/}\r\n {\r\n multipleEdit ? null : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Jumbotron, Button, Form, Tabs, Tab, Col, Container, Row } from 'react-bootstrap';\r\nimport '../main.css';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport Utils, { DISCONNECTED, HOMESCREEN_FULL, SESSION_DEFAULT, SAMPLE_RATE_44100, ENGLISH, HOUR_12, UTC } from './Utils';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faChromecast } from '@fortawesome/free-brands-svg-icons';\r\nimport { faUser, faProjectDiagram, faRouter, faTvMusic, faCloud, faCommentAltCheck, faInfo, faShieldCheck, faGlobeStand } from '@fortawesome/pro-regular-svg-icons';\r\nimport 'react-tippy/dist/tippy.css';\r\nimport { Tooltip, } from 'react-tippy';\r\nimport PersonalizationTab from './Tabs/PersonalizationTab';\r\nimport NetworkTab from './Tabs/NetworkTab';\r\nimport GuestConnectivityTab from './Tabs/GuestConnectivityTab';\r\nimport DeviceManagementTab from './Tabs/DeviceManagementTab';\r\nimport ModeratorModeTab from './Tabs/ModeratorModeTab';\r\nimport ScreenMirroringTab from './Tabs/ScreenMirroringTab';\r\nimport AudioAndVideoTab from './Tabs/AudioAndVideoTab';\r\nimport SecurityTab from './Tabs/SecurityTab';\r\nimport LocalizationTab from \"./Tabs/LocalizationTab\";\r\nimport AboutTab from './Tabs/AboutTab';\r\nimport axios from 'axios';\r\nimport \"react-loader-spinner/dist/loader/css/react-spinner-loader.css\"\r\nimport Loader from 'react-loader-spinner'\r\n\r\nexport default function DetailsPane({ paneVisible, closeDetailsPane, deviceId, multipleEdit, groups, unselectDevices,\r\n removeDevice, removeDevices, displayNotification, displayError, set_showTimeout }) {\r\n\r\n const networkReadOnly = false;\r\n const APPLY_TEXT = 'APPLY';\r\n const APPLYING_TEXT = 'APPLYING...';\r\n const DETAILPAGE_TIMEOUT = 30000;\r\n const NORMAL_TAB_COLOR = '#42B8FE';\r\n const ERROR_TAB_COLOR = 'darkred';\r\n\r\n const [loading, set_loading] = useState(true);\r\n const [sentFetch, set_sentFetch] = useState(false);\r\n const [applyButtonText, set_applyButtonText] = useState(APPLY_TEXT);\r\n const [groupId, set_groupId] = useState('');\r\n const [latestDeviceVersion, set_latestDeviceVersion] = useState('');\r\n const [numRedCrosses, set_numRedCrosses] = useState(0);\r\n\r\n const [name, set_name] = useState('');\r\n\r\n const [airplayAudioReceiver, set_airplayAudioReceiver] = useState(false);\r\n const [airplayMode, set_airplayMode] = useState(0);\r\n const [googleCastMode, set_googleCastMode] = useState(0);\r\n const [miracastMode, set_miracastMode] = useState(0);\r\n const [airplayPassword, set_airplayPassword] = useState('');\r\n const [automaticUpdateEnabled, set_automaticUpdateEnabled] = useState(false);\r\n const [background, set_background] = useState('');\r\n const [backgroundValid, set_backgroundValid] = useState(true);\r\n const [builtInHotspot, set_builtInHotspot] = useState(false);\r\n const [checkForUpdates, set_checkForUpdates] = useState(false);\r\n const [clientIsolation, set_clientIsolation] = useState(false);\r\n const [clock, set_clock] = useState(HOUR_12);\r\n const [currentFrequency, set_currentFrequency] = useState(0);\r\n const [deviceConfig, set_deviceConfig] = useState(null);\r\n const [deviceConnectionState, set_deviceConnectionState] = useState('');\r\n const [deviceManagementPassword, set_deviceManagementPassword] = useState('');\r\n const [deviceManagementPasswordValid, set_deviceManagementPasswordValid] = useState(true);\r\n const [displayPowerManagement, set_displayPowerManagement] = useState(false);\r\n const [displayYourOwnNetwork, set_displayYourOwnNetwork] = useState(false);\r\n const [enableDeviceManagement, set_enableDeviceManagement] = useState(false);\r\n const [enterprisePassword, set_enterprisePassword] = useState('');\r\n const [enterpriseSecurity, set_enterpriseSecurity] = useState(0);\r\n const [enterpriseUsername, set_enterpriseUsername] = useState('');\r\n const [externalWifiPassword, set_externalWifiPassword] = useState('');\r\n const [externalWifiSsid, set_externalWifiSsid] = useState('');\r\n const [forceLowResolution, set_forceLowResolution] = useState(false);\r\n const [guestAccessType, set_guestAccessType] = useState(0);\r\n const [hdmiCecEnabled, set_hdmiCecEnabled] = useState(false);\r\n const [hdmiCecSupported, set_hdmiCecSupported] = useState(false);\r\n const [homescreenLayout, set_homescreenLayout] = useState(HOMESCREEN_FULL);\r\n const [hotspotInterfaceInfoRegdom, set_hotspotInterfaceInfoRegdom] = useState('');\r\n const [hotspotInterfaceInfoTxPower, set_hotspotInterfaceInfoTxPower] = useState(0);\r\n const [hotspotInterfaceInfoWidth, set_hotspotInterfaceInfoWidth] = useState('');\r\n const [hotspotPassword, set_hotspotPassword] = useState('');\r\n const [hotspotPasswordValid, set_hotspotPasswordValid] = useState(true);\r\n const [initialGroupId, set_initialGroupId] = useState('');\r\n const [irChannels, set_irChannels] = useState([]);\r\n const [language, set_language] = useState(ENGLISH);\r\n const [moderator, set_moderator] = useState(false);\r\n const [proxyEnabled, set_proxyEnabled] = useState(false);\r\n const [proxyHostname, set_proxyHostname] = useState('');\r\n const [proxyHostnameValid, set_proxyHostnameValid] = useState(true);\r\n const [proxyPort, set_proxyPort] = useState(0);\r\n const [requestedFrequency, set_requestedFrequency] = useState(0);\r\n const [sampleRate, set_sampleRate] = useState(SAMPLE_RATE_44100);\r\n const [sessionLayout, set_sessionLayout] = useState(SESSION_DEFAULT);\r\n const [showGuestAccessWhileInUse, set_showGuestAccessWhileInUse] = useState(false);\r\n const [showHowToConnect, set_showHowToConnect] = useState(false);\r\n const [showWiFiQrCode, set_showWiFiQrCode] = useState(false);\r\n const [sleepTimerMinutes, set_sleepTimerMinutes] = useState(0);\r\n const [softRotation, set_softRotation] = useState(0);\r\n const [sslCertificate, set_sslCertificate] = useState('');\r\n const [sslPrivateKey, set_sslPrivateKey] = useState('');\r\n const [timezone, set_timezone] = useState(UTC);\r\n const [upperChannelsClicked, set_upperChannelsClicked] = useState(false);\r\n const [version, set_version] = useState('');\r\n const [wifiCountry, set_wifiCountry] = useState('us');\r\n\r\n const [checked_airplay, setChecked_airplay] = useState(false);\r\n const [checked_airplayAudioReceiver, setChecked_airplayAudioReceiver] = useState(false);\r\n const [checked_automaticUpdateEnabled, setChecked_automaticUpdateEnabled] = useState(false);\r\n const [checked_background, setChecked_background] = useState(false);\r\n const [checked_builtInHotspot, setChecked_builtInHotspot] = useState(false);\r\n const [checked_clock, setChecked_clock] = useState(false);\r\n const [checked_country, setChecked_country] = useState(false);\r\n const [checked_deviceManagementPassword, setChecked_deviceManagementPassword] = useState(false);\r\n const [checked_displayRotation, setChecked_displayRotation] = useState(false);\r\n const [checked_displayYourOwnNetwork, setChecked_displayYourOwnNetwork] = useState(false);\r\n const [checked_enableDeviceManagement, setChecked_enableDeviceManagement] = useState(false);\r\n const [checked_enterpriseSecurity, setChecked_enterpriseSecurity] = useState(false);\r\n const [checked_forceLowResolution, setChecked_forceLowResolution] = useState(false);\r\n const [checked_googleCast, setChecked_googleCast] = useState(false);\r\n const [checked_groups, setChecked_groups] = useState(false);\r\n const [checked_guestAccessType, setChecked_guestAccessType] = useState(false);\r\n const [checked_hdmiCecEnabled, setChecked_hdmiCecEnabled] = useState(false);\r\n const [checked_homescreenLayout, setChecked_homescreenLayout] = useState(false);\r\n const [checked_hotspotPassword, setChecked_hotspotPassword] = useState(false);\r\n const [checked_language, setChecked_language] = useState(false);\r\n const [checked_miracast, setChecked_miracast] = useState(false);\r\n const [checked_moderator, setChecked_moderator] = useState(false);\r\n const [checked_privateKeyAndCert, setChecked_privateKeyAndCert] = useState(false);\r\n const [checked_proxy, setChecked_proxy] = useState(false);\r\n const [checked_sampleRate, setChecked_sampleRate] = useState(false);\r\n const [checked_sessionLayout, setChecked_sessionLayout] = useState(false);\r\n const [checked_showGuestAccessWhileInUse, setChecked_showGuestAccessWhileInUse] = useState(false);\r\n const [checked_showHowToConnect, setChecked_showHowToConnect] = useState(false);\r\n const [checked_showWiFiQrCode, setChecked_showWiFiQrCode] = useState(false);\r\n const [checked_timezone, setChecked_timezone] = useState(false);\r\n const [checked_turnDisplayOutOffWhenInactive, setChecked_turnDisplayOutOffWhenInactive] = useState(false);\r\n\r\n const [checked_upper5g, setChecked_upper5g] = useState(false);\r\n const [checked_clientIsolation, setChecked_clientIsolation] = useState(false);\r\n\r\n const [showConfirmationApplyAndRebootDevice, set_showConfirmationApplyAndRebootDevice] = useState(false);\r\n const [showConfirmationEndSession, set_showConfirmationEndSession] = useState(false);\r\n const [showConfirmationPowerOffDevice, set_showConfirmationPowerOffDevice] = useState(false);\r\n const [showConfirmationRebootDevice, set_showConfirmationRebootDevice] = useState(false);\r\n const [showConfirmationRemoveDevice, set_showConfirmationRemoveDevice] = useState(false);\r\n const [showConfirmationResetAllSettings, set_showConfirmationResetAllSettings] = useState(false);\r\n\r\n function showPowerOffDeviceConfirmation() {\r\n set_showConfirmationPowerOffDevice(true);\r\n }\r\n\r\n function showRebootDeviceConfirmation() {\r\n set_showConfirmationRebootDevice(true);\r\n }\r\n\r\n function showApplyAndRebootDeviceConfirmation() {\r\n set_showConfirmationApplyAndRebootDevice(true);\r\n }\r\n\r\n function showResetAllSettingsConfirmation() {\r\n set_showConfirmationResetAllSettings(true);\r\n }\r\n\r\n function showRemoveDeviceConfirmation() {\r\n set_showConfirmationRemoveDevice(true);\r\n }\r\n\r\n function powerOffDeviceConfirmationResult(result) {\r\n set_showConfirmationPowerOffDevice(false);\r\n if (result === true) {\r\n sendToolsCommand('powerOffDevice', 'true');\r\n displayNotification(`Powering off ${getDeviceAlias()}...`);\r\n exitPane();\r\n }\r\n }\r\n\r\n function rebootDeviceConfirmationResult(result) {\r\n set_showConfirmationRebootDevice(false);\r\n if (result === true) {\r\n sendToolsCommand('reboot', 'true', false);\r\n displayNotification(`Rebooting ${getDeviceAlias()}...`);\r\n exitPane();\r\n }\r\n }\r\n\r\n function applyAndRebootDeviceConfirmationResult(result) {\r\n set_showConfirmationApplyAndRebootDevice(false);\r\n if (result === true) {\r\n handleApplyClick(true);\r\n } else {\r\n exitPane();\r\n }\r\n }\r\n\r\n function resetAllSettingsConfirmationResult(result) {\r\n set_showConfirmationResetAllSettings(false);\r\n if (result === true) {\r\n sendToolsCommand('resetSettingsAndRestart', 'true');\r\n displayNotification(`Resetting all settings and rebooting ${getDeviceAlias()}. This might take a few minutes...`);\r\n exitPane();\r\n setTimeout(() => {\r\n multipleEdit ? removeDevices() : removeDevice(deviceId);\r\n }, 2000);\r\n }\r\n }\r\n\r\n function installUpdatesConfirmationResult(result) {\r\n if (result === true) {\r\n sendToolsCommand('checkForUpdates', 'true');\r\n displayNotification(`Updating ${getDeviceAlias()}...`);\r\n exitPane();\r\n }\r\n }\r\n\r\n\tfunction endSessionConfirmationResult(result) {\r\n set_showConfirmationEndSession(false);\r\n if (result === true) {\r\n sendToolsCommand('resetApplicationSession', 'true');\r\n displayNotification(`Ending session for ${getDeviceAlias()}...`);\r\n exitPane();\r\n }\r\n }\r\n\r\n function resetAllSettingsNotificationText() {\r\n if (multipleEdit) {\r\n return `For all selected devices: Resetting all settings and detaching them. This might take a few minutes...`;\r\n } else {\r\n return `Resetting all settings and detaching ${getDeviceAlias()}...`;\r\n }\r\n }\r\n\r\n function detachingNotificationText() {\r\n if (multipleEdit) {\r\n return 'Detaching devices from cloud...';\r\n } else {\r\n return `Detaching ${getDeviceAlias()}...`;\r\n }\r\n }\r\n\r\n function removeDeviceConfirmationResult(result, resetSettings) {\r\n set_showConfirmationRemoveDevice(false);\r\n if (result === true) {\r\n if (resetSettings) {\r\n sendToolsCommand('resetSettingsAndRestart', 'true');\r\n displayNotification(resetAllSettingsNotificationText());\r\n exitPane();\r\n\r\n setTimeout(() => {\r\n multipleEdit ? removeDevices() : removeDevice(deviceId);\r\n }, 2000);\r\n } else {\r\n displayNotification(detachingNotificationText());\r\n multipleEdit ? removeDevices() : removeDevice(deviceId);\r\n exitPane();\r\n }\r\n }\r\n }\r\n \r\n function handleDisplayRotationChange(e) {\r\n set_softRotation(Number(e.target.value));\r\n }\r\n\r\n function handleEnterpriseSecurityChange(e) {\r\n if (!networkReadOnly) {\r\n set_enterpriseSecurity(Number(e.target.value));\r\n }\r\n }\r\n\r\n function handleGuestAccessTypeChange(e) {\r\n set_guestAccessType(Number(e.target.value));\r\n }\r\n\r\n function handleToggleHotspot() {\r\n set_builtInHotspot(!builtInHotspot);\r\n }\r\n\r\n function handleToggleDisplayYourOwnNetwork() {\r\n set_displayYourOwnNetwork(!displayYourOwnNetwork)\r\n }\r\n\r\n function getIpAddress() {\r\n if (!deviceConfig || !deviceConfig.device || !deviceConfig.device.info) return '';\r\n let activeIpv4EthernetAddresses = deviceConfig.device.info.activeIpv4EthernetAddresses || deviceConfig.device.info.activeIpv4Addresses;\r\n let activeIpv4WifiAddresses = deviceConfig.device.info.activeIpv4WifiAddresses;\r\n if (Utils.hasString(activeIpv4EthernetAddresses) && activeIpv4EthernetAddresses) {\r\n return activeIpv4EthernetAddresses;\r\n } else if (Utils.hasString(activeIpv4WifiAddresses) && activeIpv4WifiAddresses) {\r\n return activeIpv4WifiAddresses;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n function saveHubData(device) {\r\n device.isInitialized = true;\r\n\r\n set_groupId(device.tags.groupId);\r\n set_initialGroupId(device.tags.groupId);\r\n\r\n if (device.config) {\r\n set_deviceConfig(device.config);\r\n console.log(\"deviceConfig:\", device.config);\r\n }\r\n set_deviceConnectionState(device.connectionState);\r\n\r\n if (device.config.v2) {\r\n const v2props = device.config.v2.device;\r\n set_homescreenLayout(v2props.homescreenLayout != null ? v2props.homescreenLayout.toString() : HOMESCREEN_FULL);\r\n set_showHowToConnect(v2props.showHowToConnect != null ? v2props.showHowToConnect : false);\r\n set_showWiFiQrCode(v2props.showQrCode != null ? v2props.showQrCode : false);\r\n set_showGuestAccessWhileInUse(v2props.showGuestAccessWhileInUse != null ? v2props.showGuestAccessWhileInUse : false);\r\n set_sessionLayout(v2props.sessionLayout != null ? v2props.sessionLayout.toString() : SESSION_DEFAULT);\r\n set_sampleRate(v2props.sampleRate != null ? v2props.sampleRate.toString() : SAMPLE_RATE_44100);\r\n set_language(v2props.language != null ? v2props.language.toString() : ENGLISH);\r\n set_clock(v2props.clock != null ? v2props.clock.toString() : HOUR_12);\r\n set_timezone(v2props.timezone != null ? v2props.timezone.toString() : UTC);\r\n } else {\r\n set_homescreenLayout(HOMESCREEN_FULL);\r\n set_showHowToConnect(false);\r\n set_showWiFiQrCode(false);\r\n set_showGuestAccessWhileInUse(false);\r\n set_sessionLayout(SESSION_DEFAULT);\r\n set_sampleRate(SAMPLE_RATE_44100);\r\n set_language(ENGLISH);\r\n set_clock(HOUR_12);\r\n set_timezone(UTC);\r\n }\r\n\r\n if (device.config.device != null) {\r\n set_name(device.config.device.name || '');\r\n set_version(device.config.device.info.version);\r\n set_checkForUpdates(device.config.device.info.checkForUpdates);\r\n set_background(device.config.device.background !== null ? device.config.device.background : '');\r\n } else {\r\n set_name('');\r\n set_version('');\r\n set_checkForUpdates(true);\r\n set_background('');\r\n }\r\n\r\n if (device.config.moderator != null) {\r\n set_moderator(device.config.moderator.enabled);\r\n } else {\r\n set_moderator(false);\r\n }\r\n\r\n if (device.config.services != null) {\r\n if (device.config.services.networkaccesscontrol != null) {\r\n set_enterpriseSecurity(device.config.services.networkaccesscontrol.login ? 1 : 0);\r\n set_enterpriseUsername(device.config.services.networkaccesscontrol.username);\r\n set_enterprisePassword(device.config.services.networkaccesscontrol.password);\r\n } else {\r\n set_enterpriseSecurity(0);\r\n set_enterpriseUsername('');\r\n set_enterprisePassword('');\r\n }\r\n\r\n if (device.config.services.hotspot != null) {\r\n if (device.config.services.hotspot.irChannels != null) {\r\n set_irChannels(device.config.services.hotspot.irChannels);\r\n }\r\n\r\n if (device.config.services.hotspot.clientIsolation != null) {\r\n set_clientIsolation(device.config.services.hotspot.clientIsolation);\r\n }\r\n\r\n set_currentFrequency(device.config.services.hotspot.interfaceInfo.frequency);\r\n set_requestedFrequency(device.config.services.hotspot.requestedFrequency);\r\n set_builtInHotspot(device.config.services.hotspot.enabled || false);\r\n set_hotspotPassword(device.config.services.hotspot.passphrase || '');\r\n\r\n if (device.config.services.hotspot.interfaceInfo != null) {\r\n set_hotspotInterfaceInfoRegdom(device.config.services.hotspot.interfaceInfo.regdom || '');\r\n set_hotspotInterfaceInfoTxPower(device.config.services.hotspot.interfaceInfo.txPower || 0);\r\n set_hotspotInterfaceInfoWidth(device.config.services.hotspot.interfaceInfo.width || '');\r\n }\r\n } else {\r\n set_irChannels([]);\r\n set_clientIsolation(false);\r\n set_currentFrequency(0);\r\n set_requestedFrequency(0);\r\n set_builtInHotspot(false);\r\n set_hotspotPassword(false);\r\n set_hotspotInterfaceInfoRegdom('');\r\n set_hotspotInterfaceInfoTxPower(0);\r\n set_hotspotInterfaceInfoWidth('');\r\n }\r\n\r\n if (device.config.services.externalwifi != null) {\r\n set_displayYourOwnNetwork(device.config.services.externalwifi.enabled || false);\r\n set_externalWifiSsid(device.config.services.externalwifi.ssid || '');\r\n set_externalWifiPassword(device.config.services.externalwifi.password || '');\r\n } else {\r\n set_displayYourOwnNetwork(false);\r\n set_externalWifiSsid('');\r\n set_externalWifiPassword('');\r\n }\r\n\r\n if (device.config.services.airplay) {\r\n set_airplayPassword(device.config.services.airplay.password);\r\n if (device.config.services.airplay.enabled) {\r\n set_airplayMode(device.config.services.airplay.authMode + 1);\r\n } else {\r\n set_airplayMode(0);\r\n }\r\n set_airplayAudioReceiver(device.config.services.airplay.audioReceiver);\r\n } else {\r\n set_airplayMode(1);\r\n set_airplayPassword('');\r\n set_airplayAudioReceiver(false);\r\n }\r\n\r\n if (device.config.services.googlecast) {\r\n if (device.config.services.googlecast.enabled) {\r\n set_googleCastMode(device.config.services.googlecast.prompt ? 2 : 1);\r\n } else {\r\n set_googleCastMode(0);\r\n }\r\n }\r\n if (device.config.services.miracast) {\r\n if (device.config.services.miracast.enabled) {\r\n set_miracastMode(device.config.services.miracast.pin ? (device.config.services.miracast.useShortPin ? 3 : 2) : 1);\r\n } else {\r\n set_miracastMode(0);\r\n }\r\n }\r\n\r\n set_automaticUpdateEnabled(device.config.services.updater ? device.config.services.updater.automaticUpdateEnabled : false);\r\n\r\n if (device.config.services.management != null) {\r\n set_sslPrivateKey(device.config.services.management.sslPrivateKey || '');\r\n set_sslCertificate(device.config.services.management.sslCertificate || '');\r\n set_enableDeviceManagement(device.config.services.management.enabled || false);\r\n set_deviceManagementPassword(device.config.services.management.adminPassword || '');\r\n } else {\r\n set_sslPrivateKey('');\r\n set_sslCertificate('');\r\n set_enableDeviceManagement(false);\r\n set_deviceManagementPassword('');\r\n }\r\n }\r\n\r\n if (device.config.network != null) {\r\n let forwardToInternet = device.config.network.forwardToInternet || false;\r\n let forwardToLAN = device.config.network.forwardToLAN || false;\r\n if (forwardToInternet === false && forwardToLAN === false) {\r\n set_guestAccessType(0);\r\n } else if (forwardToInternet === true && forwardToLAN === false) {\r\n set_guestAccessType(1);\r\n } else if (forwardToInternet === true && forwardToLAN === true) {\r\n set_guestAccessType(2);\r\n } else {\r\n set_guestAccessType(0);\r\n }\r\n\r\n set_proxyEnabled(device.config.network.proxyEnabled || false);\r\n set_proxyHostname(device.config.network.proxyHostname || '');\r\n set_proxyPort(device.config.network.proxyPort || 0);\r\n } else {\r\n set_guestAccessType(0);\r\n set_proxyEnabled(false);\r\n set_proxyHostname('');\r\n set_proxyPort(0);\r\n }\r\n\r\n if (device.config.display) {\r\n set_softRotation(device.config.display.softRotation || 0);\r\n set_displayPowerManagement(device.config.display.sleepTimerEnabled || false);\r\n set_sleepTimerMinutes(device.config.display.sleepTimerSeconds === null ? 0 : device.config.display.sleepTimerSeconds / 60);\r\n set_hdmiCecSupported(device.config.display.cecSupported);\r\n set_hdmiCecEnabled(device.config.display.cecEnabled);\r\n } else {\r\n set_softRotation(0);\r\n set_displayPowerManagement(false);\r\n set_sleepTimerMinutes(0);\r\n set_hdmiCecSupported(false);\r\n set_hdmiCecEnabled(false);\r\n }\r\n set_latestDeviceVersion(device.latestDeviceVersion);\r\n\r\n if (device.config.wifi != null) {\r\n set_wifiCountry(device.config.wifi.country ? device.config.wifi.country : '');\r\n } else {\r\n set_wifiCountry('');\r\n }\r\n\r\n if (device.config.decoder && device.config.decoder.forceLowResolution != null) {\r\n set_forceLowResolution(device.config.decoder.forceLowResolution);\r\n } else {\r\n set_forceLowResolution(false);\r\n }\r\n }\r\n\r\n function createAirServerInput()\r\n {\r\n let services = {\r\n airplay: {},\r\n googlecast: {},\r\n miracast: {},\r\n hotspot: {},\r\n externalwifi: {},\r\n management: {},\r\n updater: {},\r\n };\r\n\r\n if (services.airplay != null) {\r\n let airplayAuthMode = Number(airplayMode);\r\n if (airplayAuthMode === 0) {\r\n services.airplay.enabled = false;\r\n } else {\r\n services.airplay.enabled = true;\r\n services.airplay.authMode = airplayAuthMode - 1;\r\n }\r\n services.airplay.password = airplayPassword;\r\n if (airplayPassword === '' && airplayAuthMode === 3) {\r\n services.airplay.authMode = 0;\r\n set_airplayMode(1);\r\n }\r\n services.airplay.password = airplayPassword;\r\n services.airplay.audioReceiver = !!airplayAudioReceiver;\r\n }\r\n if (services.googlecast) {\r\n let googleCastAuthMode = Number(googleCastMode);\r\n if (googleCastAuthMode === 0) {\r\n services.googlecast.enabled = false;\r\n } else {\r\n services.googlecast.enabled = true;\r\n services.googlecast.prompt = (googleCastAuthMode === 2);\r\n }\r\n }\r\n if (services.miracast) {\r\n let miracastAuthMode = Number(miracastMode);\r\n if (miracastAuthMode === 0) {\r\n services.miracast.enabled = false;\r\n } else {\r\n services.miracast.enabled = true;\r\n services.miracast.pin = (miracastAuthMode === 2 || miracastAuthMode === 3);\r\n services.miracast.useShortPin = (miracastAuthMode === 3);\r\n }\r\n }\r\n\r\n if (services.hotspot) {\r\n services.hotspot.requestedFrequency = requestedFrequency;\r\n services.hotspot.enabled = builtInHotspot;\r\n services.hotspot.passphrase = hotspotPassword ? hotspotPassword : '';\r\n services.hotspot.clientIsolation = clientIsolation;\r\n }\r\n\r\n if (services.externalwifi) {\r\n services.externalwifi.enabled = displayYourOwnNetwork;\r\n services.externalwifi.ssid = externalWifiSsid ? externalWifiSsid : '';\r\n services.externalwifi.password = externalWifiPassword ? externalWifiPassword : '';\r\n }\r\n if (services.networkaccesscontrol) {\r\n //services.networkaccesscontrol.eapType = enterpriseSecurity === 0 ? 0 : 1;\r\n services.networkaccesscontrol.login = (enterpriseSecurity === 1);\r\n services.networkaccesscontrol.username = enterpriseUsername;\r\n services.networkaccesscontrol.password = enterprisePassword;\r\n }\r\n\r\n if (services.management) {\r\n services.management.sslPrivateKey = sslPrivateKey;\r\n services.management.sslCertificate = sslCertificate;\r\n services.management.enabled = enableDeviceManagement;\r\n if (enableDeviceManagement && deviceManagementPassword !== '') {\r\n services.management.adminPassword = deviceManagementPassword;\r\n } else {\r\n services.management.adminPassword = null;\r\n }\r\n }\r\n\r\n\r\n if (services.updater) {\r\n services.updater.automaticUpdateEnabled = automaticUpdateEnabled;\r\n }\r\n\r\n let tmpForwardToInternet = false, tmpForwardToLAN = false;\r\n if (guestAccessType === 1) {\r\n tmpForwardToInternet = true;\r\n } else if (guestAccessType === 2) {\r\n tmpForwardToInternet = true;\r\n tmpForwardToLAN = true;\r\n }\r\n\r\n let backgroundUrl = null;\r\n try {\r\n let url = new URL(background);\r\n if (url.protocol === 'http:' || url.protocol === 'https:') {\r\n backgroundUrl = url.toString();\r\n }\r\n } catch (e) { }\r\n\r\n if (deviceConfig.device.background && backgroundUrl === null) {\r\n backgroundUrl = \"\";\r\n }\r\n\r\n let config = {\r\n device: {\r\n name,\r\n info: {\r\n checkForUpdates,\r\n },\r\n background: backgroundUrl\r\n },\r\n services: services,\r\n moderator: { enabled: moderator },\r\n network: {\r\n forwardToInternet: tmpForwardToInternet,\r\n forwardToLAN: tmpForwardToLAN,\r\n proxyEnabled,\r\n proxyHostname,\r\n proxyPort: Number(proxyPort)\r\n },\r\n display: {\r\n softRotation: softRotation,\r\n sleepTimerEnabled: displayPowerManagement,\r\n cecEnabled: hdmiCecEnabled,\r\n sleepTimerSeconds: sleepTimerMinutes === 0 ? 0 : sleepTimerMinutes * 60\r\n },\r\n v2: {\r\n device: {\r\n homescreenLayout: homescreenLayout,\r\n showHowToConnect,\r\n showQrCode: showWiFiQrCode,\r\n showGuestAccessWhileInUse,\r\n sessionLayout: sessionLayout,\r\n sampleRate: sampleRate,\r\n clock: clock,\r\n timezone: timezone\r\n }\r\n },\r\n wifi: { country: wifiCountry },\r\n decoder: {\r\n forceLowResolution: forceLowResolution\r\n }\r\n };\r\n\r\n let deviceUpdate = JSON.parse(JSON.stringify(config));\r\n //console.warn(\"deviceUpdate\", JSON.stringify(deviceUpdate));\r\n while (removeDuplicates(deviceUpdate, deviceConfig));\r\n //console.log(\"update deviceComfig:\", deviceUpdate);\r\n return deviceUpdate;\r\n }\r\n\r\n function removeDuplicates(srcJson, compareJson) {\r\n let modified = false;\r\n for (const key in srcJson) {\r\n let obj = srcJson[key];\r\n if (typeof(obj) === \"object\") {\r\n if (!obj || Object.entries(obj).length === 0) {\r\n delete srcJson[key];\r\n modified = true;\r\n } else {\r\n if (Object.entries(compareJson).length !== 0) {\r\n if (removeDuplicates(obj, compareJson[key])) {\r\n modified = true;\r\n }\r\n }\r\n }\r\n } else {\r\n if (obj === compareJson[key]) {\r\n delete srcJson[key];\r\n modified = true;\r\n }\r\n }\r\n }\r\n return modified;\r\n }\r\n\r\n function callUpdateDevice(airServerInput, token, exitPaneWhenDone) {\r\n\r\n set_applyButtonText(APPLYING_TEXT);\r\n\r\n axios({\r\n url: `CloudManagement/UpdateDevice/${deviceId}`,\r\n data: { groupId: groupId, config: JSON.stringify(airServerInput) },\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'PUT'\r\n })\r\n .then(() => {\r\n if (exitPaneWhenDone) {\r\n displayNotification(`Changes are being applied to ${getDeviceAlias()}...`);\r\n exitPane();\r\n }\r\n })\r\n .catch(error => {\r\n console.error('UpdateDevice failed ', error);\r\n\r\n if (error.message.toLowerCase().includes('timeout')) {\r\n set_showTimeout(true);\r\n }\r\n if (error.message.includes('401')) {\r\n displayError('Please log in again');\r\n }\r\n exitPane();\r\n });\r\n }\r\n\r\n function putMultipleEdit(multipleDevices, token, exitPaneWhenDone) {\r\n\r\n set_applyButtonText(APPLYING_TEXT);\r\n\r\n console.log(\"multipleDevices\", multipleDevices);\r\n\r\n fetch('CloudManagement/EditMultipleDevices',\r\n {\r\n body: JSON.stringify(multipleDevices),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'PUT'\r\n })\r\n .then(response => response.json())\r\n .then(() => {\r\n if (exitPaneWhenDone) {\r\n displayNotification('Updating selected devices...');\r\n unselectDevices();\r\n exitPane();\r\n }\r\n })\r\n .catch(error => {\r\n console.error('UpdateDevice with multiple devices failed ', error);\r\n if (error.message.toLowerCase().includes('timeout')) {\r\n set_showTimeout(true);\r\n }\r\n if (error.message.includes('401')) {\r\n displayError('Please log in again');\r\n }\r\n exitPane();\r\n });\r\n\r\n return multipleDevices;\r\n }\r\n\r\n function constructDeviceAndGroupIdLists(deviceIds, groupIds) {\r\n \r\n for (let group of groups) {\r\n if (group.selected) groupIds.push(group.deviceId);\r\n for (let device of group.devices) {\r\n if (device.selected) deviceIds.push(device.deviceId);\r\n }\r\n }\r\n }\r\n\r\n function removeEmptyObjects(dict) {\r\n let modified = false;\r\n for (const key in dict) {\r\n let obj = dict[key];\r\n if (typeof (obj) === \"object\") {\r\n if (!obj || Object.entries(obj).length === 0) {\r\n delete dict[key];\r\n modified = true;\r\n } else {\r\n if (removeEmptyObjects(obj)) {\r\n modified = true;\r\n }\r\n }\r\n }\r\n }\r\n return modified;\r\n }\r\n\r\n function constructMultipleEditInput() {\r\n\r\n let config = {\r\n decoder: {},\r\n device: {},\r\n display: {},\r\n moderator: {},\r\n network: {},\r\n services: {\r\n airplay: {},\r\n externalwifi: {},\r\n googlecast: {},\r\n hotspot: {},\r\n management: {},\r\n miracast: {},\r\n networkaccesscontrol: {},\r\n updater: {},\r\n },\r\n v2: {\r\n device: {}\r\n },\r\n wifi: {},\r\n };\r\n\r\n // about\r\n if (checked_automaticUpdateEnabled) {\r\n config.services.updater.automaticUpdateEnabled = automaticUpdateEnabled;\r\n }\r\n\r\n // Personalization\r\n if (checked_background) {\r\n config.device.background = background;\r\n }\r\n if (checked_homescreenLayout) {\r\n config.v2.device.homescreenLayout = homescreenLayout;\r\n }\r\n if (checked_sessionLayout) {\r\n config.v2.device.sessionLayout = sessionLayout;\r\n }\r\n if (checked_showHowToConnect) {\r\n config.v2.device.showHowToConnect = showHowToConnect;\r\n }\r\n if (checked_showWiFiQrCode) {\r\n config.v2.device.showQrCode = showWiFiQrCode;\r\n }\r\n if (checked_showGuestAccessWhileInUse) {\r\n config.v2.device.showGuestAccessWhileInUse = showGuestAccessWhileInUse;\r\n }\r\n if (checked_displayYourOwnNetwork) {\r\n config.services.externalwifi.enabled = !!displayYourOwnNetwork;\r\n if (config.services.externalwifi.enabled && !!externalWifiSsid) {\r\n config.services.externalwifi.ssid = externalWifiSsid;\r\n config.services.externalwifi.password = externalWifiPassword;\r\n } else {\r\n set_displayYourOwnNetwork(false);\r\n }\r\n }\r\n\r\n // Screen Mirroring\r\n if (checked_airplay) {\r\n let airplayAuthMode = Number(airplayMode);\r\n if (airplayAuthMode === 0) {\r\n config.services.airplay.enabled = false;\r\n } else {\r\n config.services.airplay.enabled = true;\r\n config.services.airplay.authMode = airplayAuthMode - 1;\r\n }\r\n config.services.airplay.password = airplayPassword;\r\n if (airplayPassword === '' && airplayAuthMode === 3) {\r\n config.services.airplay.authMode = 0;\r\n set_airplayMode(1);\r\n }\r\n config.services.airplay.password = airplayPassword;\r\n }\r\n\r\n if (checked_googleCast) {\r\n let googleCastAuthMode = Number(googleCastMode);\r\n if (googleCastAuthMode === 0) {\r\n config.services.googlecast.enabled = false;\r\n } else {\r\n config.services.googlecast.enabled = true;\r\n config.services.googlecast.prompt = (googleCastAuthMode === 2);\r\n }\r\n }\r\n if (checked_miracast) {\r\n let miracastAuthMode = Number(miracastMode);\r\n if (miracastAuthMode === 0) {\r\n config.services.miracast.enabled = false;\r\n } else {\r\n config.services.miracast.enabled = true;\r\n config.services.miracast.pin = (miracastAuthMode === 2 || miracastAuthMode === 3);\r\n config.services.miracast.useShortPin = (miracastAuthMode === 3);\r\n }\r\n }\r\n\r\n // Moderator\r\n if (checked_moderator) {\r\n config.moderator.enabled = !!moderator;\r\n }\r\n\r\n // Networking\r\n //networkaccesscontrol\r\n if (checked_enterpriseSecurity) {\r\n console.log('enterpriseSecurity', enterpriseSecurity, enterpriseUsername, enterprisePassword)\r\n config.services.networkaccesscontrol.eapSecurity = enterpriseSecurity;\r\n //config.services.networkaccesscontrol.eapType = 0;\r\n config.services.networkaccesscontrol.login = enterpriseSecurity === 1;\r\n if (config.services.networkaccesscontrol.login && !!enterpriseUsername) {\r\n config.services.networkaccesscontrol.username = enterpriseUsername;\r\n config.services.networkaccesscontrol.password = enterprisePassword;\r\n } else {\r\n set_enterpriseSecurity(0);\r\n }\r\n }\r\n if (checked_proxy) {\r\n config.network.proxyEnabled = !!proxyEnabled;\r\n if (config.network.proxyEnabled && !!proxyHostname && !!proxyPort) {\r\n config.network.proxyHostname = proxyHostname;\r\n config.network.proxyPort = proxyPort;\r\n } else {\r\n set_proxyEnabled(false);\r\n }\r\n }\r\n\r\n // Guest Connectivity\r\n if (checked_builtInHotspot) {\r\n config.services.hotspot.enabled = !!builtInHotspot;\r\n //config.services.hotspot.requestedFrequency = requestedFrequency;\r\n if (checked_hotspotPassword) {\r\n config.services.hotspot.passphrase = hotspotPassword;\r\n }\r\n if (checked_clientIsolation) {\r\n config.services.hotspot.clientIsolation = !!clientIsolation;\r\n }\r\n\r\n if (checked_guestAccessType) {\r\n let tmpForwardToInternet = false, tmpForwardToLAN = false;\r\n if (guestAccessType === 1) {\r\n tmpForwardToInternet = true;\r\n } else if (guestAccessType === 2) {\r\n tmpForwardToInternet = true;\r\n tmpForwardToLAN = true;\r\n }\r\n config.network.forwardToInternet = tmpForwardToInternet;\r\n config.network.forwardToLAN = tmpForwardToLAN;\r\n }\r\n }\r\n\r\n // Audio/Video\r\n if (checked_airplayAudioReceiver) {\r\n config.services.airplay.audioReceiver = !!airplayAudioReceiver;\r\n }\r\n if (checked_forceLowResolution) {\r\n config.decoder.forceLowResolution = forceLowResolution;\r\n }\r\n if (checked_hdmiCecEnabled) {\r\n // dangerous\r\n config.display.cecEnabled = hdmiCecEnabled;\r\n }\r\n if (checked_turnDisplayOutOffWhenInactive) {\r\n config.display.sleepTimerEnabled = !!displayPowerManagement;\r\n config.display.sleepTimerSeconds = sleepTimerMinutes * 60;\r\n }\r\n if (checked_sampleRate) {\r\n config.v2.device.sampleRate = sampleRate;\r\n }\r\n if (checked_displayRotation) {\r\n config.display.softRotation = softRotation;\r\n }\r\n\r\n\r\n // Localization\r\n if (checked_country) {\r\n config.wifi.country = wifiCountry;\r\n }\r\n if (checked_language) {\r\n config.v2.device.language = language;\r\n }\r\n if (checked_clock) {\r\n config.v2.device.clock = clock;\r\n }\r\n if (checked_timezone) {\r\n config.v2.device.timezone = timezone;\r\n }\r\n\r\n // Security Tab\r\n if (checked_enableDeviceManagement) {\r\n config.services.management.enabled = !!enableDeviceManagement;\r\n if (checked_deviceManagementPassword) {\r\n config.services.management.adminPassword = deviceManagementPassword;\r\n }\r\n }\r\n if (checked_privateKeyAndCert) {\r\n config.services.management.sslPrivateKey = sslPrivateKey;\r\n config.services.management.sslCertificate = sslCertificate;\r\n }\r\n\r\n while (removeEmptyObjects(config));\r\n\r\n let retval = {\r\n deviceIds: [],\r\n groupIds: [],\r\n config: JSON.stringify(config)\r\n };\r\n\r\n constructDeviceAndGroupIdLists(retval.deviceIds, retval.groupIds);\r\n if (checked_groups) {\r\n retval.targetGroup = groupId;\r\n }\r\n console.log(\"update devices with data:\", retval);\r\n\r\n return retval;\r\n }\r\n\r\n\r\n function isUrl(text) {\r\n try {\r\n let url = new URL(text);\r\n if (url.protocol === 'http:' || url.protocol === 'https:') {\r\n return true;\r\n }\r\n } catch (e) { }\r\n return false;\r\n }\r\n\r\n function validateInput() {\r\n let valid = true;\r\n let invalidProps = [];\r\n\r\n if (background && !isUrl(background)) {\r\n // 'background' is not a valid URL.\r\n invalidProps.push('Custom Background');\r\n set_backgroundValid(false);\r\n valid = false;\r\n }\r\n if (builtInHotspot && hotspotPassword && hotspotPassword.length < 8) {\r\n invalidProps.push('Hotspot password');\r\n set_hotspotPasswordValid(false);\r\n valid = false;\r\n }\r\n if (enableDeviceManagement && deviceManagementPassword === '') {\r\n // Device Management password is empty when Device Management is enabled.\r\n invalidProps.push('Device Management password');\r\n set_deviceManagementPasswordValid(false);\r\n valid = false;\r\n }\r\n if (!multipleEdit && proxyEnabled && proxyHostname === '') {\r\n // 'proxyHostname' is not a valid URL.\r\n invalidProps.push('Proxy Hostname');\r\n set_proxyHostnameValid(false);\r\n valid = false;\r\n }\r\n\r\n if (!multipleEdit || (multipleEdit && checked_privateKeyAndCert)) {\r\n if (!sslPrivateKey || !sslCertificate) {\r\n invalidProps.push('TLS/SSL Security');\r\n valid = false;\r\n }\r\n }\r\n\r\n if (valid) {\r\n set_backgroundValid(true);\r\n set_hotspotPasswordValid(true);\r\n set_proxyHostnameValid(true);\r\n set_deviceManagementPasswordValid(true);\r\n return true;\r\n } else {\r\n displayError('Invalid input: ' + invalidProps.join(', '));\r\n return false;\r\n }\r\n }\r\n\r\n function personalizationTabColor() {\r\n return backgroundValid ? NORMAL_TAB_COLOR : ERROR_TAB_COLOR;\r\n }\r\n\r\n function networkTabColor() {\r\n return proxyHostnameValid ? NORMAL_TAB_COLOR : ERROR_TAB_COLOR;\r\n }\r\n\r\n function guestConnectivityTabColor() {\r\n return hotspotPasswordValid ? NORMAL_TAB_COLOR : ERROR_TAB_COLOR;\r\n }\r\n\r\n function normalTabColor() {\r\n return NORMAL_TAB_COLOR;\r\n }\r\n\r\n function handleApplyClick(exitPaneWhenDone = true) {\r\n if (!validateInput()) return;\r\n\r\n if (multipleEdit) {\r\n\r\n const multipleDevices = constructMultipleEditInput();\r\n\r\n authService.getAccessToken()\r\n .then(token => {\r\n putMultipleEdit(multipleDevices, token, exitPaneWhenDone);\r\n })\r\n } else {\r\n\r\n let airServerInput = createAirServerInput();\r\n if (Object.entries(airServerInput).length === 0 && initialGroupId === groupId) {\r\n console.warn(\"nothing up update...\", airServerInput);\r\n if (exitPaneWhenDone) {\r\n exitPane();\r\n }\r\n return;\r\n }\r\n\r\n console.log(\"update deviceConfig:\", airServerInput);\r\n\r\n // Updating a device's properties:\r\n authService.getAccessToken()\r\n .then(token =>\r\n callUpdateDevice(airServerInput, token, exitPaneWhenDone)\r\n );\r\n }\r\n }\r\n\r\n function exitPane() {\r\n // set_name('');\r\n set_applyButtonText(APPLY_TEXT);\r\n set_upperChannelsClicked(false);\r\n\r\n // set_version('');\r\n // set_checkForUpdates(false);\r\n // set_services(initialServiceSettings());\r\n // set_moderator(false);\r\n // set_background('');\r\n // set_backgroundValid(true);\r\n // set_hotspotPasswordValid(true);\r\n // set_deviceManagementPasswordValid(true);\r\n // set_proxyHostnameValid(true);\r\n // set_enterpriseSecurity(0);\r\n // set_enterpriseUsername('');\r\n // set_enterprisePassword('');\r\n // set_proxyEnabled(false);\r\n // set_proxyHostname('');\r\n // set_proxyPort(0);\r\n // set_builtInHotspot(false);\r\n // set_displayYourOwnNetwork(false);\r\n // set_externalWifiSsid('');\r\n // set_externalWifiPassword('');\r\n // set_selectAirplayAuthMode('0');\r\n // set_selectMiracastAuthMode('0');\r\n // set_selectGoogleCastAuthMode('0');\r\n // set_airplayPw('');\r\n // set_softRotation(0);\r\n // set_displayPowerManagement(false);\r\n // set_sleepTimerMinutes(0);\r\n // set_groupName('');\r\n // set_groupId(groups.length > 0 ? groups[0].deviceId : '');\r\n // set_enableDeviceManagement(false);\r\n // set_deviceManagementPassword('');\r\n // set_automaticUpdateEnabled(false);\r\n // set_sslPrivateKey('');\r\n // set_sslCertificate('');\r\n // set_accessType(0);\r\n // set_dhcpRange(0);\r\n // set_currentChannel(99);\r\n // set_requestedChannel('Auto');\r\n // set_hotspotPassword('');\r\n // set_irChannels([]);\r\n // set_requestedNoGoFrequencies(NO_UPPER_5GHZ_CHANNELS);\r\n // set_clientIsolation(false);\r\n\r\n // set_hotspotInterfaceInfoRegdom('');\r\n // set_hotspotInterfaceInfoTxPower(0);\r\n // set_hotspotInterfaceInfoWidth('');\r\n\r\n // set_numRedCrosses(0);\r\n\t\t//set_latestDeviceVersion('');\r\n\r\n // set_wifiCountry('us');\r\n\r\n // set_homescreenLayout(HOMESCREEN_FULL);\r\n // set_sessionLayout(SESSION_DEFAULT);\r\n // set_showHowToConnect(false);\r\n // set_showWiFiQrCode(false);\r\n // set_showGuestAccessWhileInUse(false);\r\n // set_sampleRate(SAMPLE_RATE_44100);\r\n\r\n // set_language(ENGLISH);\r\n // set_clock(HOUR_12);\r\n // set_timezone(UTC_MINUS_12_00);\r\n\r\n setChecked_airplay(false);\r\n setChecked_airplayAudioReceiver(false);\r\n setChecked_automaticUpdateEnabled(false);\r\n setChecked_background(false);\r\n setChecked_builtInHotspot(false);\r\n setChecked_clock(false);\r\n setChecked_country(false);\r\n setChecked_deviceManagementPassword(false);\r\n setChecked_displayRotation(false);\r\n setChecked_displayYourOwnNetwork(false);\r\n setChecked_enableDeviceManagement(false);\r\n setChecked_forceLowResolution(false);\r\n setChecked_googleCast(false);\r\n setChecked_groups(false);\r\n setChecked_guestAccessType(false);\r\n setChecked_hdmiCecEnabled(false);\r\n setChecked_homescreenLayout(false);\r\n setChecked_hotspotPassword(false);\r\n setChecked_language(false);\r\n setChecked_miracast(false);\r\n setChecked_moderator(false);\r\n setChecked_privateKeyAndCert(false);\r\n setChecked_proxy(false);\r\n setChecked_sampleRate(false);\r\n setChecked_enterpriseSecurity(false);\r\n setChecked_sessionLayout(false);\r\n setChecked_showGuestAccessWhileInUse(false);\r\n setChecked_showHowToConnect(false);\r\n setChecked_showWiFiQrCode(false);\r\n setChecked_timezone(false);\r\n setChecked_turnDisplayOutOffWhenInactive(false);\r\n\r\n closeDetailsPane();\r\n }\r\n\r\n // Methods that change the boolean values but also call 'changeRedCrossCount()' so the APPLY button is only enabled if the user has checked at least one change:\r\n const handle_setChecked_airplay = (val) => { setChecked_airplay(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_airplayAudioReceiver = (val) => { setChecked_airplayAudioReceiver(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_automaticUpdateEnabled = (val) => { setChecked_automaticUpdateEnabled(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_background = (val) => { setChecked_background(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_builtInHotspot = (val) => { setChecked_builtInHotspot(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_clock = (val) => { setChecked_clock(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_country = (val) => { setChecked_country(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_deviceManagementPassword = (val) => { setChecked_deviceManagementPassword(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_displayRotation = (val) => { setChecked_displayRotation(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_displayYourOwnNetwork = (val) => { setChecked_displayYourOwnNetwork(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_enableDeviceManagement = (val) => { setChecked_enableDeviceManagement(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_forceLowResolution = (val) => { setChecked_forceLowResolution(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_googleCast = (val) => { setChecked_googleCast(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_groups = (val) => { setChecked_groups(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_guestAccessType = (val) => { setChecked_guestAccessType(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_hdmiCecEnabled = (val) => { setChecked_hdmiCecEnabled(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_homescreenLayout = (val) => { setChecked_homescreenLayout(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_language = (val) => { setChecked_language(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_miracast = (val) => { setChecked_miracast(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_moderator = (val) => { setChecked_moderator(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_privateKeyAndCert = (val) => { setChecked_privateKeyAndCert(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_proxy = (val) => { setChecked_proxy(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_sampleRate = (val) => { setChecked_sampleRate(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_enterpriseSecurity = (val) => { setChecked_enterpriseSecurity(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_sessionLayout = (val) => { setChecked_sessionLayout(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_showGuestAccessWhileInUse = (val) => { setChecked_showGuestAccessWhileInUse(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_showHowToConnect = (val) => { setChecked_showHowToConnect(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_showWiFiQrCode = (val) => { setChecked_showWiFiQrCode(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_timezone = (val) => { setChecked_timezone(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_turnDisplayOutOffWhenInactive = (val) => { setChecked_turnDisplayOutOffWhenInactive(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_upper5g = (val) => { setChecked_upper5g(val); changeRedCrossCount(val ? 1 : -1); }\r\n const handle_setChecked_clientIsolation = (val) => { setChecked_clientIsolation(val); changeRedCrossCount(val ? 1 : -1); }\r\n\r\n function sendToolsCommand(attribute, value, notifyWhenDone = false) {\r\n let uri = null, body = null;\r\n\r\n if (multipleEdit) {\r\n const toggleMultipleInput = {\r\n deviceIds: [],\r\n groupIds: [],\r\n attributeName: attribute,\r\n attributeValue: value,\r\n type: 'bool'\r\n };\r\n constructDeviceAndGroupIdLists(toggleMultipleInput.deviceIds, toggleMultipleInput.groupIds);\r\n\r\n uri = 'CloudManagement/ToggleAttributeMultiple';\r\n body = JSON.stringify(toggleMultipleInput);\r\n } else {\r\n uri = `CloudManagement/ToggleAttribute/${deviceId}`;\r\n body = JSON.stringify({name: attribute, value, type: 'bool'});\r\n }\r\n\r\n authService.getAccessToken()\r\n .then(token =>\r\n fetch(uri,\r\n {\r\n body,\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'PUT'\r\n })\r\n )\r\n .then(() => {\r\n if (notifyWhenDone === true) {\r\n //setShowNotificationState();\r\n displayNotification(`Command sent to device${multipleEdit ? 's' : ''}`);\r\n }\r\n })\r\n .catch((errorMsg) => {\r\n console.log(`ToggleAttribute returned error: ${errorMsg}`);\r\n });\r\n }\r\n\r\n function isValidNumber(value) {\r\n if ((Utils.isNumeric(value) && value.length < 7 && value.length > 0 && !value.includes('.')) || value === '') {\r\n return true;\r\n }\r\n }\r\n\r\n function handleProxyPortChange(value) {\r\n if (isValidNumber(value)) {\r\n set_proxyPort(value);\r\n }\r\n }\r\n\r\n function changeSelectedGroup(e) {\r\n set_groupId(e.target.value);\r\n }\r\n\r\n function handleChangeName(e) {\r\n const value = e.target.value;\r\n set_name(value ? value.substr(0, 32) : '');\r\n }\r\n\r\n function handleChangeBackground(value) {\r\n set_background(value ? value : '');\r\n set_backgroundValid(true);\r\n }\r\n\r\n function handleChangeDeviceManagementPassword(value) {\r\n set_deviceManagementPassword(value ? value : '');\r\n set_deviceManagementPasswordValid(true);\r\n }\r\n\r\n function handleChangeProxyHostname(value) {\r\n set_proxyHostname(value ? value : '');\r\n set_proxyHostnameValid(true);\r\n }\r\n\r\n function handleSetHotspotPassword(value) {\r\n if (value.length <= 32) {\r\n set_hotspotPassword(value ? value : '');\r\n set_hotspotPasswordValid(true);\r\n }\r\n }\r\n\r\n function isDisconnected() {\r\n return deviceConnectionState === DISCONNECTED;\r\n }\r\n\r\n function detailsPaneClass() {\r\n if (isDisconnected()) {\r\n return 'show disconnected';\r\n } else if (applyButtonText === APPLYING_TEXT) {\r\n return 'showAndWait';\r\n } else {\r\n return 'show';\r\n }\r\n }\r\n\r\n function detailsPaneHeader() {\r\n if (multipleEdit) {\r\n return (

Edit Multiple Devices

);\r\n }\r\n let ip = getIpAddress();\r\n if (ip) {\r\n return (

{name} ({ip})

);\r\n } else {\r\n return (

{name}

);\r\n }\r\n }\r\n\r\n function getDeviceAlias() {\r\n let deviceName = name;\r\n if (!deviceName) {\r\n deviceName = deviceId;\r\n }\r\n let ip = getIpAddress();\r\n if (ip) {\r\n return `${deviceName} (${ip})`;\r\n } else {\r\n return deviceName;\r\n }\r\n }\r\n\r\n function changeRedCrossCount(delta) {\r\n set_numRedCrosses(numRedCrosses + delta);\r\n }\r\n\r\n function applyButtonDisabled() {\r\n return applyButtonText === APPLYING_TEXT || (multipleEdit && numRedCrosses === 0) ?true : false;\r\n }\r\n\r\n\tfunction showEndSessionConfirmation() {\r\n set_showConfirmationEndSession(true);\r\n }\r\n\r\n if (!paneVisible) {\r\n if (!loading) set_loading(true);\r\n\r\n return (\r\n
\r\n
);\r\n }\r\n\r\n if (loading && !multipleEdit) {\r\n if (!sentFetch) {\r\n authService.getAccessToken()\r\n .then(token => axios.get(`CloudManagement/GetDeviceDetails/${deviceId}`, { headers: !token ? {} : { 'Authorization': `Bearer ${token}` }, timeout: DETAILPAGE_TIMEOUT }))\r\n .then(response => {\r\n return response.data;\r\n })\r\n .then(data => {\r\n saveHubData(data);\r\n set_loading(false);\r\n set_sentFetch(false);\r\n })\r\n .catch(error => {\r\n console.log('Fetching detail returned error: ' + error);\r\n\r\n if (error.message.includes('401')) {\r\n // Close Details pane and show a notification that the user should log in again:\r\n displayError('Please log in again');\r\n exitPane();\r\n }\r\n\r\n set_loading(false);\r\n set_sentFetch(false);\r\n if (error.message.toLowerCase().includes('timeout loading device details')) {\r\n set_showTimeout(true);\r\n exitPane();\r\n }\r\n });\r\n\r\n set_sentFetch(true);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
);\r\n } else {\r\n if (loading && multipleEdit) {\r\n set_loading(false);\r\n set_airplayMode(1);\r\n set_googleCastMode(1);\r\n set_miracastMode(1);\r\n }\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {\r\n detailsPaneHeader()\r\n }\r\n \r\n \r\n \r\n \r\n {\r\n applyButtonText === APPLYING_TEXT ? null : (\r\n \r\n )\r\n }\r\n\r\n {\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/*Device Management*/}\r\n {' '}} eventKey=\"DeviceManagement\">\r\n \r\n \r\n\r\n {/*About*/}\r\n {' '}} eventKey=\"About\">\r\n \r\n \r\n \r\n {/*Personalization*/}\r\n {' '}} eventKey=\"Personalization\">\r\n \r\n \r\n\r\n {/*Screen Mirroring*/}\r\n {' '}} eventKey=\"ScreenMirroring\">\r\n \r\n \r\n\r\n {/*Moderator Mode*/}\r\n {' '}} eventKey=\"ModeratorMode\">\r\n \r\n \r\n\r\n {/*Network*/}\r\n {' '}} eventKey=\"Network\">\r\n \r\n \r\n\r\n {/*Guest Connectivity*/}\r\n {' '}} eventKey=\"GuestConnectivity\">\r\n \r\n \r\n\r\n {/*Audio and Video*/}\r\n {' '}} eventKey=\"AudioAndVideo\">\r\n \r\n \r\n\r\n {/*Localization*/}\r\n {' '}} eventKey=\"Localization\">\r\n \r\n \r\n\r\n {/*Security*/}\r\n {' '}} eventKey=\"Security\">\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Button, Container, Col, Row, Form } from 'react-bootstrap';\r\nimport '../main.css';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nexport default function CreateGroupPane({ paneVisible, closeCreateGroupPane, displayNotification, displayError }) {\r\n const [groupName, set_groupName] = useState('');\r\n\r\n function handleCreateGroupClick() {\r\n let groupDeviceId = uuidv4();\r\n\r\n authService.getAccessToken()\r\n .then(token =>\r\n fetch(`CloudManagement/CreateGroup`,\r\n {\r\n body: JSON.stringify({ deviceId: groupDeviceId, groupName }),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'POST'\r\n })\r\n )\r\n .then(response => response.json())\r\n .then(data => {\r\n console.log(`CreateGroup returned: '${JSON.stringify(data)}'`);\r\n if (data.status !== undefined && data.status !== null) {\r\n if (data.status === 409) {\r\n displayError('Group already exists');\r\n closeCreateGroupPane();\r\n return;\r\n } else if (data.status === 401) {\r\n handleUnauthorized();\r\n return;\r\n }\r\n }\r\n\r\n if (data && data === '409') {\r\n displayError(`${groupName} already exists`);\r\n closeCreateGroupPane();\r\n set_groupName('');\r\n return;\r\n }\r\n\r\n closeCreateGroupPane();\r\n displayNotification(`Creating ${groupName}...`);\r\n set_groupName('');\r\n })\r\n .catch(error => {\r\n if (error.message.includes('401')) {\r\n handleUnauthorized();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n function handleUnauthorized() {\r\n // Close Create Group pane and show a notification that the user should log in again:\r\n displayError('Please log in again');\r\n set_groupName('');\r\n closeCreateGroupPane();\r\n }\r\n\r\n function handleCreateGroupCancel() {\r\n set_groupName('');\r\n closeCreateGroupPane();\r\n }\r\n\r\n function handleGroupNameChange(e) {\r\n set_groupName(e.target.value);\r\n }\r\n\r\n function handleGroupNameKeyPress(e) {\r\n var code = e.keyCode || e.which;\r\n if (code === 13) { //13 is the enter keycode\r\n handleCreateGroupClick();\r\n }\r\n }\r\n\r\n if (!paneVisible) {\r\n return (\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n

Create Group

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Button, Container, Col, Row, Form } from 'react-bootstrap';\r\nimport axios from 'axios';\r\nimport '../main.css';\r\nimport { cloneDeep } from 'lodash';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport Utils from './Utils';\r\n\r\nexport default function AddDevicePane({ paneVisible, groups, set_groups, closeAddDevicePane, displayError }) {\r\n const [cloudToken, set_cloudToken] = useState('');\r\n const [groupId, set_groupId] = useState('');\r\n\r\n function handleCloudTokenChanged(value) {\r\n if ((Utils.isNumeric(value) || value === '') && !value.includes('.') && !value.includes(',')) {\r\n set_cloudToken(value);\r\n }\r\n }\r\n\r\n function handleCloudTokenKeyPress(e) {\r\n var code = e.keyCode || e.which;\r\n if (code === 13) { //13 is the enter keycode\r\n handleApplyClick();\r\n }\r\n }\r\n\r\n function handleApplyClick() {\r\n authService.getAccessToken()\r\n .then(authToken => {\r\n callAdoptDevice(authToken);\r\n });\r\n }\r\n\r\n function closePane() {\r\n set_cloudToken('');\r\n set_groupId('');\r\n closeAddDevicePane();\r\n }\r\n\r\n function callAdoptDevice(authToken) {\r\n let chosenGroup = groupId || groups[0].deviceId;\r\n let adoptInput = { cloudToken, groupId: chosenGroup };\r\n\r\n axios.post(`CloudManagement/AdoptDevice`, adoptInput, { headers: !authToken ? {} : { 'Authorization': `Bearer ${authToken}` } })\r\n .then(response => {\r\n try {\r\n console.log('AdoptDevice returned: ', response.data);\r\n let device = response.data;\r\n let group = groups.find(g => g.deviceId === device.tags.groupId);\r\n if (group) {\r\n const deviceIndex = group.devices.findIndex(d => d.deviceId === device.deviceId);\r\n if (deviceIndex === -1) {\r\n device.config = {\r\n device: { name: cloudToken },\r\n services: {},\r\n };\r\n group.devices.push(device);\r\n set_groups(cloneDeep(groups));\r\n }\r\n }\r\n closePane();\r\n } catch (e) {\r\n console.error(\"error in adopting device\", e)\r\n }\r\n })\r\n .catch(error => {\r\n console.error('AdoptDevice returned an error: ' + JSON.stringify(error));\r\n if (error.message.includes('401')) {\r\n displayError('Please log in again');\r\n } else if (error.message.includes('404')) {\r\n displayError(`Could not locate the device using token: ${cloudToken}. Please validate the token and try again.`);\r\n } else {\r\n displayError(\"Unexpected error occurred: \" + error.message);\r\n }\r\n\r\n closePane();\r\n }\r\n );\r\n\r\n }\r\n\r\n if (!paneVisible) {\r\n return (\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n {/*Header and buttons*/}\r\n \r\n \r\n

Attach Device to Cloud

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n {/*Cloud token*/}\r\n \r\n \r\n Cloud Token\r\n { handleCloudTokenChanged(e.target.value) }} onKeyPress={handleCloudTokenKeyPress} maxLength='8' className='cloudTokenTextBox' />\r\n \r\n \r\n\r\n {/*Group list*/}\r\n \r\n \r\n Group\r\n set_groupId(e.target.value)}>\r\n {groups.map(group => )}\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n background-color: ${props => props.backgroundColor};\r\n color: ${props => props.color};\r\n padding: 16px;\r\n position: absolute;\r\n bottom: ${props => props.shift}px;\r\n left: ${props => props.left};\r\n margin: 0 auto;\r\n z-index: 999;\r\n transition: bottom 1.0s ease;\r\n border-radius: 5px;\r\n width: ${props => props.width};\r\n`;\r\n\r\nexport default function Notification({ msg, showNotification, set_showNotification, type = 'info', left = '35%', duration = 5000, width = null }) { // 'type' can also be 'error'\r\n const distance = 550;//140; // 550 is good for the main screen.\r\n const [shift, set_shift] = useState(-distance);\r\n const [showing, set_showing] = useState(false);\r\n const [timeout, set_timeout] = useState(-1);\r\n\r\n const color = type === 'error' ? 'white' : 'black';\r\n const backgroundColor = type === 'error' ? 'darkred' : 'whitesmoke';\r\n\r\n //const myWidth = type === 'error' ? 'auto' : '250px';\r\n let myWidth = '250px';\r\n if (type === 'error') {\r\n if (width === null) {\r\n myWidth = 'auto';\r\n } else {\r\n myWidth = width;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n return function cleanup() {\r\n if (timeout !== -1) {\r\n clearTimeout(timeout);\r\n }\r\n }\r\n }, [timeout]);\r\n\r\n if (showNotification && !showing) {\r\n set_shift(distance / 8);\r\n set_showNotification(false);\r\n set_showing(true);\r\n\r\n let t = setTimeout(() => {\r\n set_shift(-distance);\r\n set_showing(false);\r\n }, duration);\r\n\r\n set_timeout(t);\r\n }\r\n\r\n return (\r\n {msg}\r\n );\r\n}\r\n","import React, { useState, useEffect, Fragment, useCallback } from 'react';\r\nimport { Container, Row, Col, Form } from 'react-bootstrap';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport '../main.css';\r\nimport AirServerList from './AirServerList';\r\nimport { Redirect } from 'react-router';\r\nimport { ApplicationPaths } from './api-authorization/ApiAuthorizationConstants';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCaretDown, faCaretLeft, faTrashAlt, faPen } from '@fortawesome/pro-regular-svg-icons';\r\nimport DetailsPane from './DetailsPane';\r\nimport CreateGroupPane from './CreateGroupPane';\r\nimport AddDevicePane from './AddDevicePane';\r\nimport ConfirmationDialog from './ConfirmationDialog';\r\nimport Notification from './Notification';\r\nimport { Tooltip, } from 'react-tippy';\r\nimport axios from 'axios';\r\nimport { cloneDeep } from 'lodash';\r\nimport { HubConnectionBuilder } from '@microsoft/signalr';\r\nimport { HubConnectionState } from '@microsoft/signalr';\r\nimport \"react-loader-spinner/dist/loader/css/react-spinner-loader.css\"\r\nimport Loader from 'react-loader-spinner'\r\nimport { ToastContainer, toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nexport default function MainPage({ detailsPaneVisible, createGroupPaneVisible, addingDevice, closeDetailsPane, openDetailsPane, selectedDeviceId, closeCreateGroupPane, handleNumSelectedDevices, multipleEdit,\r\n online, closeAddDevicePane, canManageUsers, numGroups }) {\r\n\r\n const [orgName] = useState(null);\r\n\tconst [groups, set_groups] = useState(null);\r\n const [loading, set_loading] = useState(false);\r\n const [redirect, set_redirect] = useState(false);\r\n\r\n const [showRemoveGroupConfirmation, set_showRemoveGroupConfirmation] = useState(false);\r\n const [removeGroupConfirmationText, set_removeGroupConfirmationText] = useState('');\r\n\r\n const [groupIdForRemoval, set_groupIdForRemoval] = useState('');\r\n const [groupNameForRemoval, set_groupNameForRemoval] = useState('');\r\n const [groupIdForRenaming, set_groupIdForRenaming] = useState(null);\r\n const [newGroupName, set_newGroupName] = useState('');\r\n\r\n const [showTimeout, set_showTimeout] = useState(false);\r\n\r\n const MAINPAGE_TIMEOUT = 60000; // Timeout in milliseconds.\r\n const [hubConnection, set_hubConnection] = useState(null);\r\n\r\n useEffect(() => {\r\n if (groups === null && !loading) {\r\n fetchGroups();\r\n }\r\n numGroups(groups ? groups.length : 0);\r\n }, [groups, loading]);\r\n\r\n useEffect(() => {\r\n const SECOND = 1000;\r\n const MINUTE = 60 * SECOND;\r\n const HOUR = 60 * MINUTE;\r\n const DAY = 24 * HOUR;\r\n\r\n //let hubConnection = hubConn.current;\r\n\r\n //if (hubConnection) {\r\n // console.log('Garbage collect old Notification server connection before attempting a new one');\r\n // hubConnection.stop();\r\n //}\r\n\r\n const connection = new HubConnectionBuilder()\r\n .withUrl(\"/signalrhub\", {\r\n accessTokenFactory: () => {\r\n return authService.getAccessToken();\r\n }\r\n })\r\n .withAutomaticReconnect([\r\n 0,\r\n 2 * SECOND,\r\n 10 * SECOND,\r\n 30 * SECOND, 30 * SECOND, 30 * SECOND, 30 * SECOND, 30 * SECOND, 30 * SECOND,\r\n 1 * MINUTE, 1 * MINUTE, 1 * MINUTE,\r\n 1 * HOUR, 1 * HOUR, 1 * HOUR,\r\n 6 * HOUR, 6 * HOUR, 6 * HOUR,\r\n 1 * DAY, 1 * DAY, 1 * DAY])\r\n .build();\r\n\r\n connection.serverTimeoutInMilliseconds = 2 * 60 * 1000; // 2 minutes.\r\n set_hubConnection(connection);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (hubConnection && groups && hubConnection.state === HubConnectionState.Disconnected) {\r\n hubConnection\r\n .start()\r\n .then(() => {\r\n hubConnection.on('DeviceChanged', (deviceId, update) => {\r\n console.debug(\"DeviceChanged\", deviceId, update);\r\n function isObject(item) {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n function mergeDeep(target, source) {\r\n let output = Object.assign({}, target);\r\n if (isObject(target) && isObject(source)) {\r\n Object.keys(source).forEach(key => {\r\n if (isObject(source[key])) {\r\n if (!(key in target))\r\n Object.assign(output, { [key]: source[key] });\r\n else\r\n output[key] = mergeDeep(target[key], source[key]);\r\n } else {\r\n Object.assign(output, { [key]: source[key] });\r\n }\r\n });\r\n }\r\n return output;\r\n }\r\n\r\n try {\r\n const twin = JSON.parse(update);\r\n if (!twin) return;\r\n if (twin.tags) {\r\n const twinIsGroup = twin.tags.deviceType === 'Group';\r\n if (twinIsGroup) {\r\n // group action\r\n twin.tags.groupId = deviceId;\r\n }\r\n const groupId = twin.tags.groupId;\r\n const group = groups.find(g => g.deviceId === groupId);\r\n if (group) {\r\n console.log(\"group found for device:\", group.groupName);\r\n if (twinIsGroup) {\r\n if (!twin.deviceId) {\r\n let groupIndex = groups.findIndex(g => g.deviceId === deviceId);\r\n groups.splice(groupIndex, 1);\r\n } else {\r\n group.groupName = twin.tags.groupName;\r\n }\r\n } else {\r\n let deviceIndex = group.devices.findIndex(d => d.deviceId === deviceId);\r\n if (deviceIndex !== -1) {\r\n let device = group.devices[deviceIndex];\r\n //console.log(\"exisiting device found:\", device.config.device.name);\r\n device = mergeDeep(device, twin);\r\n group.devices[deviceIndex] = device;\r\n } else /*if (twin.config)*/ {\r\n //console.log(\"new device added\", twin);\r\n if (twinIsGroup && (!twin.config || !twin.config.device)) {\r\n return;\r\n }\r\n let device = twin;\r\n // might have been moved\r\n for (let oldGroup of groups) {\r\n if (oldGroup.deviceId === groupId) {\r\n continue;\r\n }\r\n console.debug(`checking group ${oldGroup.groupName}, ${oldGroup.deviceId}, for device: ${deviceId}`);\r\n const oldIndex = oldGroup.devices.findIndex(d => d.deviceId === deviceId);\r\n if (oldIndex !== -1) {\r\n let oldDevice = oldGroup.devices.splice(oldIndex, 1)[0];\r\n device = mergeDeep(oldDevice, twin);\r\n console.debug(\"removing from older group\", oldGroup.groupName);\r\n break;\r\n }\r\n }\r\n group.devices.push(device);\r\n }\r\n }\r\n } else {\r\n if (twin.deviceId == null) {\r\n console.log(`device: ${deviceId} removed`);\r\n for (let group of groups) {\r\n const deviceIndex = group.devices.findIndex(d => d.deviceId === deviceId);\r\n if (deviceIndex !== -1) {\r\n group.devices.splice(deviceIndex, 1);\r\n break;\r\n }\r\n }\r\n } else {\r\n // group added, and updated\r\n console.log(`group: ${twin.tags.groupName} added`);\r\n const group = { deviceId: deviceId, groupName: twin.tags.groupName, devices: [], selected: false };\r\n groups.push(group);\r\n }\r\n }\r\n const newGroups = cloneDeep(groups);\r\n set_groups(newGroups);\r\n } else if (twin.connectionState) {\r\n for (let group of groups) {\r\n let device = group.devices.find(d => d.deviceId === deviceId);\r\n if (device) {\r\n if (device.connectionState !== twin.connectionState) {\r\n console.debug(`updating connectionState from ${device.connectionState} to ${twin.connectionState}`);\r\n device.connectionState = twin.connectionState;\r\n set_groups(cloneDeep(groups));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n } catch (e) {\r\n console.error(\"parsing deviceUpdate error\", e);\r\n }\r\n });\r\n\r\n hubConnection.onclose(function () {\r\n console.log('Notification server disconnected');\r\n });\r\n }\r\n )\r\n .catch(err => {\r\n console.log('Error while establishing connection. ' + JSON.stringify(err));\r\n });\r\n }\r\n\r\n }, [hubConnection, groups]);\r\n\r\n // MAIN PAGE SIGNALR NOTIFICATION SECTION DONE.\r\n\r\n\r\n\r\n //const pageTabSelectedAndNotMinimized = usePageVisibility();\r\n\r\n const displayNotification = (str) => {\r\n toast.info(str);\r\n }\r\n\r\n const displayError = (str) => {\r\n toast.error(str);\r\n }\r\n\r\n function closeMyDetailsPane() {\r\n closeDetailsPane();\r\n }\r\n\r\n function unselectDevices() {\r\n let tempGroups = [...groups]; // Shallow copy groups to trigger re-render with the call to set_groups() below.\r\n for (let group of tempGroups) {\r\n group.selected = false;\r\n for (let device of group.devices) {\r\n device.selected = false;\r\n }\r\n }\r\n set_groups(tempGroups);\r\n handleNumSelectedDevices(0);\r\n }\r\n\r\n const initGroups = useCallback((data) => {\r\n\r\n for (let group of data) {\r\n group.selected = false; // Add this new attribute.\r\n for (let device of group.devices) {\r\n device.selected = false; // Add this new attribute.\r\n }\r\n }\r\n set_groups(data);\r\n }, []);\r\n\r\n function removeGroupClick(groupId, group) {\r\n if (group.devices.length > 0) {\r\n set_removeGroupConfirmationText('This group contains devices. Removing the group will also detach its devices from Cloud Management. Please confirm.');\r\n } else {\r\n set_removeGroupConfirmationText('Are you sure you want to remove the group?');\r\n }\r\n\r\n set_showRemoveGroupConfirmation(true);\r\n set_groupIdForRemoval(groupId);\r\n set_groupNameForRemoval(group.groupName);\r\n }\r\n\r\n function removeGroupConfirmationResult(result) {\r\n set_showRemoveGroupConfirmation(false);\r\n if (result === true) {\r\n removeGroup(groupIdForRemoval)\r\n }\r\n set_groupIdForRemoval('');\r\n set_groupNameForRemoval('');\r\n }\r\n\r\n function startRenamingGroup(deviceId, groupName) {\r\n set_groupIdForRenaming(deviceId);\r\n set_newGroupName(groupName);\r\n }\r\n\r\n function fetchGroups() {\r\n if (showTimeout === true) return;\r\n\t\tauthService.getAccessToken()\r\n .then(token => {\r\n set_showTimeout(false);\r\n let promise = axios.get(`CloudManagement/GetMainList`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n timeout: MAINPAGE_TIMEOUT\r\n });\r\n online(true);\r\n return promise;\r\n })\r\n .then(response => {\r\n if (response.status === 401) { // Unauthorized.\r\n set_redirect(true);\r\n } else {\r\n handleNumSelectedDevices(0);\r\n return response.data;\r\n }\r\n })\r\n .then(data => {\r\n initGroups(data);\r\n set_loading(false);\r\n })\r\n .catch((error) => {\r\n if (error.message.includes('401')) { // Unauthorized.\r\n console.log('Logged out due to inactivity. Logging in again...');\r\n set_redirect(true);\r\n } else if (error.message.toLowerCase().includes('timeout')) {\r\n console.log('showTimeout fetching data on the main page');\r\n set_loading(false);\r\n\r\n set_groups([]);\r\n set_showTimeout(true);\r\n } else if (error.message === '404') {\r\n\t\t\t\tconsole.log('Organization Id not found from user id. Check the AspNetUsers table');\r\n\t\t\t\tset_loading(false);\r\n\r\n\t\t\t\tset_groups([]);\r\n\t\t\t\tdisplayError(\"Your user doesn't belong to any organization. Please check with administrator for help.\")\r\n\t\t\t}\r\n });\r\n\r\n set_loading(true);\r\n }\r\n\r\n function isDeviceChecked(deviceId) {\r\n for (let group of groups) {\r\n let device = group.devices.find(d => d.deviceId === deviceId);\r\n if (device !== undefined) {\r\n return device.selected;\r\n }\r\n }\r\n // Should not get here but return undefined:\r\n return undefined;\r\n }\r\n\r\n function handleDeviceCheckChange(deviceId) {\r\n let temp = [...groups]; // Shallow copy groups to trigger re-render with the call to set_groups() below.\r\n\r\n for (let group of groups) {\r\n let device = group.devices.find(d => d.deviceId === deviceId);\r\n if (device !== undefined) {\r\n device.selected = !device.selected; // We should get here at some point.\r\n\r\n if (device.selected) {\r\n // If all the devices in the group are selected, also select the group.\r\n // So, if there is no other device in the group that's unselected, select the group:\r\n let foundDevice = group.devices.find(d => !d.selected && d.deviceId !== device.config.deviceId);\r\n if (!foundDevice) {\r\n //console.log('Setting group to selected');\r\n\r\n group.selected = true;\r\n }\r\n } else {\r\n // At least this device in the group is not selected so, unselect the group also:\r\n group.selected = false;\r\n }\r\n\r\n set_groups(temp);\r\n break;\r\n }\r\n }\r\n\r\n handleNumSelectedDevices(countSelectedDevices());\r\n }\r\n\r\n function isGroupChecked(groupId) {\r\n let retval = groups.find(g => g.deviceId === groupId).selected;\r\n if (retval === undefined) {\r\n retval = false;\r\n }\r\n return retval;\r\n }\r\n\r\n function handleGroupCheckChange(groupId) {\r\n let temp = [...groups]; // Shallow copy groups to trigger re-render with the call to set_groups() below.\r\n\r\n const group = groups.find(g => g.deviceId === groupId);\r\n group.selected = !group.selected;\r\n\r\n // Selecting or unselecting a group will do the same for all its devices:\r\n for (let device of group.devices) {\r\n device.selected = group.selected;\r\n }\r\n\r\n set_groups(temp);\r\n\r\n handleNumSelectedDevices(countSelectedDevices());\r\n }\r\n\r\n function removeGroup(groupId) {\r\n let uri = `CloudManagement/RemoveGroup`;\r\n\r\n authService.getAccessToken()\r\n .then(token =>\r\n fetch(uri,\r\n {\r\n body: JSON.stringify(groupId),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'DELETE'\r\n })\r\n )\r\n .then(() => {\r\n displayNotification(`${groupNameForRemoval} removed`);\r\n })\r\n .catch((errorMsg) => {\r\n console.log(`RemoveGroup returned error: ${errorMsg}`);\r\n });\r\n\r\n // Remove the group from the array:\r\n removeGroupFromState(groupId);\r\n }\r\n\r\n function removeGroupFromState(groupId) {\r\n let temp = [...groups]; // Shallow copy groups to trigger re-render with the call to set_groups() below.\r\n let i = temp.findIndex(g => g.deviceId === groupId);\r\n if (i !== -1) {\r\n temp.splice(i, 1);\r\n }\r\n\r\n set_groups(temp);\r\n }\r\n\r\n function countSelectedDevices() {\r\n let count = 0;\r\n\r\n for (let group of groups) {\r\n for (let device of group.devices) {\r\n if (device.selected) {\r\n count++;\r\n }\r\n }\r\n }\r\n\r\n return count;\r\n }\r\n\r\n function removeDevices() {\r\n const multipleDevices = {\r\n deviceIds: [],\r\n groupIds: [],\r\n updateAttributes: null\r\n };\r\n\r\n for (let group of groups) {\r\n if (group.selected) {\r\n multipleDevices.groupIds.push(group.deviceId);\r\n continue;\r\n }\r\n for (let device of group.devices) {\r\n if (device.selected) {\r\n multipleDevices.deviceIds.push(device.config.deviceId);\r\n }\r\n }\r\n }\r\n\r\n removeDevicesFromBackend(multipleDevices);\r\n handleNumSelectedDevices(0);\r\n }\r\n\r\n function removeDevicesFromBackend(multipleDevices) {\r\n let uri = `CloudManagement/RemoveDevices`;\r\n authService.getAccessToken()\r\n .then(token =>\r\n fetch(uri,\r\n {\r\n body: JSON.stringify(multipleDevices),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'DELETE'\r\n })\r\n )\r\n .then(() => {\r\n })\r\n .catch((errorMsg) => {\r\n console.log(`RemoveDevices returned error: ${errorMsg}`);\r\n });\r\n }\r\n\r\n function removeDevice(deviceId) {\r\n const multipleDevices = {\r\n deviceIds: [],\r\n groupIds: [],\r\n updateAttributes: null\r\n };\r\n\r\n multipleDevices.deviceIds.push(deviceId);\r\n\r\n removeDevicesFromBackend(multipleDevices);\r\n }\r\n\r\n function fetchDevices(groupId) {\r\n authService.getAccessToken()\r\n .then(token => {\r\n let promise = axios.get(`CloudManagement/GetDevices/` + groupId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n timeout: MAINPAGE_TIMEOUT\r\n });\r\n online(true);\r\n return promise;\r\n })\r\n .then(response => {\r\n if (response.status === 401) { // Unauthorized.\r\n set_redirect(true);\r\n } else {\r\n handleNumSelectedDevices(0);\r\n return response.data;\r\n }\r\n })\r\n .then(data => {\r\n let temp = [...groups]; // Shallow copy groups.\r\n\r\n let group = groups.find(g => g.deviceId === groupId);\r\n group.devices = data;\r\n set_groups(temp);\r\n group.devices.fetching = false;\r\n group.devices.fetched = true;\r\n })\r\n }\r\n\r\n function toggleExpandedInUI(deviceId) {\r\n let temp = [...groups]; // Shallow copy groups.\r\n\r\n let group = groups.find(g => g.deviceId === deviceId);\r\n group.expandedInUI = !group.expandedInUI;\r\n\r\n set_groups(temp);\r\n\r\n if (group.devices.length === 0 && group.expandedInUI && !group.devices.fetched) {\r\n group.devices.fetching = true;\r\n fetchDevices(deviceId)\r\n }\r\n }\r\n\r\n function groupNameChanged(group) {\r\n set_groupIdForRenaming(null);\r\n set_newGroupName('');\r\n\r\n if (group.groupName !== newGroupName) {\r\n // Change the group name on the server:\r\n authService.getAccessToken()\r\n .then(token => {\r\n fetch('CloudManagement/SetGroupName/' + group.deviceId,\r\n {\r\n body: JSON.stringify({ groupName: newGroupName }),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n method: 'PUT'\r\n });\r\n });\r\n\r\n // Change the group name in the UI:\r\n let temp = [...groups]; // Shallow copy groups.\r\n group.groupName = newGroupName;\r\n\r\n set_groups(temp);\r\n }\r\n }\r\n\r\n function typingGroupName(groupNameValue) {\r\n set_newGroupName(groupNameValue);\r\n }\r\n\r\n function handleGroupKeyPress(e, group) {\r\n if (e.key === 'Enter') {\r\n groupNameChanged(group);\r\n }\r\n }\r\n\r\n if (redirect) {\r\n return ();\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n loading || groups === null\r\n ? ()\r\n : (
\r\n {groups.length === 0 ? (
) : groups.map(group =>\r\n \r\n \r\n \r\n \r\n {\r\n groupIdForRenaming === group.deviceId ?\r\n ( { typingGroupName(e.target.value) }} maxLength='29'\r\n onBlur={() => { groupNameChanged(group) }} autoFocus onFocus={(e) => e.target.select()} className='lblGroup'\r\n onKeyPress={(e) => { handleGroupKeyPress(e, group); }} />) :\r\n (

{group.groupName}

)\r\n }\r\n\r\n {\r\n (selectedDeviceId === '' && canManageUsers) ? (\r\n \r\n \r\n \r\n startRenamingGroup(group.deviceId, group.groupName)} />\r\n \r\n \r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t removeGroupClick(group.deviceId, group)} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n \r\n )\r\n : null\r\n }\r\n\r\n \r\n
\r\n \r\n \r\n toggleExpandedInUI(group.deviceId)} />\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n\r\n \r\n\r\n\t\t\t\t\t\t\r\n\r\n \r\n\r\n \r\n\r\n
\r\n \r\n
\r\n
)\r\n }\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Jumbotron, Button, Table } from \"react-bootstrap\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrashAlt, faPen, faUserTag, faCheck, faTimes } from '@fortawesome/pro-regular-svg-icons';\r\nimport { Tooltip } from 'react-tippy';\r\n\r\nexport default function Roles({ roles, handleShowAdd, handleShowEdit, getRoleClassByName, removeRoleClick, iotGroups }) {\r\n\tfunction getRoleGroupsClassByGroups(groups) {\r\n\t\tif (groups.length === 0) {\r\n\t\t\treturn 'managesAllGroups';\r\n\t\t} else {\r\n\t\t\treturn '';\r\n }\r\n\t}\r\n\t\r\n\tfunction getCanCreateData(role) {\r\n\t\tif (role.canManageUsers === true) {\r\n\t\t\treturn ;\r\n\t\t} else {\r\n\t\t\treturn ;\r\n }\r\n\t}\r\n\r\n\tfunction getGroups(groupIds) {\r\n\t\tif (groupIds.length === 0) {\r\n\t\t\treturn 'ALL';\r\n\t\t} else {\r\n\t\t\tlet groupNames = [];\r\n\t\t\tfor (const groupId of groupIds) {\r\n\t\t\t\tconst group = iotGroups.find(g => g.deviceId === groupId);\r\n\t\t\t\tif (group) {\r\n\t\t\t\t\tgroupNames.push(group.groupName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn groupNames.sort((n1, n2) => n1.localeCompare(n2)).join(', ');\r\n }\r\n }\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\troles && roles.map(role =>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

Roles

\r\n\t\t\t\t\t\t
ROLEMANAGES THESE DEVICE GROUPSCAN MANAGE USERSEDITREMOVE
{role.name}{getGroups(role.deviceGroupsManaged)}{getCanCreateData(role)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t { handleShowEdit(role); }} />\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t removeRoleClick(role)} />\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Jumbotron, Button, Table } from \"react-bootstrap\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrashAlt, faPen, faUserFriends } from '@fortawesome/pro-regular-svg-icons';\r\nimport { Tooltip } from 'react-tippy';\r\n\r\nexport default function Users({ users, handleShowAdd, handleShowEdit, removeUserClick }) {\r\n\tfunction getRoleClass(role) {\r\n switch (role) {\r\n\t\t\tcase 0:\r\n\t\t\t\treturn 'cloudAdmin';\r\n\t\t\tcase 1:\r\n\t\t\t\treturn 'eastBuildingAdmin';\r\n\t\t\tcase 2:\r\n\t\t\t\treturn 'westBuildingAdmin';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'deviceAdmin';\r\n }\r\n\t}\r\n\r\n\tfunction getRoleText(role) {\r\n\t\treturn role.name;\r\n\t}\r\n\r\n\tfunction getRoleCreated(user) {\r\n\t\treturn new Date(user.created).toISOString().split('T')[0];\r\n }\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tusers && users.map(user =>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

Users

\r\n\t\t\t\t\t\t
NAMEEMAILROLECREATEDEDITREMOVE
{user.name}{user.email}{getRoleText(user.role)}{getRoleCreated(user)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t { handleShowEdit(user); }} />\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t removeUserClick(user) } />\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Button, Form, Modal } from \"react-bootstrap\";\r\n\r\nexport default function UserAddEdit({ showModal, handleAddUser, handleEditUser, hideModal, roles, type, userForEditing }) {\r\n\tconst [roleId, set_roleId] = useState('');\r\n\tconst [name, set_name] = useState('');\r\n\tconst [email, set_email] = useState('');\r\n\r\n\tconst initState = useCallback(() => {\r\n\t\t// When adding users, display Device Admins first in the list of roles:\r\n\t\tconst deviceAdminRole = roles.find(r => r.name === 'Device Admin');\r\n\t\tif (deviceAdminRole) {\r\n\t\t\tset_roleId(deviceAdminRole.id);\r\n\t\t}\r\n\t\telse if (roles.length > 0) {\r\n\t\t\tset_roleId(roles[0].id);\r\n\t\t}\r\n\t\tset_name('');\r\n\t\tset_email('');\r\n\t}, [roles]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (userForEditing !== null) {\r\n\t\t\tset_roleId(userForEditing.role.id);\r\n\t\t\tset_name(userForEditing.name);\r\n\t\t\tset_email(userForEditing.email);\r\n\t\t} else {\r\n\t\t\tinitState();\r\n }\r\n\t}, [roles, userForEditing, initState]);\r\n\r\n\tfunction title() {\r\n\t\tif (type === 'add') return 'Add User';\r\n\t\telse return `Edit ${name}`;\r\n\t}\r\n\r\n\tasync function actionButtonClicked() {\r\n\t\tif (type === 'add') await handleAddUser(roleId, name, email);\r\n\t\telse await handleEditUser(userForEditing.id, roleId, name, email);\r\n\r\n\t\tinitState();\r\n\t}\r\n\t\r\n\tfunction cancelButtonClicked() {\r\n\t\tinitState();\r\n\t\thideModal();\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{title()}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tName\r\n\t\t\t\t\t set_name(e.target.value)} />\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tEmail\r\n\t\t\t\t\t set_email(e.target.value)} />\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tRole\r\n\t\t\t\t\t set_roleId(e.target.value)}>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\troles.map(r => )\r\n }\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{\r\n\t\t\t\t\ttype === \"add\" &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t

{`Clicking on \"APPLY\" will send an email to the new user with a link from which he/she can register and use this site.`}

\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Button, Form, Modal } from \"react-bootstrap\";\r\nimport Switch from \"../Switch\";\r\n\r\nexport default function RoleAddEdit({ showModal, handleAddRole, handleEditRole, hideModal, iotGroups, type, roleForEditing }) {\r\n\tconst [name, set_name] = useState('');\r\n\tconst [canManageUsers, set_canManageUsers] = useState(false);\r\n\tconst [managesAllGroups, set_managesAllGroups] = useState(true);\r\n\tconst [myIotGroups, set_myIotGroups] = useState([]);\r\n\r\n\tconst initState = useCallback(() => {\r\n\r\n\t\t// Copy from props to state:\r\n\t\tlet tmpGroups = [...iotGroups];\r\n\r\n\t\tif (roleForEditing !== null) {\r\n\t\t\t// The component is set for EDIT USER.\r\n\t\t\tset_name(roleForEditing.name);\r\n\t\t\tset_canManageUsers(roleForEditing.canManageUsers);\r\n\t\t\tset_managesAllGroups(roleForEditing.managesAllGroups);\r\n\r\n\t\t\t// Select the iot groups that this role manages:\r\n\t\t\tfor (const group of tmpGroups) {\r\n\t\t\t\tconst groupIsManagedByRole = roleForEditing.deviceGroupsManaged.find(g => g === group.deviceId);\r\n\t\t\t\tif (groupIsManagedByRole) {\r\n\t\t\t\t\tgroup.selected = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgroup.selected = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// The component is set for ADD USER.\r\n\t\t\tset_name('');\r\n\t\t\tset_canManageUsers(false);\r\n\t\t\tset_managesAllGroups(true);\r\n\r\n\t\t\t// Select all groups:\r\n\t\t\tfor (const group of tmpGroups) {\r\n\t\t\t\tif (group.selected != null) {\r\n\t\t\t\t\tgroup.selected = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tset_myIotGroups(tmpGroups);\r\n\t\t// Disabling eslint in the line below removes a warning. The compiler wants to add 'myIotGroups' in the depency list\r\n\t\t// but an infinite loop occurs if I do it. Investige later if needed.\r\n\t}, [iotGroups, roleForEditing]);\t// eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n\tuseEffect(() => {\r\n\t\tinitState();\r\n\t}, [roleForEditing, initState]);\r\n\r\n\tfunction toggleGroupSelected(group) {\r\n\t\tlet tmpGroups = [...myIotGroups];\r\n\t\tlet foundGroup = tmpGroups.find(g => g.deviceId === group.deviceId);\r\n\t\tif (foundGroup) foundGroup.selected = !foundGroup.selected;\r\n\r\n\t\t// Check if all iot groups are selected, in which case set 'managesAllGroups' to true:\r\n\t\tconst unselectedGroup = tmpGroups.find(g => g.selected === false);\r\n\t\tif (!unselectedGroup) {\r\n\t\t\tset_managesAllGroups(true);\r\n\t\t}\r\n\r\n\t\tset_myIotGroups(tmpGroups);\r\n\t}\r\n\r\n\tfunction title() {\r\n\t\tif (type === 'add') return 'Add Role';\r\n\t\telse return `Edit ${name}`;\r\n\t}\r\n\r\n\tasync function actionButtonClicked() {\r\n\t\thideModal();\r\n\r\n\t\tif (type === 'add') await handleAddRole(name, canManageUsers, managesAllGroups);\r\n\t\telse await handleEditRole(roleForEditing.id, name, canManageUsers, managesAllGroups);\r\n\r\n\t\tinitState();\r\n\t}\r\n\t\r\n\tfunction cancelButtonClicked() {\r\n\t\tinitState();\r\n\t\thideModal();\r\n\t}\r\n\r\n\tfunction toggleManagesAllGroups() {\r\n\t\tif (!managesAllGroups) {\r\n\t\t\t// Select all iot groups: \r\n\t\t\tlet temp = [...myIotGroups];\r\n\t\t\tfor (const group of temp) {\r\n\t\t\t\tgroup.selected = true;\r\n\t\t\t}\r\n\t\t\tset_myIotGroups(temp);\r\n\t\t} else {\r\n\t\t\t// Unselect all iot groups:\r\n\t\t\tlet temp = [...myIotGroups];\r\n\t\t\tfor (const group of temp) {\r\n\t\t\t\tgroup.selected = false;\r\n\t\t\t}\r\n\r\n\t\t\tset_myIotGroups(temp);\r\n\t\t}\r\n\t\t\r\n\t\tset_managesAllGroups(!managesAllGroups);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{title()}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tName\r\n\t\t\t\t\t set_name(e.target.value)} />\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t { set_canManageUsers(!canManageUsers) }} labelText='Can Manage Users' />\r\n\t\t\t\t\r\n\r\n\t\t\t\t{\r\n\t\t\t\t\tmyIotGroups.length > 0 &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tManages These Device Groups\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tOr select specific groups:\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmyIotGroups.map(g =>\r\n\t\t\t\t\t\t\t\t toggleGroupSelected(g)} />\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport authService from '../api-authorization/AuthorizeService';\r\nimport axios from \"axios\";\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default class UserHandler {\r\n\tUSERMANAGEMENT_TIMEOUT = 20000; // Timeout in milliseconds.\r\n\r\n\tstatic async fetchOrganizationData(set_error500) {\r\n\t\ttry {\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tlet response = await axios.get('UserManagement/GetOrganizationData', {\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\ttimeout: UserHandler.USERMANAGEMENT_TIMEOUT\r\n\t\t\t});\r\n\r\n\t\t\tconst data = response.data;\r\n\r\n\t\t\treturn { organizationId: data.organizationId, organizationName: data.organizationName };\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log('Error getting User Management Data: ' + error);\r\n\t\t\tset_error500(error);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic async changeOrganizationName(orgName, set_orgName, orgNameForRenaming, set_orgNameForRenaming, set_isRenamingOrgName, set_error500) {\r\n set_orgNameForRenaming(null);\r\n\t\tset_isRenamingOrgName(false);\r\n\r\n if (orgName !== orgNameForRenaming) {\r\n\t\t\t// Change the organization name in the UI:\r\n\t\t\tconst savedOrgName = orgName;\r\n\t\t\tset_orgName(orgNameForRenaming);\r\n\r\n\t\t\ttry {\r\n\t\t\t\t// Call the backend:\r\n\t\t\t\tset_error500('');\r\n\r\n\t\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\t\tawait axios({\r\n\t\t\t\t\turl: `UserManagement/ChangeOrganizationName/${orgNameForRenaming}`,\r\n\t\t\t\t\tmethod: 'PUT',\r\n\t\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n\t\t\t\t});\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.log('Error changing the organization name: ' + error);\r\n\t\t\t\tset_error500(error);\r\n\t\t\t\tset_orgName(savedOrgName);\r\n\t\t\t}\r\n }\r\n }\r\n\r\n\tstatic async fetchUserManagementData(set_roles, set_users, set_error500) {\r\n\t\ttry {\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tlet response = await axios.get('UserManagement/GetUserManagementData', {\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\ttimeout: UserHandler.USERMANAGEMENT_TIMEOUT\r\n\t\t\t});\r\n\r\n\t\t\tconst data = response.data;\r\n\r\n\t\t\t// Save the data:\r\n\t\t\tset_roles(data.roles);\r\n\t\t\tset_users(data.users);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log('Error getting User Management Data: ' + error);\r\n\t\t\tset_error500(error);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic async addUser(RoleId, Name, Email, users, set_users, hideModal, set_error500, roles) {\r\n\t\t// The front end creates the uuid for the user id:\r\n\t\tconst UserId = uuidv4();\r\n\t\thideModal();\r\n\t\ttoast.success(`Creating user ${Name}...`);\r\n\r\n\t\ttry {\r\n\t\t\t// Call the backend:\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: 'UserManagement/AddUser',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { UserId, RoleId, Name, Email }\r\n\t\t\t});\r\n\r\n\t\t\t// Update the UI:\r\n\t\t\tconst newUser = this.constructUser(UserId, RoleId, Name, Email, roles);\r\n\t\t\tlet newUsers = [...users, newUser];\r\n\t\t\tset_users(newUsers.sort((u1, u2) => u1.name.localeCompare(u2.name)));\r\n\t\t\ttoast.success(`${Name} created`);\r\n\t\t} catch (error) {\r\n\t\t\tif (error.response.status === 409) {\r\n\t\t\t\ttoast.error('User with that email already exists');\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log('Unexpected error from AddUser: ' + JSON.stringify(error));\r\n\t\t\t\ttoast.error('Internal error');\r\n }\r\n\t\t}\r\n\t}\r\n\r\n\tstatic async editUser(UserId, RoleId, Name, Email, users, roles, hideModal, set_error500, set_users) {\r\n\t\tconst tmpUsers = JSON.parse(JSON.stringify(users)); // Deep copy.\r\n\t\tlet user = tmpUsers.find(u => u.id === UserId);\r\n\t\tconst prevRole = user.role;\r\n\t\tconst nextRole = roles.find(r => r.id === RoleId);\r\n\t\t\r\n\t\tif (prevRole.canManageUsers && !nextRole.canManageUsers && UserHandler.noOtherCloudAdmin(user, users)) {\r\n\t\t\t// This change is not allowed because there has to be at least one Cloud Admin.\r\n\t\t\ttoast.success('There has to be at least one Cloud Admin');\r\n\t\t\thideModal();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// Call the backend:\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: `UserManagement/EditUser/${UserId}`,\r\n\t\t\t\tmethod: 'PUT',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { RoleId, Name, Email }\r\n\t\t\t});\r\n\r\n\t\t\t// Update the UI:\r\n\t\t\tif (user) {\r\n\t\t\t\tuser.name = Name;\r\n\t\t\t\tuser.email = Email;\r\n\t\t\t\tuser.role = roles.find(r => r.id === RoleId);\r\n\t\t\t\tset_users(tmpUsers);\r\n\t\t\t\ttoast.success(`User ${Name} was changed`);\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(`Couldn't find user ${UserId} - ${Name} in users: ${tmpUsers}`);\r\n\t\t\t\ttoast.error('Unexpected error happened');\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tif (error.response.status === 409) {\r\n\t\t\t\ttoast.error('User with that email already exists');\r\n\t\t\t} else if (error.response.status === 404) {\r\n\t\t\t\ttoast.error(`User ${Name} not found in the database. Please contact administrator`);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconsole.log('Unexpected error from EditUser: ' + JSON.stringify(error));\r\n\t\t\t\ttoast.error('Unexpected error happened');\r\n }\r\n\t\t}\r\n\r\n\t\thideModal();\r\n\t}\r\n\r\n\tstatic removeUserClick(user, set_showRemoveUserConfirmation, set_userForRemoval, users) {\r\n\t\tif (user.role.canManageUsers && UserHandler.noOtherCloudAdmin(user, users)) {\r\n\t\t\t// The end user is about to remove the very last Cloud Admin.\r\n\t\t\t// This is not allowed because then no one will be able to create new users.\r\n\t\t\ttoast.error('There has to be at least one Cloud Admin');\r\n\t\t} else {\r\n\t\t\t// Present confirmation about the user removal:\r\n\t\t\tset_showRemoveUserConfirmation(true);\r\n\t\t\tset_userForRemoval(user);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic removeUserConfirmationResult(result, set_showRemoveUserConfirmation, set_userForRemoval, userForRemoval, users, set_users, set_error500) {\r\n\t\tset_showRemoveUserConfirmation(false);\r\n\t\tif (result === true) {\r\n\t\t\tUserHandler.removeUser(userForRemoval, users, set_users, set_error500);\r\n\t\t}\r\n\t\tset_userForRemoval(null);\r\n\t}\r\n\r\n\tstatic async removeUser(userForRemoval, users, set_users, set_error500) {\r\n\t\ttry {\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: 'UserManagement/RemoveUser',\r\n\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { UserId: userForRemoval.id }\r\n\t\t\t});\r\n\r\n\t\t\t// Remove user from 'users':\r\n\t\t\tlet tmp = [...users];\r\n\t\t\ttmp = tmp.filter(u => u.id !== userForRemoval.id);\r\n\t\t\tset_users(tmp);\r\n\t\t\ttoast.success(userForRemoval.name + ' removed');\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log('Error removing user: ' + error);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic noOtherCloudAdmin(user, users) {\r\n\t\treturn !users.find(u => u.role.canManageUsers && u.id !== user.id);\r\n\t}\r\n\r\n\tstatic constructUser(UserId, RoleId, Name, Email, roles) {\r\n\t\tconst role = roles.find(r => r.id === RoleId);\r\n\r\n\t\tconst retval = {\r\n\t\t\tid: UserId,\r\n\t\t\tname: Name,\r\n\t\t\temail: Email,\r\n\t\t\trole,\r\n\t\t\tcreated: new Date()\r\n\t\t};\r\n\r\n\t\treturn retval;\r\n\t}\r\n\r\n\tstatic async confirmAccount(Email, Token, Password, succeeded, failed) {\r\n\t\ttry {\r\n\t\t\tawait axios({\r\n\t\t\t\turl: 'UserManagement/ConfirmAccount',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tdata: { Email, Token, Password }\r\n\t\t\t});\r\n\r\n\t\t\tsucceeded();\r\n\t\t} catch (error) {\r\n\t\t\tfailed();\r\n\t\t}\r\n\t}\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport authService from '../api-authorization/AuthorizeService';\r\nimport axios from \"axios\";\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default class RoleHandler {\r\n\t//TIMEOUT = 20000; // Timeout in milliseconds.\r\n\r\n\tstatic getGroupIds(managesAllGroups, iotGroups) {\r\n\t\tlet groupIds = [];\r\n\t\tif (!managesAllGroups) {\r\n\t\t\tfor (const group of iotGroups) {\r\n\t\t\t\tif (group.selected) {\r\n\t\t\t\t\tgroupIds.push(group.deviceId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn groupIds;\r\n\t}\r\n\r\n\tstatic async addRole(name, canManageUsers, managesAllGroups, iotGroups, set_error500, roles, set_roles) {\r\n\t\t// The front end creates the uuid for the role id:\r\n\t\tconst roleId = uuidv4();\r\n\r\n\t\t// Create a list of the groups this role should manage:\r\n\t\tlet groupIds = this.getGroupIds(managesAllGroups, iotGroups);\r\n\r\n\t\ttry {\r\n\t\t\t// Call the backend:\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: 'UserManagement/AddRole',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { roleId, name, canManageUsers, managesAllGroups, groupIds }\r\n\t\t\t});\r\n\r\n\t\t\t// Update the UI:\r\n\t\t\tconst newRole = this.constructRole(roleId, name, canManageUsers, managesAllGroups, groupIds);\r\n\t\t\tlet newRoles = [...roles, newRole];\r\n\t\t\tset_roles(newRoles.sort((r1, r2) => r1.name.localeCompare(r2.name)));\r\n\r\n\t\t\ttoast.success(`Role ${name} created`);\r\n\t\t} catch (error) {\r\n\t\t\tif (error.response && error.response.status && error.response.status === 409) {\r\n\t\t\t\ttoast.error('Role with that name already exists');\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log('Unexpected error from AddRole: ' + JSON.stringify(error));\r\n }\r\n\t\t}\r\n\r\n\t\t//hideModal();\r\n\t}\r\n\r\n\tstatic removeRoleClick(role, set_showRemoveRoleConfirmation, set_roleForRemoval, roles) {\r\n\t\tif (role.canManageUsers && RoleHandler.noOtherCloudAdmin(role, roles)) {\r\n\t\t\t// The end user is about to remove the very last Cloud Admin role.\r\n\t\t\t// This is not allowed because then no one will be able to create new users.\r\n\t\t\ttoast.error('There has to be at least one role that can manage users');\r\n\t\t} else {\r\n\t\t\t// Present confirmation about the user removal:\r\n\t\t\tset_showRemoveRoleConfirmation(true);\r\n\t\t\tset_roleForRemoval(role);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic removeRoleConfirmationResult(result, set_showRemoveRoleConfirmation, set_roleForRemoval, roleForRemoval, roles, set_roles, set_error500) {\r\n\t\tset_showRemoveRoleConfirmation(false);\r\n\t\tif (result === true) {\r\n\t\t\tRoleHandler.removeRole(roleForRemoval, roles, set_roles, set_error500);\r\n\t\t}\r\n\t\tset_roleForRemoval(null);\r\n\t}\r\n\r\n\tstatic async removeRole(roleForRemoval, roles, set_roles, set_error500) {\r\n\t\ttry {\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: 'UserManagement/RemoveRole',\r\n\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { RoleId: roleForRemoval.id }\r\n\t\t\t});\r\n\r\n\t\t\t// Remove role from 'roles':\r\n\t\t\tlet tmp = [...roles];\r\n\t\t\ttmp = tmp.filter(r => r.id !== roleForRemoval.id);\r\n\t\t\tset_roles(tmp);\r\n\t\t\ttoast.success(roleForRemoval.name + ' removed');\r\n\t\t} catch (error) {\r\n\t\t\tif (error.response && error.response.status && error.response.status === 409) {\r\n\t\t\t\ttoast.error('Failed to remove role because it has users attached to it');\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log('Unexpected error from RemoveRole: ' + JSON.stringify(error));\r\n }\r\n\t\t}\r\n\t}\r\n\r\n\tstatic noOtherCloudAdmin(role, roles) {\r\n\t\treturn !roles.find(r => r.canManageUsers && r.id !== role.id);\r\n\t}\r\n\r\n\tstatic constructRole(roleId, name, canManageUsers, managesAllGroups, groupIds) {\r\n\t\tconst retval = {\r\n\t\t\tid: roleId,\r\n\t\t\tname,\r\n\t\t\tdeviceGroupsManaged: groupIds,\r\n\t\t\tcanManageUsers,\r\n\t\t\tmanagesAllGroups\r\n\t\t};\r\n\r\n\t\treturn retval;\r\n\t}\r\n\r\n\tstatic async editRole(roleId, name, canManageUsers, managesAllGroups, iotGroups, set_error500, set_roles, roles, users, set_users) {\r\n\t\tconst tmpRoles = JSON.parse(JSON.stringify(roles)); // Deep copy.\r\n\t\tlet prevRoleIndex = tmpRoles.findIndex(r => r.id === roleId);\r\n\t\tif (prevRoleIndex === -1) {\r\n\t\t\tconsole.log('Previous role found. Contact administrator');\r\n\t\t\ttoast.error('Unexpected error happened. Please contact administrator');\r\n\t\t}\r\n\t\tlet prevRole = tmpRoles[prevRoleIndex];\r\n\r\n\t\tif (prevRole.canManageUsers && !canManageUsers && RoleHandler.noOtherCloudAdmin(prevRole, roles)) {\r\n\t\t\t// This change is not allowed because there has to be at least one Cloud Admin.\r\n\t\t\ttoast.error('There has to be at least one Cloud Admin');\r\n\t\t\t//hideModal();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet groupIds = this.getGroupIds(managesAllGroups, iotGroups);\r\n\r\n\t\ttry {\r\n\t\t\t// Call the backend:\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tawait axios({\r\n\t\t\t\turl: `UserManagement/EditRole/${roleId}`,\r\n\t\t\t\tmethod: 'PUT',\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\tdata: { name, canManageUsers, managesAllGroups, groupIds }\r\n\t\t\t});\r\n\r\n\t\t\t// Update the UI. First the roles:\r\n\t\t\ttmpRoles[prevRoleIndex] = { id: roleId, name, canManageUsers, managesAllGroups, deviceGroupsManaged: groupIds };\r\n\t\t\tset_roles(tmpRoles);\r\n\r\n\t\t\t// If the role name was changed, we have to update 'users' as well:\r\n\t\t\tif (prevRole.name !== name) {\r\n\t\t\t\tconst tmpUsers = JSON.parse(JSON.stringify(users));; // Deep copy.\r\n\t\t\t\tfor (const user of tmpUsers) {\r\n\t\t\t\t\tif (user.role.id === roleId) {\r\n\t\t\t\t\t\tuser.role.name = name;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tset_users(tmpUsers);\r\n\t\t\t}\r\n\r\n\t\t\ttoast.success(`Role ${name} was changed`);\r\n\t\t} catch (error) {\r\n\t\t\tif (error.response.status === 409) {\r\n\t\t\t\ttoast.error('Role with that name already exists');\r\n\t\t\t} else if (error.response.status === 404) {\r\n\t\t\t\ttoast.error(`Role ${name} not found in the database. Please contact administrator`);\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log('Unexpected error from EditRole: ' + JSON.stringify(error));\r\n\t\t\t\ttoast.error('Unexpected error happened');\r\n }\r\n\t\t}\r\n\r\n\t\t//hideModal();\r\n\t}\r\n}\r\n","import authService from '../api-authorization/AuthorizeService';\r\nimport axios from \"axios\";\r\n//import { toast } from 'react-toastify';\r\n\r\nexport default class IOTHandler {\r\n\tTIMEOUT = 20000; // Timeout in milliseconds.\r\n\r\n\tstatic async fetchGroups(set_iotGroups, set_error500, organizationId, set_fetchedIotGroups) {\r\n\t\ttry {\r\n\t\t\tset_error500('');\r\n\r\n\t\t\tlet token = await authService.getAccessToken();\r\n\r\n\t\t\tlet response = await axios.get(`CloudManagement/GetGroups`, {\r\n\t\t\t\theaders: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n\t\t\t\ttimeout: IOTHandler.TIMEOUT\r\n\t\t\t});\r\n\r\n\t\t\tconst data = response.data;\r\n\r\n\t\t\t// Add a 'selected' attribute to each group that will be used in RoleAddEdit.js:\r\n\t\t\tfor (const group of data) {\r\n\t\t\t\tgroup.selected = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Save the data:\r\n\t\t\tset_iotGroups(data);\r\n\t\t\tset_fetchedIotGroups(true);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log('Error getting IOT Groups: ' + error);\r\n\t\t\tset_error500(error);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useState, useEffect, Fragment } from 'react';\r\nimport Roles from \"./Roles\";\r\nimport Users from \"./Users\";\r\nimport UserAddEdit from \"./UserAddEdit\";\r\nimport RoleAddEdit from \"./RoleAddEdit\";\r\nimport \"react-loader-spinner/dist/loader/css/react-spinner-loader.css\";\r\nimport Loader from 'react-loader-spinner';\r\nimport ConfirmationDialog from '../ConfirmationDialog';\r\nimport { ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport UserHandler from \"./UserHandler\";\r\nimport RoleHandler from \"./RoleHandler\";\r\nimport IOTHandler from \"./IOTHandler\";\r\nimport { Form } from 'react-bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { Tooltip, } from 'react-tippy';\r\nimport { faPen } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nexport default function UserManagement() {\r\n\tconst [roles, set_roles] = useState([]);\r\n\tconst [users, set_users] = useState([]);\r\n\tconst [error500, set_error500] = useState('');\r\n\tconst [iotGroups, set_iotGroups] = useState([]);\r\n\tconst [fetchedIotGroups, set_fetchedIotGroups] = useState(false);\r\n\tconst [addOrEdit, set_addOrEdit] = useState('add');\r\n\tconst [orgName, set_orgName] = useState('');\r\n\tconst [orgNameForRenaming, set_orgNameForRenaming] = useState(null);\r\n\tconst [isRenamingOrgName, set_isRenamingOrgName] = useState(false);\r\n\r\n\tconst [userAddEditVisible, set_userAddEditVisible] = useState(false);\r\n\tconst hideUserModal = () => {\r\n\t\tset_userAddEditVisible(false);\r\n\t\tset_userForEditing(null);\r\n\t}\r\n\tconst showAddUserModal = () => {\r\n\t\tset_userAddEditVisible(true);\r\n\t\tset_addOrEdit('add');\r\n\t\tset_userForEditing(null);\r\n\t}\r\n\tconst showEditUserModal = (user) => {\r\n\t\tset_userAddEditVisible(true);\r\n\t\tset_addOrEdit('edit');\r\n\t\tset_userForEditing(user);\r\n\t}\r\n\r\n\tconst [showRemoveUserConfirmation, set_showRemoveUserConfirmation] = useState(false);\r\n\tconst [userForRemoval, set_userForRemoval] = useState(null);\r\n\tconst [userForEditing, set_userForEditing] = useState(null);\r\n\r\n\tconst [roleAddEditVisible, set_roleAddEditVisible] = useState(false);\r\n\tconst hideRoleModal = () => {\r\n\t\tset_roleAddEditVisible(false);\r\n\t\tset_roleForEditing(null);\r\n\t}\r\n\tconst showAddRoleModal = () => {\r\n\t\tset_roleAddEditVisible(true);\r\n\t\tset_addOrEdit('add');\r\n\t\tset_roleForEditing(null);\r\n\t}\r\n\tconst showEditRoleModal = (role) => {\r\n\t\t// Select the groups in iotGroups that are selected for 'roleForEditing':\r\n\t\tif (role) {\t// Should always be true.\r\n\t\t\tlet tmpGroups = [...iotGroups];\r\n\r\n\t\t\tfor (const group of iotGroups) {\r\n\t\t\t\tconst groupId = role.deviceGroupsManaged.find(d => d === group.deviceId);\r\n\t\t\t\tif (groupId) {\r\n\t\t\t\t\tgroup.selected = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tset_iotGroups(tmpGroups);\r\n\t\t}\r\n\r\n\t\tset_roleAddEditVisible(true);\r\n\t\tset_addOrEdit('edit');\r\n\t\tset_roleForEditing(role);\r\n\t}\r\n\r\n\tconst [showRemoveRoleConfirmation, set_showRemoveRoleConfirmation] = useState(false);\r\n\tconst [roleForRemoval, set_roleForRemoval] = useState(null);\r\n\tconst [roleForEditing, set_roleForEditing] = useState(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tasync function fetchAll() {\r\n\t\t\tconst { organizationId, organizationName } = await UserHandler.fetchOrganizationData(set_error500);\r\n\r\n\t\t\t// Fetch all the data to display on the User Management page:\r\n\t\t\tUserHandler.fetchUserManagementData(set_roles, set_users, set_error500);\r\n\r\n\t\t\t// Simultaneously, fetch the list of all groups:\r\n\t\t\tIOTHandler.fetchGroups(set_iotGroups, set_error500, organizationId, set_fetchedIotGroups);\r\n\r\n\t\t\tset_orgName(organizationName);\r\n\t\t}\r\n\t\t\r\n\t\tfetchAll();\r\n\t}, []);\r\n\r\n\tasync function handleAddUser(RoleId, Name, Email) {\r\n\t\tUserHandler.addUser(RoleId, Name, Email, users, set_users, hideUserModal, set_error500, roles);\r\n\t}\r\n\r\n\tasync function handleEditUser(UserId, RoleId, Name, Email) {\r\n\t\tUserHandler.editUser(UserId, RoleId, Name, Email, users, roles, hideUserModal, set_error500, set_users);\r\n\t}\r\n\r\n\tfunction removeUserClick(user) {\r\n\t\tUserHandler.removeUserClick(user, set_showRemoveUserConfirmation, set_userForRemoval, users)\r\n\t}\r\n\r\n\tfunction removeUserConfirmationResult(result) {\r\n\t\tUserHandler.removeUserConfirmationResult(result, set_showRemoveUserConfirmation, set_userForRemoval, userForRemoval, users, set_users, set_error500);\r\n\t}\r\n\r\n\tfunction removeRoleClick(role) {\r\n\t\tRoleHandler.removeRoleClick(role, set_showRemoveRoleConfirmation, set_roleForRemoval, roles)\r\n\t}\r\n\r\n\tasync function handleAddRole(name, canManageUsers, managesAllGroups) {\r\n\t\tRoleHandler.addRole(name, canManageUsers, managesAllGroups, iotGroups, set_error500, roles, set_roles);\r\n\t}\r\n\r\n\tasync function handleEditRole(roleId, name, canManageUsers, managesAllGroups) {\r\n\t\tRoleHandler.editRole(roleId, name, canManageUsers, managesAllGroups, iotGroups, set_error500, set_roles, roles, users, set_users);\r\n\t}\r\n\r\n\tfunction removeRoleConfirmationResult(result) {\r\n\t\tRoleHandler.removeRoleConfirmationResult(result, set_showRemoveRoleConfirmation, set_roleForRemoval, roleForRemoval, roles, set_roles, set_error500);\r\n\t}\r\n\r\n\tfunction getRoleClassByName(role) {\r\n\t\tswitch (role) {\r\n\t\t\tcase 'Cloud Admin':\r\n\t\t\t\treturn 'cloudAdmin';\r\n\t\t\tcase 'East Building Admin':\r\n\t\t\t\treturn 'eastBuildingAdmin';\r\n\t\t\tcase 'West Building Admin':\r\n\t\t\t\treturn 'westBuildingAdmin';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'deviceAdmin';\r\n\t\t}\r\n\t}\r\n\r\n\tfunction startRenamingOrgName() {\r\n\t\tset_orgNameForRenaming(orgName);\r\n\t\tset_isRenamingOrgName(true);\r\n\t}\r\n\r\n\tfunction typingOrgName(orgNameValue) {\r\n set_orgNameForRenaming(orgNameValue);\r\n }\r\n\r\n\tfunction changeOrganizationName() {\r\n\t\tUserHandler.changeOrganizationName(orgName, set_orgName, orgNameForRenaming, set_orgNameForRenaming, set_isRenamingOrgName, set_error500);\r\n\t}\r\n\r\n\tfunction handleOrgKeyPress(e) {\r\n if (e.key === 'Enter') {\r\n changeOrganizationName();\r\n }\r\n }\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t{\r\n\t\t\t\terror500 &&\r\n\t\t\t\t

Internal error, try again later...

\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tisRenamingOrgName === true ?\r\n\t\t\t\t\t\t { typingOrgName(e.target.value) }} maxLength='50'\r\n\t\t\t\t\t\t\tonBlur={() => { changeOrganizationName() }} autoFocus onFocus={(e) => e.target.select()} className='lblGroup'\r\n\t\t\t\t\t\t\tonKeyPress={(e) => { handleOrgKeyPress(e); }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\t

{orgName}

\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t startRenamingOrgName()} />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t{\r\n\t\t\t\t(roles.length === 0 || !fetchedIotGroups) ?\r\n\t\t\t\t\t\r\n\t\t\t\t\t:\r\n\t\t\t\t\t!error500 &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{/*Roles*/}\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t{/*Users*/}\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t{/*AD Groups*/}\r\n\t\t\t\t\t\t{/**/}\r\n\r\n\t\t\t\t\t\t{/*Various modal popups and confirmation dialogs*/}\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n }\r\n\t\t
\r\n\t);\r\n}\r\n","import { createBrowserHistory as history} from 'history';\r\n\r\nexport default history();","import React, { useState } from 'react';\r\nimport { Form, Button } from \"react-bootstrap\";\r\nimport UserHandler from \"./UserHandler\";\r\nimport history from './History';\r\nimport Loader from 'react-loader-spinner';\r\n\r\nfunction FirstLogin() {\r\n\tconst [password, set_password] = useState('');\r\n\tconst [passwordRetyped, set_passwordRetyped] = useState('');\r\n\tconst [illegalPassword, set_illegalPassword] = useState(false);\r\n\tconst [loggingIn, set_loggingIn] = useState(false);\r\n\r\n\tlet search = window.location.search;\r\n\tlet params = new URLSearchParams(search);\r\n\tlet name = params.get('name');\r\n\tlet email = params.get('email');\r\n\tlet token = params.get('token');\r\n\r\n\tfunction succeeded() {\r\n\t\thistory.push('./');\r\n\t\twindow.location.reload();\r\n\t}\r\n\r\n\tfunction failed() {\r\n\t\tset_loggingIn(false);\r\n\t\tset_illegalPassword(true);\r\n\t}\r\n\r\n\tfunction clickLogin() {\r\n\t\tset_illegalPassword(false);\r\n\t\tset_loggingIn(true);\r\n\t\tUserHandler.confirmAccount(email, token, password, succeeded, failed);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t

Welcome to Cloud Management, {name}

\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\tPlease create a password\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\tNOTE! Passwords have to contain both upper and lower case letters in addition to alphanumeric and special characters.\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t {set_password(e.target.value)}}>\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\tRe-type your password here\r\n\t\t\t\t {set_passwordRetyped(e.target.value)}}>\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tloggingIn ?\r\n\t\t\t\t\t\r\n\t\t\t\t\t:\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\r\n\r\n\t\t\t{\r\n\t\t\t\tillegalPassword &&\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPasswords have to contain both upper and lower case letters in addition to alphanumeric and special characters.\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default FirstLogin;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Route, Redirect, Switch } from 'react-router';\r\nimport Layout from './components/Layout';\r\nimport AuthorizeRoute from './components/api-authorization/AuthorizeRoute';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport './main.css';\r\nimport MainPage from './components/MainPage';\r\nimport UserManagement from './components/UserManagement/UserManagement';\r\nimport FirstLogin from './components/UserManagement/FirstLogin';\r\nimport { DISCONNECTED } from './components/Utils';\r\nimport authService from './components/api-authorization/AuthorizeService';\r\nimport axios from 'axios';\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default function App() {\r\n const [detailsPaneVisible, set_detailsPaneVisible] = useState(false);\r\n const [createGroupPaneVisible, set_createGroupPaneVisible] = useState(false);\r\n const [addingDevice, set_addingDevice] = useState(false);\r\n const [selectedDeviceId, set_selectedDeviceId] = useState('');\r\n const [selectedDeviceConnectionState, set_selectedDeviceConnectionState] = useState(DISCONNECTED);\r\n const [numSelectedDevices, set_numSelectedDevices] = useState(0);\r\n const [multipleEdit, set_multipleEdit] = useState(false);\r\n const [loggedIn, set_loggedIn] = useState(false);\r\n const [noGroupsCreated, set_noGroupsCreated] = useState(true);\r\n\tconst [selectedPage, set_selectedPage] = useState('Devices');\r\n\tconst [canManageUsers, set_canManageUsers] = useState(false);\r\n\r\n\tconst TIMEOUT = 20000; // Timeout in milliseconds.\r\n\r\n useEffect(() => {\r\n if (loggedIn) {\r\n async function checkIfUserCanManageOtherUsers() {\r\n try {\r\n authService.getAccessToken().then(token => {\r\n if (token == null || Object.keys(token).length === 0) {\r\n // Token is empty.\r\n return;\r\n }\r\n\r\n axios.get('UserManagement/CanManageUsers', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n timeout: TIMEOUT\r\n }).then(response => {\r\n set_canManageUsers(response.data.canManageUsers);\r\n })\r\n });\r\n } catch (error) {\r\n toast.error('Unexpected error while checking if this user can manage other users. Check with helpdesk or try again later.')\r\n }\r\n }\r\n\r\n checkIfUserCanManageOtherUsers();\r\n }\r\n }, [loggedIn, set_canManageUsers]);\r\n \r\n function numGroups(num) {\r\n set_noGroupsCreated(num === 0 ? true : false);\r\n }\r\n\r\n function online(yes) {\r\n set_loggedIn(yes);\r\n }\r\n\r\n function addDevice() {\r\n set_addingDevice(true);\r\n }\r\n\r\n function closeAddDevicePane() {\r\n set_addingDevice(false);\r\n }\r\n\r\n function createGroup() {\r\n set_createGroupPaneVisible(true);\r\n }\r\n\r\n function editMultipleDevices() {\r\n set_detailsPaneVisible(true);\r\n set_multipleEdit(true);\r\n }\r\n\r\n function closeCreateGroupPane() {\r\n set_createGroupPaneVisible(false);\r\n }\r\n\r\n function closeDetailsPane() {\r\n set_detailsPaneVisible(false);\r\n set_selectedDeviceId('');\r\n set_addingDevice(false);\r\n set_multipleEdit(false);\r\n }\r\n\r\n function openDetailsPane(deviceId, connectionState) {\r\n set_detailsPaneVisible(true);\r\n set_selectedDeviceId(deviceId);\r\n set_selectedDeviceConnectionState(connectionState);\r\n }\r\n\r\n function handleNumSelectedDevices(count) {\r\n set_numSelectedDevices(count);\r\n\t}\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n\r\n {\r\n canManageUsers && \r\n }\r\n\r\n } />\r\n\r\n } />\r\n\r\n \r\n \r\n \r\n );\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n//import registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n// Uncomment the line above that imports the registerServiceWorker function\r\n// and the line below to register the generated service worker.\r\n// By default create-react-app includes a service worker to improve the\r\n// performance of the application by caching static assets. This service\r\n// worker can interfere with the Identity UI, so it is\r\n// disabled by default when Identity is being used.\r\n//\r\n//registerServiceWorker();\r\n\r\n"],"sourceRoot":""}