{"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","LogoutCallback","Logout","LoggedOut","LoginActions","Login","LoginCallback","LoginFailed","Profile","Register","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","concat","ApiAuthorizationPrefix","LogOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","authService","constructor","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","isAuthenticated","this","getUser","profile","ensureUserManagerInitialized","user","userManager","getAccessToken","access_token","signIn","state","silentUser","signinSilent","createArguments","updateState","success","silentError","console","log","Error","popUpUser","signinPopup","popUpError","message","error","signinRedirect","redirect","redirectError","completeSignIn","url","signinCallback","window","location","href","signOut","signoutPopup","undefined","popupSignOutError","signoutRedirect","redirectSignOutError","completeSignOut","response","signoutCallback","data","notifySubscribers","subscribe","callback","push","subscription","unsubscribe","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","settings","json","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","async","removeUser","addAccessTokenExpiring","instance","LoginMenu","Component","props","super","userName","componentDidMount","_subscription","populateState","componentWillUnmount","Promise","all","setState","name","tooltipTitle","render","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","_jsxs","Fragment","children","_jsx","NavItem","className","NavLink","tag","Link","to","Tooltip","title","position","trigger","arrow","Avatar","size","round","textSizeRatio","NavMenu","_ref","editMultipleDevices","createGroup","addDevice","detailsPaneVisible","numSelectedDevices","loggedIn","noGroupsCreated","selectedPage","set_selectedPage","canManageUsers","set_isAuthenticated","useState","useEffect","checkIfAuthenticated","buttons","Button","variant","onClick","disabled","Navbar","collapseOnSelect","expand","Container","Brand","Toggle","Collapse","id","Nav","React","Layout","AuthorizeRoute","ready","authenticated","authenticationChanged","populateAuthenticationState","redirectUrl","encodeURI","component","rest","Route","action","login","getReturnUrl","processLoginCallback","URLSearchParams","search","get","redirectToProfile","redirectToRegister","returnUrl","result","navigateToReturnUrl","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","replace","isReady","history","logout","processLogoutCallback","online","ApiAuthorizationRoutes","loginAction","logoutAction","path","Utils","getCurrentTime","d","Date","getHours","getMinutes","getSeconds","getMilliseconds","validateIPaddress","ipaddress","nullable","test","diff","obj1","obj2","Object","is","keys","forEach","key","value","clean","el","isObject","internalClean","transform","isCollection","cleaned","isEmpty","isArray","isNumeric","n","isNaN","parseFloat","isFinite","hasString","str","escapeSpecialChars","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","TURN_DISPLAY_OFF_INACTIVE_3_HOURS","SAMPLE_RATE_44100","SAMPLE_RATE_48000","SAMPLE_RATE_96000","SAMPLE_RATE_192000","ENGLISH","HOUR_12","HOUR_24","HOUR_OFF","UTC","AirServerList","devices","openDetailsPane","groupId","isDeviceChecked","handleDeviceCheckChange","isGroupChecked","handleGroupCheckChange","expandedInUI","INITIALIZING_COLUMN_TEXT","INITIALIZING_TEXT","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","FontAwesomeIcon","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","activeIpv4EthernetAddresses","activeIpv4Addresses","activeIpv4WifiAddresses","contents","trClass","tableClass","fetching","margin","Loader","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","label","valueLink","rel","dangerouslySetInnerHTML","__html","text","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","builtInHotspot","checked_builtInHotspot","setChecked_builtInHotspot","handleToggleHotspot","checked_hotspotPassword","handleSetHotspotPassword","hotspotInterfaceInfoWidth","hotspotPassword","setChecked_hotspotPassword","requestedFrequency","irChannels","set_requestedFrequency","currentFrequency","clientIsolation","set_clientIsolation","guestAccessType","checked_guestAccessType","handleGuestAccessTypeChange","setChecked_guestAccessType","hotspotPasswordValid","checked_clientIsolation","setChecked_clientIsolation","getChannelListItem","freq","dfs","dfsSuffix","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_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","removeDuplicates","srcJson","compareJson","modified","obj","entries","constructDeviceAndGroupIdLists","deviceIds","groupIds","removeEmptyObjects","dict","validateInput","valid","invalidProps","URL","protocol","isUrl","join","normalTabColor","handleApplyClick","exitPaneWhenDone","arguments","multipleDevices","decoder","network","externalwifi","management","networkaccesscontrol","v2","wifi","showQrCode","ssid","password","airplayAuthMode","googleCastAuthMode","miracastAuthMode","useShortPin","eapSecurity","username","passphrase","tmpForwardToInternet","tmpForwardToLAN","forwardToInternet","forwardToLAN","audioReceiver","cecEnabled","sleepTimerEnabled","sleepTimerSeconds","country","adminPassword","JSON","stringify","targetGroup","constructMultipleEditInput","then","token","body","headers","method","exitPane","catch","toLowerCase","includes","putMultipleEdit","airServerInput","backgroundUrl","toString","deviceUpdate","parse","createAirServerInput","warn","axios","getDeviceAlias","callUpdateDevice","handle_setChecked_airplay","val","changeRedCrossCount","handle_setChecked_airplayAudioReceiver","handle_setChecked_automaticUpdateEnabled","handle_setChecked_background","handle_setChecked_builtInHotspot","handle_setChecked_clock","handle_setChecked_country","handle_setChecked_deviceManagementPassword","handle_setChecked_displayRotation","handle_setChecked_displayYourOwnNetwork","handle_setChecked_enableDeviceManagement","handle_setChecked_forceLowResolution","handle_setChecked_googleCast","handle_setChecked_groups","handle_setChecked_guestAccessType","handle_setChecked_hdmiCecEnabled","handle_setChecked_homescreenLayout","handle_setChecked_language","handle_setChecked_miracast","handle_setChecked_moderator","handle_setChecked_privateKeyAndCert","handle_setChecked_proxy","handle_setChecked_sampleRate","handle_setChecked_enterpriseSecurity","handle_setChecked_sessionLayout","handle_setChecked_showGuestAccessWhileInUse","handle_setChecked_showHowToConnect","handle_setChecked_showWiFiQrCode","handle_setChecked_timezone","handle_setChecked_turnDisplayOutOffWhenInactive","handle_setChecked_upper5g","handle_setChecked_clientIsolation","sendToolsCommand","attribute","notifyWhenDone","uri","toggleMultipleInput","attributeName","attributeValue","errorMsg","deviceName","ip","delta","isInitialized","tags","v2props","interfaceInfo","cecSupported","saveHubData","Jumbotron","detailsPaneHeader","Tabs","defaultActiveKey","Tab","faCloud","eventKey","resetSettings","setTimeout","faInfo","faUser","substr","faCommentAltCheck","faProjectDiagram","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","_templateObject","_taggedTemplateLiteral","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","groupListChanged","groupIndex","deviceIndex","oldGroup","oldIndex","onclose","err","toast","useCallback","removeGroupConfirmationResult","temp","removeGroupFromState","removeGroup","countSelectedDevices","count","removeDevicesFromBackend","toggleExpandedInUI","fetched","groupNameChanged","groupNameValue","onBlur","onFocus","select","handleGroupKeyPress","faPen","startRenamingGroup","faTrashAlt","removeGroupClick","faCaretDown","faCaretLeft","tempGroups","updateAttributes","ToastContainer","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","fetchOrganizationData","set_error500","organizationId","organizationName","changeOrganizationName","set_orgName","orgNameForRenaming","set_orgNameForRenaming","set_isRenamingOrgName","savedOrgName","fetchUserManagementData","set_roles","set_users","addUser","RoleId","Name","Email","UserId","newUser","constructUser","u1","u2","editUser","tmpUsers","u","prevRole","nextRole","noOtherCloudAdmin","set_showRemoveUserConfirmation","set_userForRemoval","removeUserConfirmationResult","userForRemoval","tmp","confirmAccount","Token","Password","succeeded","failed","RoleHandler","getGroupIds","addRole","newRole","constructRole","r1","r2","set_showRemoveRoleConfirmation","set_roleForRemoval","removeRoleConfirmationResult","roleForRemoval","removeRole","editRole","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","fetchAll","orgNameValue","handleOrgKeyPress","showAddRoleModal","showAddUserModal","hideRoleModal","FirstLogin","set_password","passwordRetyped","set_passwordRetyped","illegalPassword","set_illegalPassword","loggingIn","set_loggingIn","params","reload","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","BrowserRouter","basename"],"mappings":"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","file":"static/js/main.59ba4920.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 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 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 Current Frequency\r\n \r\n {getChannel(currentFrequency, hotspotInterfaceInfoWidth)}\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=\"4096\" />\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=\"4096\" />\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 [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_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_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_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\n//import { 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 var groupListChanged = false;\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 if (group.groupName !== twin.tags.groupName) {\r\n group.groupName = twin.tags.groupName;\r\n groupListChanged = true;\r\n }\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 if (group.expandedInUI) {\r\n groupListChanged = true;\r\n }\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 groupListChanged = true;\r\n break;\r\n }\r\n }\r\n if (group.devices.length > 0 || group.expandedInUI) {\r\n group.devices.push(device);\r\n groupListChanged = true;\r\n } else {\r\n //console.log(\"not adding device to unopened group:\", group.groupName);\r\n }\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 if (group.expandedInUI) {\r\n groupListChanged = true;\r\n }\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 groupListChanged = true;\r\n }\r\n }\r\n if (groupListChanged) {\r\n set_groups([...groups]);\r\n }\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([...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 //console.info(\"updating groups...\", data);\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 = temp.find(g => g.deviceId === deviceId);\r\n if (group) {\r\n //console.log(`toggle group: \"${group.groupName}\" (${group.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 //console.log(`fetching devices for group: \"${group.groupName}\" (${group.deviceId})`);\r\n group.devices.fetching = true;\r\n fetchDevices(deviceId);\r\n }\r\n } else {\r\n console.log(\"group not found:\", 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":""}