{"version":3,"sources":["utils/http-util.js","assets/images/tunnelin_vnc.jpg","assets/images/tunnelin_ssh.jpg","assets/images/tunnelin_rdp.jpg","assets/images/no_device.png","assets/images/tunnel.jpg","assets/images/tunnelin_devices.jpg","assets/images/tunnelin_tunnels.jpg","store/history.js","constants/message-constants.js","reducers/initial-state.js","reducers/users-reducer.js","constants/action-types.js","utils/reducer-util.js","utils/user-utils.js","reducers/app-reducer.js","reducers/devices-statuses-reducer.js","reducers/devices-reducer.js","reducers/tunnels-reducer.js","reducers/user-devices-reducer.js","reducers/groups-reducer.js","reducers/index.js","actions/app-actions.js","actions/authentication-actions.js","api/authentication-api.js","utils/global-message-util.js","epics/authentication-epic/login-epic.js","epics/authentication-epic/index.js","epics/authentication-epic/get-logged-in-user-epic.js","epics/authentication-epic/signup-epic.js","epics/authentication-epic/logout-epic.js","epics/authentication-epic/change-current-user-password-epic.js","epics/authentication-epic/update-current-user-epic.js","epics/authentication-epic/toggle-two-factor-auth-epic.js","epics/authentication-epic/regenerate-two-factor-auth-qr-epic.js","epics/authentication-epic/change-organization.js","epics/authentication-epic/signup-activate-orguser-epic.js","constants/route-constants.js","epics/app-epic/init-app-epic.js","epics/app-epic/index.js","api/device-api.js","actions/device-actions.js","api/user-device-api.js","actions/user-device-actions.js","selectors/app-selectors.js","epics/device-epic/index.js","epics/device-epic/get-devices.js","epics/device-epic/get-statuses.js","epics/device-epic/add-device.js","epics/device-epic/update-device.js","epics/device-epic/delete-device.js","epics/device-epic/get-device-users.js","epics/device-epic/add-or-remove-users-to-device.js","epics/device-epic/remove-current-user-from-device.js","epics/device-epic/update-devices-ordering.js","api/group-api.js","actions/group-actions.js","epics/group-epic/index.js","epics/group-epic/get-groups.js","epics/group-epic/update-groups-ordering.js","epics/group-epic/add-group.js","epics/group-epic/update-group.js","epics/group-epic/delete-group.js","api/users-api.js","actions/users-actions.js","epics/users-epic/index.js","epics/users-epic/make-default-group.js","epics/users-epic/send-activation-email.js","api/tunnel-api.js","actions/tunnel-actions.js","epics/tunnel-epic/index.js","epics/tunnel-epic/get-statuses.js","epics/index.js","store/configureStore.js","store/get-store.js","components/withMaterial.js","components/Authentication/Login/index.js","utils/container-util.js","containers/Authentication/Login/index.js","utils/validations.js","components/Authentication/Signup/index.js","containers/Authentication/Signup/index.js","utils/jwt-utils.js","components/OrganizationInvitation/Signup.js","components/OrganizationInvitation/SignUpAndApprove.js","components/OrganizationInvitation/index.js","containers/OrganizationInvitation/index.js","components/Authentication/PasswordRecovery/index.js","containers/Authentication/PasswordRecovery/index.js","components/Authentication/SetNewPassword/index.js","containers/Authentication/SetNewPassword/index.js","components/Devices/GetSendedDevice/index.js","containers/Devices/GetSendedDevice/index.js","containers/Authentication/Signup/GetDevice.js","components/Devices/SignUpOrLoginForGetDevice/index.js","containers/Devices/SignUpOrLoginForGetDevice/index.js","components/Users/ActivateAccount/index.js","components/Users/ActivateAccount/styles.js","containers/Users/ActivateAccount/index.js","components/Devices/ChangeDeviceOwner/index.js","containers/Devices/ChangeDeviceOwner/index.js","components/LoadingPane/Loader/index.js","containers/Authentication/VerifyEmail/index.js","containers/WithHelmet.js","api/terminal-api.js","containers/Terminal/token-requests.js","containers/Terminal/withToken.js","utils/mqtt.js","containers/Terminal/withTunnel.js","constants/guac-constants.js","containers/Terminal/GuacClient/Canvas.js","keyboard-layouts/en-us-qwerty.js","containers/Terminal/GuacClient/withOptions.js","containers/Terminal/GuacClient/index.js","utils/clipboard-util.js","components/PasswordField/index.js","components/PasswordField/styles.js","containers/Terminal/VNCTerminal/Settings.js","containers/Terminal/VNCTerminal/index.js","containers/Terminal/VNCTerminal/clientWrapper.js","containers/Terminal/SSHTerminal/Settings.js","containers/Terminal/SSHTerminal/index.js","containers/Terminal/SSHTerminal/clientWrapper.js","containers/Terminal/RDPTerminal/Settings.js","containers/Terminal/RDPTerminal/index.js","containers/Terminal/index.js","api/general-api.js","components/Profile/GeneralOptions/styles.js","components/Profile/GeneralOptions/index.js","containers/Profile/GeneralOptions/index.js","components/Profile/EmailOptions/index.js","components/Profile/EmailOptions/styles.js","containers/Profile/EmailOptions/index.js","components/ChangePasswordForm/index.js","components/Profile/PasswordOptions/styles.js","components/Profile/PasswordOptions/index.js","containers/Profile/PasswordOptions/index.js","components/Profile/TwoFactorAuthenticationOptions/index.js","components/Profile/TwoFactorAuthenticationOptions/styles.js","containers/Profile/TwoFactorAuthenticationOptions/index.js","components/Profile/index.js","components/Profile/styles.js","components/Settings/ProxyOptions/index.js","components/Settings/ProxyOptions/styles.js","api/user-options-api.js","containers/Settings/ProxyOptions/index.js","components/Settings/index.js","components/Settings/styles.js","components/About/index.js","api/organization-api.js","components/OrganizationUsers/AddOrganization.js","containers/Authorities.js","constants/authorities.js","api/coupon-code.js","components/CouponCode/index.js","components/Header/Optimized/index.js","components/Header/Optimized/styles.js","containers/CouponCode/index.jsx","components/Header/index.js","components/Header/styles.js","containers/Header/index.js","selectors/devices-selectors.js","components/EmptyLists/index.js","containers/Devices/EmptyDevices.js","components/Devices/Delete/index.js","components/ClipboardCopy/index.jsx","components/Devices/Modal/SSHModal.js","components/Devices/Modal/ProxyModal.js","containers/Devices/Modal/ProxyModal.js","components/Devices/Modal/VNCModal.js","utils/rdp-config.js","components/Devices/Modal/RDPModal.js","components/LoadingPane/index.js","components/Devices/Modal/ShareModal.js","selectors/user-device-selectors.js","containers/Devices/Modal/ShareModal.js","components/Devices/Modal/ChangeDeviceOwnerModal.js","containers/Devices/Modal/ChangeDeviceOwnerModal.js","components/SplitButton/index.js","components/SplitButton/styles.js","utils/tunnel-validations.js","components/shared/Star/index.js","components/Devices/Modal/HttpTunnelItem.js","components/Devices/Modal/HttpTunnelItemMobile.js","components/Devices/Modal/TunnelParamsModal.js","icons/index.js","components/Devices/Card/Device.js","components/Devices/Card/withDragToGroup.js","containers/Devices/Card/Device.js","constants/dragging-constants.js","components/Devices/Groups/Add/index.js","containers/Devices/Groups/Add/index.js","components/Devices/Groups/Delete/index.js","containers/Devices/Groups/Delete/index.js","components/Devices/Groups/Update/index.js","containers/Devices/Groups/Update/index.js","components/Devices/Groups/Default/index.js","containers/Devices/Groups/Default/index.js","components/Devices/Groups/TabContent.js","components/Devices/Groups/withDeviceDrop.js","components/Devices/Order/SortableDevice.js","components/Devices/Order/index.js","containers/Devices/Order/index.js","components/Devices/Groups/Order/SortableGroups.js","components/Devices/Groups/Order/index.js","containers/Devices/Groups/Order/index.js","components/Devices/DeviceList.js","components/Devices/Add/SetupInstructions.js","components/Devices/Add/index.js","containers/Devices/Add/index.js","components/Devices/index.js","containers/Devices/index.js","selectors/groups-selectors.js","utils/helpers.js","constants/tunnels.js","components/Tunnels/Modal/AddOrEditTunnelForm.js","components/Tunnels/Modal/AddOrEditTunnel.js","selectors/tunnels-selectors.js","hooks/use-unmount.js","components/shared/tunnelItem.js","components/Tunnels/Modal/ProxyTunnelInfo.js","components/shared/tunnelItemMobile.js","containers/shared/tunnelItem.js","containers/Tunnels/EmptyTunnels.js","components/Tunnels/Filters/Filters.js","components/Tunnels/index.js","containers/Tunnels/index.js","api/role-api.js","components/OrganizationUsers/EditInviteUser.js","components/shared/Grid/VirtualizedTable.js","components/shared/Grid/PaginationActions.js","components/shared/Grid/Toolbar.js","components/shared/Grid/Grid.js","components/OrganizationUsers/OrganizationUsers.js","components/OrganizationUsers/index.js","api/reports.js","utils/css-utils.js","constants/chart-color-palette.js","components/Usage/main-bar-chart.js","components/Usage/main-area-chart.js","components/Usage/index.js","hooks/element-size.js","hooks/window-size.js","containers/Main/WithHeader.js","containers/WithAuthenticationGuard.js","containers/Main/index.js","components/shared/Snackbar/snackbarContentWrapper.js","components/App/Message.jsx","containers/App/Message.jsx","components/App/index.jsx","registerServiceWorker.js","index.js","assets/images/tunnelin_main.jpg","assets/svg/filter.svg","constants/api-constants.js","styles/createContext.js"],"names":["getTokens","tokens","JSON","parse","localStorage","getItem","e","saveAuthToken","authToken","setItem","stringify","clearAuthToken","Object","keys","length","removeItem","getAuthToken","token","base64","split","replace","jsonPayload","decodeURIComponent","atob","map","c","concat","charCodeAt","toString","slice","join","parseJwt","organizationId","getHeaders","bearer","Authorization","getBearer","_opt_JetBrains_TeamCity_buildAgent_work_f9348292c8d41445_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__","Content-Type","api","strings","_len","arguments","interpolations","Array","_key","reduce","result","current","index","hasOwnProperty","BASE_DOMAIN","request","url","body","headers","method","undefined","payload","crossDomain","responseType","ajax","pipe","res","response","makePost","makeGet","makePut","makePatch","makeDelete","urlToToken","decoder","base64Url","unescape","Buffer","from","module","exports","__webpack_require__","p","browserHistory","createHistory","GLOBAL_COOKIE_MESSAGE","initialState","global","loading","login","signup","updatingCurrentUser","changingPassword","toggleTwoFactorAuth","regenerateTwoFactorAuthQR","message","cookies","error","success","insufficientlyAuthenticationDetails","loggedInUser","users","data","userDevices","get","add","remove","update","devices","statuses","count","lastAddedDeviceId","groups","tunnels","searchQuery","filters","property","values","uiFilters","value","globalInitialState","combineReducers","state","LOGIN_LOADING","LOGIN_SUCCESS","LOGOUT_SUCCESS","GET_LOGGED_IN_USER_LOADING","GET_LOGGED_IN_USER_SUCCESS","UPDATE_CURRENT_USER_SUCCESS","INSUFFICIENTLY_AUTHENTICATION_DETAILS","SIGNUP_SUCCESS","MAKE_GROUP_AS_DEFAULT_SUCCESS","GET_DEVICES_SUCCESS","ADD_DEVICE_SUCCESS","UPDATE_DEVICE_LOADING","UPDATE_DEVICE_SUCCESS","DELETE_DEVICE_LOADING","DELETE_DEVICE_SUCCESS","GET_DEVICES_STATUSES_SUCCESS","GET_GROUPS_SUCCESS","UPDATE_GROUPS_ORDERING_SUCCESS","ADD_GROUP_SUCCESS","DELETE_GROUP_SUCCESS","UPDATE_GROUP_SUCCESS","CLEAR_DEVICE_USERS","GET_DEVICE_USERS_SUCCESS","UPDATE_DEVICES_ORDERING_SUCCESS","ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING","ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS","REMOVE_CURRENT_USER_FROM_DEVICE_LOADING","REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS","UPDATE_TUNNEL_SEARCH","UPDATE_TUNNEL_UI_FILTERS","UPDATE_TUNNEL_FILTER","VERIFY_EMAIL_SUCCESS","GET_TUNNEL_STATUSES_SUCCES","singlePayloadReducer","type","action","MD5","require","GRAVATAR_PREFIX","GRAVATAR_QUERY_DEFAULT","loggedInUserHash","getGravatarUrl","email","size","getLoggedInUserIdHash","constructLoggedInUserIdHash","id","loginLoading","_id","objectSpread","defaultGroup","emailVerified","changeOrganization","toConsumableArray","orderedDevices","r","findIndex","order","removedUserDevices","newState","removedUserDeviceIds","userDevice","device","filter","_ref","indexOf","datum","find","_action$payload","currentIndex","currentlyLoading","splice","_action$payload2","filterToUpdate","existingFilter","uiF","userIdHash","storageFilters","f","valueIndex","newValues","push","tunnelReducer","addedUserDevices","idMapper","isEqual","_ref2","shared","g","sharedIndex","appReducer","routing","routerReducer","rootReducer","setConnectivityStatus","createAction","setGlobalMessageError","setGlobalMessageSuccess","setGlobalMessageCookies","loginSuccess","logout","logoutSuccess","getLoggedInUser","getLoggedInUserLoading","getLoggedInUserSuccess","getLoggedInUserError","updateCurrentUser","updateCurrentUserLoading","updateCurrentUserSuccess","changeCurrentUserPassword","changeCurrentUserPasswordLoading","verifyEmailSuccess","signupActivateOrgUser","signupLoading","signupSuccess","regenerateTwoFactorAuthQRLoading","toggleTwoFactorAuthLoading","API_URL","SIGNUP","_templateObject","SIGNUP_ACTIVATE_ORG_USER","_templateObject2","SIGNUP_FOR_GET_DEVICE","_templateObject3","LOGIN","_templateObject4","LOGOUT","_templateObject5","GET_LOGGED_IN_USER","_templateObject6","CHANGE_PASSWORD","_templateObject7","SET_NEW_PASSWORD","_templateObject8","CHANGE_ADD_DEVICE_PASSWORD","_templateObject9","PASSWORD_RECOVERY","_templateObject10","GET_SUGGESTED_USERNAME","_templateObject11","CHECK_USERNAME","_templateObject12","VERIFY_EMAIL","_templateObject13","TOGGLE_TWO_FACTOR_AUTH","_templateObject14","CHANGE_ORGANIZATION","orgId","_templateObject15","REGENERATE_TWO_FACTOR_AUTHENTICATION_QR","_templateObject16","parseErrorMessage","status","navigator","onLine","name","constructGlobalErrorMessage","react_default","a","createElement","err","key","combineEpics","action$","ofType","password","switchMap","twoFactorAuthStr","redirect","merge","of","mergeMap","Error","user","location","pathname","redirectTo","catchError","actions","details","iif","apply","oldPassword","newPassword","changePassword","enabled","twoFactorAuth","window","reload","UNAUTHENTICATED_URLS","authToken$","Observable","create","observer","next","complete","_browserHistory$locat","search","newLocation","toLowerCase","GET_DEVICES","device_api_templateObject","ADD_DEVICE","device_api_templateObject2","UPDATE_DEVICE","device_api_templateObject3","DELETE_DEVICE","device_api_templateObject4","GET_DEVICE_USERS","device_api_templateObject5","ADD_OR_REMOVE_USERS_TO_DEVICE","device_api_templateObject6","UPDATE_DEVICES_ORDERING","device_api_templateObject7","CHANGE_DEVICE_OWNER","device_api_templateObject8","CHANGE_DEVICE_OWNER_APPROVE","device_api_templateObject9","GET_DEVICE_TUNNELS","deviceId","device_api_templateObject10","GET_DEVICES_STATUSES","device_api_templateObject11","getDevices","getDevicesLoading","getDevicesSuccess","getDevicesError","updateDevicesOrdering","updateDevicesOrderingLoading","updateDevicesOrderingSuccess","updateDevicesOrderingError","addDevice","addDeviceLoading","addDeviceSuccess","updateDevice","updateDeviceLoading","updateDeviceSuccess","deleteDevice","deleteDeviceLoading","deleteDeviceSuccess","getStatuses","getStatusesLoading","getStatusesSuccess","user_device_api_templateObject","user_device_api_templateObject2","HAS_TUNNEL_SETTINGS","user_device_api_templateObject3","TUNNEL_SETTINGS","user_device_api_templateObject4","addOrRemoveUsersToDevice","removedUsers","emails","clearDeviceUsers","getDeviceUsers","getDeviceUsersLoading","getDeviceUsersSuccess","addOrRemoveUsersToDeviceLoading","addOrRemoveUsersToDeviceSuccess","removeCurrentUserFromDevice","removeCurrentUserFromDeviceLoading","removeCurrentUserFromDeviceSuccess","createSelector","selectLoading","signupInProgress","_ref4","selectGlobalMessage","_ref5","selectUpdateCurrentUserLoading","_ref9","deletedDevice","state$","GET_GROUPS","group_api_templateObject","ADD_GROUP","group_api_templateObject2","UPDATE_GROUP","group_api_templateObject3","DELETE_GROUP","group_api_templateObject4","UPDATE_GROUPS_ORDERING","group_api_templateObject5","getGroups","getGroupsLoading","getGroupsSuccess","updateGroupsOrdering","updateGroupsOrderingLoading","updateGroupsOrderingSuccess","addGroup","addGroupLoading","addGroupSuccess","deleteGroup","deleteGroupLoading","deleteGroupSuccess","updateGroup","updateGroupLoading","updateGroupSuccess","group","groupId","deletedGroup","GET_USERS","users_api_templateObject","ORG_USERS","users_api_templateObject2","GET_USERS_BY_EMAILS","users_api_templateObject3","GET_USER","users_api_templateObject4","MAKE_GROUP_AS_DEFAULT","users_api_templateObject5","SEND_ACTIVATION_EMAIL","users_api_templateObject6","ADD_ORG_USER","users_api_templateObject7","ACTIVATE_ORG_USER","users_api_templateObject8","RESEND_INVITATION_ORG_USER","users_api_templateObject9","makeGroupAsDefault","makeGroupAsDefaultLoading","makeGroupAsDefaultSuccess","sendActivationEmail","sendActivationEmailLoading","ADD_TUNNEL","tunnel_api_templateObject","UPDATE_TUNNEL","tunnel_api_templateObject2","SSH","tunnel_api_templateObject3","PROXY","tunnel_api_templateObject4","VNC","tunnel_api_templateObject5","RDP","tunnel_api_templateObject6","GET_TUNNELS","query","tunnel_api_templateObject7","GET_DEVICE_HTTP_TUNNELS","tunnel_api_templateObject8","DELETE_CUSTOM_TUNNEL","tunnel_api_templateObject9","STOP_TUNNEL","tunnel_api_templateObject10","STOP_TUNNELS","tunnel_api_templateObject11","RELOAD_TUNNELS","tunnel_api_templateObject12","GET_TUNNELS_STATUSES","tunnel_api_templateObject13","openSSHTunnel","openTunnel","stopTunnel","addTunnel","updateTunnel","tunnelId","openVNCTunnel","openRDPTunnel","getTunnels","i","v","q","charAt","deleteCustomTunnel","updateTunnelSearch","resetAllTunnelFilters","updateTunnelUiFilters","updateTunnelFilter","getTunnelStatuses","getTunnelStatusesSuccess","appEpics","authenticationEpics","deviceEpic","groupEpic","usersEpic","tunnelEpic","routeMiddleware","routerMiddleware","epicMiddleware","createEpicMiddleware","store","middlewares","createStore","compose","applyMiddleware","run","rootEpic","configureStore","__PRELOADED_STATE__","AppWrapper","props","children","withStyles","theme","@global","html","background","palette","default","WebkitFontSmoothing","MozOsxFontSmoothing","margin","withRoot","Component","_React$Component","WithRoot","_this","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","pageContext","getPageContext","inherits","createClass","jssStyles","document","querySelector","parentNode","removeChild","react_jss_lib","registry","sheetsRegistry","generateClassName","core_styles","sheetsManager","CssBaseline_default","assign","React","root","display","flexDirection","justifyContent","content","padding","contentBody","actionsBar","height","alignItems","flex1","flex","fontSizeH1","fontSize","formControl","marginTop","spacing","unit","marginBottom","loginButton","mainActions","passwordRecoveryLink","minHeight","passwordRecoveryLinkWrapper","classes","loginInProgress","mode","_useState","useState","_useState2","slicedToArray","setEmail","_useState3","_useState4","setPassword","_useState5","_useState6","setTwoFactorAuthStr","_useState7","_useState8","showPassword","setShowPassword","_useState9","_useState10","emailError","setEmailError","_useState11","_useState12","passwordError","setPasswordError","_useState13","_useState14","twoFactorAuthStrError","setTwoFactorAuthStrError","_useState15","_useState16","showTwoFactorAuthField","setShowTwoFactorAuthField","useEffect","handleLoginButtonClick","setToState","errors","isValid","trim","validateEmail","validateFormFields","inputProps","onKeyDown","event","keyCode","Fragment","Card_default","className","CardContent_default","Typography_default","color","variant","h1","FormControl_default","required","InputLabel_default","htmlFor","Input_default","autoComplete","autoFocus","onChange","target","FormHelperText_default","endAdornment","InputAdornment_default","position","IconButton_default","onClick","tabIndex","onMouseDown","preventDefault","VisibilityOff_default","Visibility_default","CardActions_default","Button_default","disabled","component","Link","to","index_es","mdUp","style","right","bottom","zIndex","Link_default","href","smDown","wrapActionCreators","dispatch","bindActionCreators","mapStateToProps","createStructuredSelector","_ref3","_ref14","mapDispatchToProps","connect","newOwnerEmail","Authentication_Login","validateFullname","fullName","fullNameError","emailValidator","validateUsername","username","usernameError","test","Signup","checkUserName","debounce","setState","isCheckingUsername","userNameNotExists","subscribe","d","handleSignup","handleChange","prop","defineProperty","handleMouseDownPassword","handleClickShowPassword","stateProp","_this$props","_this$state","confirmPassword","_this$state2","confirmPasswordError","_validateFullname","isValidFullname","fullNameErrors","_validateEmail","isValidEmail","emailErrors","_validateUsername","isValidUserName","userNameErrors","_this$validatePasswor","validatePasswords","areValidPasswords","passwordsErrors","fromField","_this$state3","_getSuggestedUsername","_this$state4","onBlur","_this$state5","_validateFullname2","_validateEmail2","showConfirmPassword","_this$props2","_this$state6","userNameAdornment","CircularProgress_default","CheckOutlined_default","Error_default","privacy","button","marginRight","marginLeft","Authentication_Signup","decodeJwt","noVerify","jwt","decode","SignUpAndApprove","isSignUpView","handleChangeCardViewButtonClick","dataFromToken","wrapper","titleText","organizationName","cardViewChangeBtn","OrganizationInvitation_Signup","containers_Authentication_Login","textAlign","withMobileDialog","width","colorGreen","history","OrganizationInvitation_SignUpAndApprove","oldOwnerEmail","deviceName","OrganizationInvitationHOC","initiallyAuthenticated","tokenPart","queryString","components_OrganizationInvitation","withRouter","PasswordRecovery","disablePasswordRecoveryButton","handlePasswordRecoveryClick","handlePasswordRecovery","passwordRecoveryLoading","passwordRecoverySuccess","passwordRecoveryButton","PasswordRecoveryHOC","_this$props$actions","passwordRecovery","Authentication_PasswordRecovery","SetNewPassword","showNewPassword","confirmNewPassword","showConfirmNewPassword","setNewPasswordError","handleClickShowNewPassword","handleClickShowConfirmNewPassword","handleNewPasswordChange","_this$setState","handleConfirmNewPasswordChange","_this$setState2","handleGoToLogin","handleSaveNewPasswordClick","handleSetNewPasswordPassword","changePasswordInProgress","changePasswordSuccess","userFullName","getMeError","SetNewPasswordHOC","changePasswordRecoveryToken","password_recovery_token","setNewPasswordWithRecoveryToken","_this2","Authentication_SetNewPassword","GetSendedDevice","validationError","validationNumbers","disableGetDeviceButton","handleGetDeviceClick","handleHomeBtnClick","getNewDeviceLoading","getNewDeviceSuccess","Card_Card","CardContent_CardContent","Typography_Typography","successMessage","FormControl_FormControl","InputLabel_InputLabel","Input_Input","FormHelperText_FormHelperText","CardActions_CardActions","Button_Button","GetSendedDeviceHoc","changeDeviceOwnerApprove","Devices_GetSendedDevice","SignupGetDeviceHOC","handleSignupForGetDevice","signupForGetDevice","_data$data","SignUpAndChangeDeviceOwner","GetDevice","SignUpAndChangeDeviceOwnerHOC","SignUpOrLoginForGetDevice","ActivateAccount","onSendActivationEmailButtonClick","align","Users_ActivateAccount","ChangeDeviceOwner","readyForGetDevice","handleChangeAccountClick","handleGetDeviceWithCurrentAccClick","containers_Devices_GetSendedDevice","containers_Users_ActivateAccount","Devices_SignUpOrLoginForGetDevice","ChangeDeviceOwnerHOC","change_device_owner_token","Devices_ChangeDeviceOwner","LinearProgress_default","VerifyEmail","verifyEmail","LoadingPane_Loader","hasByName","arr","some","item","containers_WithHelmet","options","opts","_opts$og","og","_opts$twitter","twitter","_opts$meta","meta","image","applyTitlePrefix","description","restOptions","objectWithoutProperties","title","ogTitle","ogDescription","twitterTitle","twitterDescription","helmetOptions","MAIN_TITLE","ogMetas","htmlAttrs","lang","src","alt","prefix","Helmet","GET_TERMINAL_TOKEN","devideId","userId","terminal_api_templateObject","loadToken","settings","getTerminalToken","connection","hasTunnelSettingsForType","hasTunnelSettingsForTypeApi","getStore","replaceOrCreateTunnelSettingsForType","config","replaceOrCreateTunnelSettingsForTypeApi","mapTo","removeTunnelSettingsForType","removeTunnelSettingsForTypeApi","client","styles","progress","withToken","WrappedComponent","WithTokenCheck","_getPrototypeOf2","args","firstTime","onSettingsDataReady","hasConfig","saveConfig","rest","isEmpty","_this3","_this$props3","hostname","port","defaultSettings","_this$props4","_this$props4$classes","displayName","handlers","addListener","listener","removeListener","getClient","mqtt","MQTT_SERVER_URL","keepalive","on","t","forEach","subscribeToTopic","topic","realTopic","MQTT_ENV","unsubscribeFromTopic","unsubscribe","withTunnel","WithTunnelCheck","tunnelType","tunnel","fn","address","actionName","_this$props2$classes","GUAC_CLIENT_STATE_DISCONNECTED","GuacCanvas","rootDiv","guacConnected","guac","onGuacError","onError","onGuacDisconnect","onGuacClientStateChange","handleRef","handleScroll","ev","onCanvasScroll","nativeEvent","srcElement","scrollTop","scrollLeft","setupGuacClient","connectGuacClient","prevProps","oldWidth","oldHeight","newWidth","newHeight","sendSize","disconnect","onGuacClientReady","Client","WebSocketTunnel","TERMINAL_URL","onGuacClientConnectCalled","element","getDisplay","getElement","appendChild","onerror","onstatechange","canvas","onScroll","bind","ref","overflowX","overflowY","&::-webkit-scrollbar","webkitAppearance","&::-webkit-scrollbar-button","&::-webkit-scrollbar-thumb","borderRadius","backgroundColor","&::-webkit-scrollbar-track-piece","&>div>div","overflow","en_us_qwerty","language","Back","Tab","Enter","Esc","Home","PgUp","PgDn","End","Ins","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Del","Space","Left","keysym","Up","Right","Down","Menu","LShift","modifier","RShift","LCtrl","RCtrl","Caps","LAlt","RAlt","Super","`","requires","1","2","3","4","5","6","7","8","9","0","-","=",",",".","/","[","]","\\",";","'","w","y","u","o","s","h","j","k","l","z","x","b","n","m","layout","main","alpha","movement","keyWidths","canvasWrapper","keyboardIcon","settingsIcon","keyboard","withOptions","mouse","touch","onScreenKeyboard","WithOptions","keyboardOpened","onRefReady","terminalInstance","setupGuacListeners","sendMouseState","setClipboard","_setClipboard","assertThisInitialized","_getClipboard","_setGuacClipboard","_getGuacClipboard","clipboard","guacClipboard","ignoreMouse","setupGuacMouse","setupGuacKeyboard","setupGuacTouch","setupOnScreenKeyboardLayout","onGuacMouseDownEvent","mouseState","left","mouseLeftKeyDownState","mouseRightKeyDownState","onGuacMouseMoveEvent","origMoveState","upState","onGuacMouseUpEvent","onGuacTouchDownEvent","onGuacTouchMoveEvent","onGuacTouchUpEvent","onGuacKeyDown","sendKeyEvent","onGuacKeyUp","onGuacClipboardChange","stream","mimeType","StringReader","ontext","onGuacClipboardTextChange","text","clipboardText","writeText","textArea","top","border","outline","boxShadow","focus","select","execCommand","copyTextToClipboard","guacTouch","updateClientScroll","onScreenKeyboardDiv","guacMouse","guacKeyboard","guacOnScreenKeyboard","handleOnScreenKeyboardClick","handleSettingsIconClick","onSettingsIconClick","handleKeyboardRef","resize","onUnMount","destroyListeners","onclipboard","GuacMouse","onmousedown","onmouseup","onmousemove","GuacKeyboard","onkeydown","onkeyup","Touchscreen","OnScreenKeyboard","onScreenKeyboardLayout","_this$props$classes","AutoSizer_default","aria-label","KeyboardHide_default","Keyboard_default","Settings_default","Canvas","PasswordField","onEnter","isPasswordRequired","label","defaultProps","VNCSettings","handleOKClick","onDataReady","handleSaveConfigChange","checked","handleCloseClick","onCloseClick","card","closable","components_PasswordField","FormControlLabel_default","control","Checkbox_default","maxWidth","ClientWrapper","clipboardSyncInterval","setInterval","onClipboardSync","readText","then","oldClipboard","catch","clearInterval","clientWrapper","GuacClient","VNCTerminal","showSettings","onSettingCloseClick","onGuacClientError","close","oldToken","newToken","VNCTerminal_Settings","SSHSettings","handleSettingsActiveTabChange","settingsActiveTab","handleAuthenticationMethodChange","authenticationMethod","handleUsernameChange","authentication","handlePasswordChange","privateKey","passphrase","handlePrivateKeyChange","handlePassphraseChange","handleColorSchemeChange","colorScheme","handleFontNameChange","fontName","handleFontSizeChange","_this$state$authentic","_this$state$display","private-key","color-scheme","font-name","font-size","colorSchemeInputProps","fontSizeInputProps","min","settingsTabs","authenticationMethodWrapper","authenticationMethodLabel","authenticationMethodSelect","_this$state2$authenti","_this$state2$display","Tabs_default","indicatorColor","textColor","Tab_default","Select_default","MenuItem_default","multiline","rows","paddingTop","subHeader","SSHTerminal","SSHTerminal_Settings","SSHTerminal_Client","performanceFlagsCmps","RDPSettings","_this$state$performan","performanceFlags","enableTheming","enableMenuAnimations","enableFullWindowDrag","enableFontSmoothing","enableDesktopComposition","enableWallpaper","enable-wallpaper","enable-theming","enable-font-smoothing","enable-full-window-drag","enable-desktop-composition","enable-menu-animations","handlePerformanceFlagChange","renderPerformanceFlagCmp","performanceFlagCmp","formControlCheckbox","formControlCheckboxHelperText","_this$props$classes2","paddingLeft","paddingRight","RDPTerminal","onGuacClienError","RDPTerminal_Settings","VNCTerminalHOC","autoretry","SSHTerminalHOC","RDPTerminalHOC","Switch","Route","path","render","_ref$match$params","match","params","VNCTerminalWithHelmet","WithHelmet","tunnelinVNCTerminalImage","_ref2$match$params","SSHTerminalWithHelmet","tunnelinSSHTerminalImage","_ref3$match$params","RDPTerminalWithHelmet","tunnelinRDPTerminalImage","HAS_GRAVATAR","general_api_templateObject","hasGravatar","toPromise","GeneralOptions","handleSaveButtonClick","handleFullNameChange","_this$state$user","_this$props$loggedInU","oldFullName","oldUsername","validateFields","entries","profilePic","determineProfilePic","updateLoading","onCancel","expanded","onExpansionPanelChange","ExpansionPanel_default","ExpansionPanelSummary_default","expandIcon","ExpandMore_default","column33","heading","ExpansionPanelDetails_default","contentWrap","avatarWrap","Avatar_default","infoWrap","Divider_default","ExpansionPanelActions_default","flexBasis","typography","pxToRem","Profile_GeneralOptions","EmailOptions","handleEmailChange","oldEmail","paper","secondaryHeading","secondary","ChangePasswordForm","handleOldPasswordChange","validate","react","PasswordOptions","changePasswordForm","old","new","handleChangePasswordRef","handleChangePasswordFormFieldsChange","confirmNew","changePasswordLoading","ChangePasswordForm_ChangePasswordForm","_ref10","Profile_PasswordOptions","TwoFactorAuthenticationOptions","twoFactorAuthPanelDetails","Switch_default","labelPlacement","qrUrl","_ref12","_ref13","Profile_TwoFactorAuthenticationOptions","Profile","onGeneralExpansionPanelChange","onEmailExpansionPanelChange","onPasswordExpansionPanelChange","onTwoFactorAuthenticationChange","fullScreen","Dialog_default","open","onClose","aria-labelledby","DialogTitle_default","DialogContent_default","containers_Profile_GeneralOptions","containers_Profile_EmailOptions","containers_Profile_PasswordOptions","containers_Profile_TwoFactorAuthenticationOptions","ProxyOptions","fixedProxyConfig","updateFixedProxyConfig","updateProxyLoading","handleFixedProxyConfigChange","getFixedProxyConfig","option","profileConfigs","fixedProxy","UPDATE_FIXED_PROXY_CONFIG","user_options_api_templateObject","GET_FIXED_PROXY_CONFIG","user_options_api_templateObject2","ProxyOptionsHOC","Settings_ProxyOptions","Settings","onProxyOptionsPanelChange","containers_Settings_ProxyOptions","About","dialogContent","DialogContentText_default","process","DialogActions_default","GET_ORG","organization_api_templateObject","ADD_ORG","organization_api_templateObject2","UPDATE_ORG_USERS_ACCESS","organization_api_templateObject3","createOrganization","container","flexWrap","textField","dialogActions","menu","onSave","setName","setDescription","noValidate","TextField","DialogActions_DialogActions","Authorities","failback","authKey","include","uiConfig","includes","exclude","excludes","propTypes","PropTypes","object","isRequired","node","getDefaultRoute","possibleRoutes","isComponentAllowed","ROUTES_DEVICES_AUTH","ROUTES_TUNNELS_AUTH","ROUTES_CHANGEDEVICEOWNER_AUTH","ROUTES_USERS_AUTH","ROUTES_USAGE_AUTH","GET_COUPON","code","coupon_code_templateObject","APPLY_COUPON","coupon_code_templateObject2","getCouponCode","minWidth","codeInfo","couponCode","expiredDate","Date","duration","toLocaleDateString","setCode","durationString","setDurationString","setError","disableFields","asyncToGenerator","regenerator_default","mark","_callee","wrap","_context","prev","humanize","stop","paddingBottom","verticalAlign","applyCouponCode","getLoggedInUserAction","OptimizedHeader","handleAvatarClick","anchorEl","currentTarget","handleAvatarMenuClose","handleProfileClick","modal","handleSettingsClick","handleAddOrganizationClick","handleUsageClick","handleManageUsersClick","handleAboutClick","handleApplyCouponCodeClick","handleChangeOrgClick","handleLogoutClick","handleModalClose","handleDrawerOpen","openDrawer","handleDrawerClose","handleMainMenuChange","currentMenu","addOrganization","menuTitle","avatarCmp","orgs","disableRipple","aria-owns","aria-haspopup","avatarButton","purpleAvatar","drawer","Drawer_default","anchor","drawerPaper","disableEnforceFocus","drawerHeader","selectedList","ChevronLeft_default","containers_Authorities","data-cmpauthkey","Select_Select","input","AppBar_default","Toolbar_default","toolbar","menuButton","icons_Menu_default","flexGrow","placement","DoneSharp_default","Menu_default","components_Profile","components_Settings","components_About","components_CouponCode","OrganizationUsers_AddOrganization","textTransform","deepPurple","allAction","CouponCode","Header","activeTabIndex","orgSelector","createdBy","tabs","scrollButtons","icon","Devices_default","classNames","tab","headerNavTab","Looks_default","HelpOutline_default","containers_CouponCode","HeaderHOC","locationMap","lc","substring","Hidden_default","Optimized","src_components_Header","selectDevicesStatuses","selectDevicesStatusesData","_ref7","selectDevices","statusesData","msg","lastPingMessage","console","log","socketData","EmptyLists","_classNames","messageTitle","buttons","mediaType","CardMedia_default","media","mediaVertical","mediaHorizontal","backgroundSize","EmptyDevices","handleAddClick","onAddDevice","components_EmptyLists","Add_default","addModalContent","transform","DeleteModal","onDelete","dialogContextContent","yesButtonContent","ClipboardCopy","linuxCommand","copied","setCopied","react_copy_to_clipboard_lib","onCopy","wordBreak","prototype","string","mobileText","fontWeight","cursor","primary","colorRed","_props$sshConfig$tunn","sshConfig","engine","clientPort","components_ClipboardCopy","rel","SSH_HELP_URL","_props$proxyConfig$tu","proxyConfig","PROXY_HELP_URL","Modal_ProxyModal","_props$vncConfig$tunn","vncConfig","buildVNCFile","encodeURIComponent","download","VNC_HELP_URL","arrayMatchTransform","array","increment","def","isNumber","isUndefined","mappingStructure","deleteCredentialsAfter","safeMode","autoReconnect","fullscreen","colors","compression","connectionType","networkAutoDetect","bandwidthAutoDetect","showWallpaper","fontSmoothing","desktopComposition","showDraggedWindow","showMenuAnimations","showThemes","showBlinkingCursor","audioPlayMode","audioCaptureMode","enableLocalPrinters","enableLocalCOMPorts","enableSmartCards","enableClipboard","enablePlugAndPlayDevices","enableDrives","enablePos","launch","launchWorkingDirectory","mapping","buildRdpFile","rdpConfigText","getRdpFileContent","_props$rdpConfig$tunn","rdpConfig","RDP_HELP_URL","LoadingPane","wrapperClass","ShareModal","getEnteredEmails","onEmailChange","emailValues","onToggleUserDeviceIconClick","newUserDevices","renderUserListItem","listItemTextRemoved","listItemText","_userDevice$user","owner","isRemoved","ListItem_default","dense","divider","ListItemText_default","ListItemSecondaryAction_default","Close_default","validateEmails","newDeviceUsers","deviceUsers","deviceUsersLoading","addingOrRemovingUsersToDevice","canSave","components_LoadingPane","List_default","deviceUser","fullWidth","aria-describedby","textDecoration","ShareModelHOC","Modal_ShareModal","adding","removing","ChangeDeviceOwnerModal","tunnelsToMove","handleChangeOwner","handleChangeDeviceOwner","addTunnelIdToOwnership","removeTunnelIdToOwnership","newIds","indexOfRemoved","renderTunnelItem","tunnelToOwnershipItem","Checkbox_Checkbox_default","selectTunnelCheckbox","selectTunnelName","changeDeviceOwnerLoading","changeDeviceOwnerSuccess","getTunnelsError","getTunnelsLoading","successText","tunnelsToOwnership","actionsWrapper","lineHeight","ChangeDeviceOwnerModalHOC","doGetTunnels","_this$props2$actions","changeDeviceOwner","verificationKey","Modal_ChangeDeviceOwnerModal","SplitButton","onArrowClick","stopPropagation","handleClose","menuItems","linkTo","buttonCls","buttonWrapper","ArrowDropDown_default","Boolean","menuItem","validateNameField","nameError","isValidTunnelName","validateDeviceField","validateTypeField","validateLocalPortField","localPort","localPortError","parsedLocalPort","parseFloat","Number","isInteger","isValidLocalPort","active","StarTwoTone_default","borderBottom","urls","tunnelActionIcon","disabledTunnelActionIcon","circularProgress","_ref$tunnel","dashUrl","favourite","slashUrl","initialStatus","tunnelEdit","tunnelDelete","handleFavouriteClick","doRefresh","doStart","setDoStart","doStop","setDoStop","changeTunnelStateInProcess","setChangeTunnelStateInProcess","setStatus","subscribeToTopicCallback","messageActionName","canceled","shared_Star","icons_Link_default","Delete_default","Edit_default","PlayArrow_default","Refresh_default","Stop_default","circularIcon","tunnelActionsAnchorEl","setTunnelActionsAnchorEl","moreActionsButton","MoreVert_default","generatedNameItem","tunnelsWrapper","maxHeight","addFormWrapper","dialog","noTunnelsYetDiv","addAndStartButton","addButton","addTunnelForm","@media (max-width: 959px)","addTunnelHttp","httpUrlsWrapper","setTunnels","addMode","setAddMode","setNameError","setLocalPort","setLocalPortError","handleHTTP","setHandleHTTP","tunnelForEdit","setTunnelForEdit","_useState17","_useState18","doAddTunnel","setDoAddTunnel","_useState19","_useState20","doEditTunnel","setDoEditTunnel","_useState21","_useState22","tunnelForDelete","setTunnelForDelete","_useState23","_useState24","doDeleteTunnel","setDoDeleteTunnel","_useState25","_useState26","setDoRefresh","_useState27","_useState28","allTunnels","setAllTunnels","_useState29","auth","_useState30","tunnelPassword","setTunnelPassword","_useState31","_useState32","val","getDeviceHttpTunnels","sort","t1","t2","sortTunnels","firewall","allowConnectionsFrom","connectionsRateLimiting","initializationTimeLimiting","autoClose","newTunnels","oldTunnel","tun","setTimeout","validateLocalPort","tunnelOnTheSamePort","String","validateName","validateForm","nError","lError","closeConfirmDialog","DialogTitle_DialogTitle_default","Modal_HttpTunnelItem","Modal_HttpTunnelItemMobile","autoWidth","leftSide","MacIcon","SvgIcon_default","stroke","WindowsIcon","LinuxIcon","LinuxConsoleIcon","points","IotIcon","viewBox","enableBackground","fill","RaspberryPiIcon","Device","reRenderInterval","onReRender","forceUpdate","onProxyClick","onHTTPClick","onShareDeviceClick","handleMenuClose","onEditTitleClick","editMode","onChangeDeviceOwnerClick","onDeleteDeviceClick","onDeleteDevice","onCloseDeleteModal","onUnshareDevice","onCloseModal","onCloseSSHModal","onCloseProxyModal","onCloseVNCModal","onCloseRDPModal","onCancelUpdateClick","oldName","isUpdating","handleSave","handleNameChange","_this$props5","_this$props5$device","determineAvailability","newDate","now","_this$props$device$so","diffMs","lastSeen","diffMins","Math","round","handleMenuClick","cardActionsAnchorEl","onOpenSSHConfigurationClick","_this$props6","getSSHButtonLabel","_this$props7","_this$props7$device","link","getSSHLinkTo","_this$props$device","getSSHMenuItems","_this$props8","_this$props8$device","onOpenVNCConfigurationClick","_this$props9","onOpenRDPConfigurationClick","_this$props10","getVNCButtonLabel","_this$props11","_this$props11$device","getVNCLinkTo","_this$props$device2","getRDPLinkTo","_this$props$device3","getVNCMenuItems","_this$props12","_this$props12$device","getRDPMenuItems","_this$props13","_this$props13$device","onIpAddressTooltipClose","ipAddressTooltipOpenState","onIpAddressTooltipOpen","copiedTime","ipAddressTooltipTitle","onIpAddressCopied","newName","_this$props14","isDragging","statusesLoading","_device$socketData","loadavg","ip","time","_device$socketData2","uptime","isNaN","mins","floor","minsZero","hours","days","platform","win32","darwin","","aix","freebsd","linux","openbsd","sunos","IOT","lastSeenIndicatorClassName","disableButton","lastSeenIndicatorTooltipMessage","availabilityStatus","colorYellow","moment","fromNow","deleteModal","Delete","CardHeader_default","cardHeader","titleWrapper","Tooltip_default","FiberManualRecord_default","lastSeenIcon","Save_default","savelIcon","Cancel_default","cancelIcon","cardContent","section","onOpen","centerContent","components_SplitButton","Modal_SSHModal","Devices_Modal_ProxyModal","Modal_VNCModal","Modal_RDPModal","Modal_TunnelParamsModal","Devices_Modal_ShareModal","Devices_Modal_ChangeDeviceOwnerModal","&>div:first-child","opacity","whiteSpace","textOverflow","editIcon","textColorRed","dragSpec","beginDrag","canDrag","endDrag","monitor","didDrop","getDropResult","onDeviceDropToGroup","dragCollect","connectDragSource","dragSource","DraggableDevice","C","dropEffect","DragSource","withDragToGroup","AddDeviceGroup","handleAdd","groupsLength","Groups_Add","DeleteDeviceGroupModal","Groups_Delete","UpdateDeviceGroupModal","onUpdate","groupName","Update","ChangeDefaultGroupModal","onMakeAsDefault","Default","TabContent","_this$props$statusesC","statusesCountInGroup","onlineCount","awayCount","offlineCount","tabContent","circleIcon","deviceCountText","isOver","canDrop","dropSpec","drop","dropCollect","connectDropTarget","dropTarget","SortableDevice","onArrowDownClick","moveDevice","onArrowUpClick","devicesLength","Paper_default","sortableDeviceWrapper","sortableDeviceName","arrowButton","ArrowDropUp_default","OrderDevice","sortableDevices","updateCanSave","newDevices","dragIndex","direction","dropIndex","dragDevice","renderSortableDevice","Order_SortableDevice","Order","SortableGroup","moveGroup","sortableGroupWrapper","sortableGroupName","OrderGroups","orderedGroups","dragGroup","newGroups","renderSortableGroup","SortableGroups","Groups_Order","DroppableTabContent","DropTarget","withDeviceDrop","DeviceList","getSelectedGroupValue","selectedGroupValue","storageActiveGroupId","groupForSwitch","defaultGroupIndex","_loop","_ret","onDeviceGroupAdd","handleShowOrderDevicesModal","showOrderDevicesModal","handleShowAddGroupModal","openModal","handleShowOrderGroupsModal","showOrderGroupsModal","handleEditGroup","showUpdateGroupModal","handleDeleteGroup","showDeleteGroupModal","handleChangeDefaultGroup","showChangeDefaultGroupModal","handleCloseOrderDevicesModal","handleCloseAddGroupModal","showAddGroupModal","handleCloseOrderGroupsModal","handleCloseUpdateDeviceGroupModal","handleCloseDeleteDeviceGroupModal","handleCloseChangeDefaultGroupModal","emitInterval","handleGroupTabChange","renderDevice","devicesUpdating","deviceWrapper","Devices_Card_Device","renderGroup","_d$socketData","renderGroupTab","currentGroupDevices","sortBy","st","oldGroups","oldLoggedInUser","diff","oldGroup","removedGroup","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","done","return","selectedGroup","selectedGroupIsDefault","filteredDevices","devicesMain","onExited","dropDownMenuItem","listWrapper","Devices_Order","Devices_Groups_Add","Devices_Groups_Order","Groups_Update","Devices_Groups_Delete","Groups_Default","gridGap","gridTemplateColumns","boxSizing","overflowScrolling","WebkitOverflowScrolling","groupsFormControl","addGroupBtn","SetupInstructions","activeTab","setupLinuxCommand","PYTHON_CLIENT_URL","handleActiveTabChange","agent","userAgent","toLocaleLowerCase","Tabs_Tabs_default","Tab_Tab_default","@media (min-width: 1024px)","AddDevice","Add_SetupInstructions","AddDeviceHOC","addedDevice","Devices_Add","_ref6","Devices","showAddDeviceModal","closeAddDeviceModal","handleShowAddDeviceModal","renderContent","totalCount","devicesLoading","Devices_DeviceList","Devices_EmptyDevices","devicesError","contentWrapper","Hidden_Hidden_default","Fab_default","addButtonMobile","containers_Devices_Add","DevicesHOC","intervalId","components_Devices","_ref11","_ref8","bytesToSize","bytes","parseInt","pow","ALL_TUNNEL_TYPES","DEFAULT_LOCAL_PORTS","http","rdp","ssh","vnc","proxy","custom","addOrEditFormWrapper","sectionHeader","sectionRow","devicesMenuItemInner","rightSide","_ref$formData","formData","onNameChange","onDeviceIdChange","onTypeChange","onLocalPortChange","setConnectionsRateLimiting","setInitializationTimeLimiting","setAllowConnectionsFrom","ipAddresses","onIpAddressesChange","setAutoClose","deviceIdError","typeError","ipAddressErrors","onAddIpAddress","onRemoveIpAddress","disableFocusListener","disableHoverListener","disableTouchListener","Select_Select_default","MenuItem_MenuItem_default","toUpperCase","FormControlLabel_FormControlLabel_default","Lock_default","Remove_default","@media (min-width: 600px)","addOrEditTunnelForm","infoAboutReloadTunnelWrapper","infoAboutReloadTunnelText","infoAboutReloadTunnelTextMobile","onTunnelReady","handleStartClick","deviceAvailabilityStatus","_ref$actions","withStartAction","setDeviceId","setType","isArray","setIpAddresses","setDeviceIdError","setTypeError","setIpAddressErrors","_useState33","_useState34","_useState35","_useState36","newIpAddresses","newIpAddressErrors","isValidIpAddress","Modal_AddOrEditTunnelForm","InfoOutlined_default","dError","tError","allowConnectionsFromData","getSearchQuery","getFilters","getUiFilters","useUnmounted","unMounted","useRef","tunnelsStatuses","tunnelItem","itemWrapper","tunnelItemLeftPart","tunnelItemLeftPartTop","tunnelItemLeftPartBottom","tooltipText","sshTunnelUrl","sshTunnelUrlInner","fontFamily","generatedNameWrapperItem","tunnelName","tunnelNameInner","favouriteWrapper","deviceNameInner","sshTunnelUrlTooltip","tunnelActionButtonsWrapper","circularWrapper","_classNames2","_classNames3","startTime","stopTime","_ref$tunnel$engine","reloadingTunnelsInProcess","stoppingTunnelsInProcess","devicesStatuses","openDeleteConfirmDialog","setOpenDeleteConfirmDialog","editTunnel","setEditTunnel","tooltipCopiedTime","setTooltipCopiedTime","tooltipTitle","setTooltipTitle","tooltipOpenState","setTooltipOpenState","doRestartAfterEditing","setDoRestartAfterEditing","editedTunnel","useMemo","ls","_unused","tunnelUsageData","currentTunnelStatus","ts","info","networks","eth0","rxBytes","rx_bytes","txBytes","tx_bytes","sshTunnelUrlClipboardText","handleStopClick","closeDeleteTunnelConfirmation","Tooltip_Tooltip_default","tooltipTitleData","Modal_AddOrEditTunnel","Dialog_Dialog_default","DialogContent_DialogContent_default","DialogContentText_DialogContentText_default","DialogActions_DialogActions_default","@media (min-height: 450px)","accessingInfoWrapper","showProxyTunnelInfo","setShowProxyTunnelInfo","proxyTunnelInfoMessage","setProxyTunnelInfoMessage","Menu_Menu_default","Modal_ProxyTunnelInfo","Button_Button_default","tunnelFromProps","setTunnel","tunnelItemMobile","EmptyTunnels","onAddTunnel","existingFilters","multiple","renderValue","noFilters","tunnelsPage","tunnelPageWrapper","tunnelItemsWrapper","tunnelItemsHeader","tunnelItemsHeaderMobile","columnHeader","headerTunnelName","headerDeviceName","headerDeviceNameMobile","headerUrl","headerLocalPort","headerLocalPortMobile","headerActions","tunnelsHeaderActionsMobileIcon","tunnelItemsBody","breakpoints","down","noTunnelsFound","noTunnelsFoundText","resetButton","tunnelPageHeader","blankSpace","tunnelsHeaderActionsIcon","allTunnelsCount","_ref$tunnels","onStopAllRunningTunnelsDone","onReloadAllRunningTunnelsDone","onStopAllRunningTunnels","onReloadAllRunningTunnels","showAddTunnelModal","setShowAddTunnelModal","tunnelsHeaderActionsAnchorEl","setTunnelsHeaderActionsAnchorEl","showConfirmDialog","setShowConfirmDialog","dialogMode","setDialogMode","handleShowAddTunnelModal","stopAllRunningTunnelsClick","reloadAllRunningTunnelsClick","handleTunnelsHeaderMenuClick","handleTunnelsHeaderMenuClose","noResults","showHeader","header","Tunnels_Filters_Filters","IconButton_IconButton_default","confirmDialogContent","LoadingOverlay_default","spinner","shared_tunnelItem","isItemInTunnelsPage","FilterIcon","Tunnels_EmptyTunnels","setAllTunnelsCount","setGetTunnelsError","setGetTunnelsLoading","setFirstTime","setStoppingTunnelsInProcess","setReloadingTunnelsInProcess","filteredTunnels","setFilteredTunnels","clearTimeout","getTunnelsData","getTunnelsDataDebounce","useCallback","uiFilterFn","tunnelStatusFilter","deviceStatusFilter","deviceStatus","components_Tunnels","deletedTunnelIndex","GET_ORG_ROLES","role_api_templateObject","onInvite","onEdit","userForEdit","roles","setRoles","roleId","role","setRole","setDevices","selectedDevices","setSelectedDevices","selectedTunnels","setSelectedTunnels","accessAllDevices","setAccessAllDevices","accessAllTunnels","setAccessAllTunnels","helpAnchorEl","setHelpAnchorEl","es_MenuItem_MenuItem","selected","child","allItem","items","unshift","renderDevicesMenuItems","renderTunnelsMenuItems","anchorOrigin","vertical","horizontal","transformOrigin","_tableCell","createStyles","table","& *","flexContainer","tableRow","tableRowHover","&:hover","grey","tableCell","noClick","columns","rowCount","_ref$headerHeight","headerHeight","_ref$rowHeight","rowHeight","onRowClick","rowClassName","rowGetter","getRowClassName","cellRenderer","cellData","columnIndex","TableCell_default","numeric","dist_es","renderer","_ref6$cellContentRend","cellContentRenderer","dataKey","other","cellRendererProps","headerRenderer","headerProps","_direction","_ref4$sortDirection","sortDirection","SortDirection","ASC","DESC","inner","disableSort","TableSortLabel_default","tableWrapper","deviceOrTunnelsLength","float","pagingActionsStyles","flexShrink","page","rowsPerPage","onChangePage","FirstPage_default","KeyboardArrowLeft_default","ceil","KeyboardArrowRight_default","max","LastPage_default","highlight","dark","lighten","spacer","searchTextField","numSelected","_ref$title","searchValue","onSearchValueChange","selectedGridToolbarElements","FilterList_default","pagination","loaderWrapper","isDataLoading","_ref$allDataCount","allDataCount","_ref$enablePagination","enablePagination","_ref$rowsPerPage","rowsPerPageOptions","_ref$page","_ref$onChangePage","onChangeRowsPerPage","gridToolbarTitle","searchValueChange","_ref$searchValueChang","searchValueChangeTimeOutForCall","_ref$labelRowsPerPage","labelRowsPerPage","_ref$showCheckBoxes","showCheckBoxes","providedTableRowHeight","rowSelectionChange","_ref$enableToolbar","enableToolbar","_ref$style","_ref$paper","isEverSearchValueChanged","setIsEverSearchValueChanged","setSelected","setSearchValue","tableRowHeight","setTableRowHeight","handleResize","innerWidth","addEventListener","removeEventListener","tId","rowClick","firstColumn","rowIndex","selectedIndex","newSelected","rowData","selectRow","Grid_Toolbar","VirtualizedTable","TablePagination_default","colSpan","ActionsComponent","TablePaginationActions","gridWrapper","actionIcon","organizationUsers","handelDeleteOrgUser","onEditOrgUserClick","resendInvitation","gridDefaultContextRenderer","contextProps","es_Tooltip_Tooltip","invitationEmail","shared_Grid_Grid","organizationList","noUsersContent","flex_1","doGetOraganizationUsers","setDoGetOraganizationUsers","isInviteUserDialogOpen","setIsInviteUserDialogOpen","setOrganizationUsers","editInviteUserPopUpMode","setEditInviteUserPopUpMode","setUserForEdit","emailForDeleteUser","setEmailForDeleteUser","components_OrganizationUsers_OrganizationUsers","resendInvitationOrgUser","OrganizationUsers_EditInviteUser","inviteOrgUser","updateOrgUserAccess","GET_NET_DATA_REPORT","reports_templateObject","getRandomColor","random","chart_color_palette","MainBarChart","_ref$width","_ref$height","netDataType","_ref$animationDuratio","animationDuration","es6","strokeDasharray","tick","dy","textAnchor","interval","tickFormatter","usage","shape","getPath","entry","MainAreaChart","areaData","month","day","year","col","amt","usePound","num","lightenDarkenColor","charts","cardTop","cardOnBottom","objectDestructuringEmpty","setLoading","setData","barChartData","setBarChartData","lineChartData","setLineChartData","setNetDataType","setTunnelId","startDate","setStartDate","byType","endtDate","setEndtDate","advancedFiltersData","setAdvancedFiltersData","advancedFiltersSelectedData","setAdvancedFiltersSelectedData","chartContainerRef","_useElementSize","el","offsetWidth","elementWidth","setElementWidth","offsetHeight","elementHeight","setElementHeight","useElementSize","chartContainerHeight","chartContainerWidth","windowWidth","setWindowWidth","innerHeight","windowHeight","setWindowHeight","useWindowSize","total","getNetDataReport","chartData","chartD","chartDataItem","abs","lineData","getTime","uniques","finalLineData","ld","material_ui_pickers_esm","utils","DateFnsUtils","newData","ind","onCheckbocChange","main_bar_chart","main_area_chart","DevicesWithHelmet","tunnelinDevicesImage","TunnelsWithHelmet","tunnelinTunnelsImage","WithHeader","fetchDeviceStatuses","containers_Header","Tunnels","OrgUsers","Usage","Redirect","authenticatedRoot","unAuthenticatedRoot","WithAuthenticationGuard","authenticatedGuard","WithAuthGuard","isAuthenticated","propsWithOutClasses","isEmailVerified","withAuthGuard","Terminal","variantIcon","CheckCircleIcon","warning","WarningIcon","ErrorIcon","InfoIcon","green","amber","iconVariant","Icon","SnackbarContent_default","Message","handleErrorSnackbarClose","handleSuccessSnackbarClose","handleCookiesSnackbarClose","cookiesMessage","errorMessage","successMessages","errorMessages","cookiesSnackbar","Snackbar_default","snackbarContentWrapper","errorSnackbar","autoHideDuration","successSnackbar","MessageWrapper","LoginWithHelmet","tunnelinMainImagePath","SignupWithHelmet","PasswordRecoveryWithHelmet","App","afterDidMount","isAuthenticating","doInitApp","onLineInterval","_hsq","HubSpotConversations","widget","refresh","Login","OrganizationInvitation","Main","containers_App_Message","DragDropContext","HTML5Backend","withMaterial","ReactDOM","es","Router","components_App","getElementById","serviceWorker","ready","registration","unregister","__webpack_exports__","REACT_APP_PROXY_HELP_URL","REACT_APP_RDP_HELP_URL","REACT_APP_VNC_HELP_URL","REACT_APP_SSH_HELP_URL","jss__WEBPACK_IMPORTED_MODULE_0__","_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_1__","_material_ui_core_colors__WEBPACK_IMPORTED_MODULE_2__","createMuiTheme","purple","useNextVariants","createPageContext","Map","SheetsRegistry","createGenerateClassName","browser","__INIT_MATERIAL_UI__"],"mappings":"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","file":"static/js/main.f95fd8ef.chunk.js","sourcesContent":["// @flow\nimport { ajax } from 'rxjs/ajax';\nimport { map } from 'rxjs/operators';\nimport base64Url from 'base64-url';\nimport { BASE_DOMAIN } from '../constants/api-constants';\n\nexport function parseJwt(token: string) {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join('')\n );\n\n return JSON.parse(jsonPayload);\n}\n\nexport function getTokens() {\n let tokens;\n try {\n tokens = JSON.parse(localStorage.getItem('tokens') || '{}');\n } catch (e) {\n tokens = {};\n }\n return tokens || {};\n}\n\nexport function saveAuthToken(authToken: string) {\n const tokens = getTokens();\n tokens.authToken = authToken;\n localStorage.setItem('tokens', JSON.stringify(tokens));\n}\n\nexport function clearAuthToken() {\n const tokens = getTokens();\n delete tokens.authToken;\n if (Object.keys(tokens).length) {\n localStorage.setItem('tokens', JSON.stringify(tokens));\n } else {\n localStorage.removeItem('tokens');\n }\n}\nexport function getAuthToken() {\n const { authToken } = getTokens();\n if (authToken) {\n try {\n const info = parseJwt(authToken);\n if (!info.organizationId) {\n clearAuthToken();\n return false;\n }\n } catch (e) {\n //\n }\n }\n return authToken || false;\n}\n\nexport function getBearer() {\n const authToken = getAuthToken();\n\n if (!authToken) {\n return false;\n }\n return {\n Authorization: `Bearer ${authToken}`\n };\n}\n\nexport function getHeaders() {\n const bearer = getBearer();\n if (!bearer) {\n return {};\n }\n\n return {\n ...bearer,\n 'Content-Type': 'application/json'\n };\n}\n\nexport function getBaseUrl() {\n return `${BASE_DOMAIN}/`;\n}\n\nexport const api = (strings: string[], ...interpolations: any): string =>\n strings.reduce((result, current, index) => {\n // eslint-disable-next-line\n result += current;\n\n // eslint-disable-next-line\n if (interpolations.hasOwnProperty(index)) {\n // eslint-disable-next-line\n result += interpolations[index];\n }\n\n return result;\n }, getBaseUrl());\n\nexport const request = (\n url: string,\n body: any,\n headers: any,\n method: string = 'GET'\n) => {\n const payload: any = {\n url,\n crossDomain: true,\n responseType: 'json',\n headers: {\n ...getHeaders(),\n ...headers\n },\n method\n };\n\n if (body) {\n payload.body = body;\n }\n\n // todo:: add generic error handlers\n return ajax(payload).pipe(map(res => res.response));\n};\n\nexport const makePost = (url: string, body: any, headers: any) =>\n request(url, body, headers, 'POST');\n\nexport const makeGet = (url: string, headers: any) =>\n request(url, null, headers, 'GET');\n\nexport const makePut = (url: string, body: any, headers: any) =>\n request(url, body, headers, 'PUT');\n\nexport const makePatch = (url: string, body: any, headers: any) =>\n request(url, body, headers, 'PATCH');\n\nexport const makeDelete = (url: string, body: any, headers: any) =>\n request(url, body, headers, 'DELETE');\n\nexport const makeGetPromise = (url: string) => makeGet(url).toPromise();\n\nexport function urlToToken(url, decoder = 'base64decode') {\n let base64 = url;\n if (decoder === 'base64decode') {\n base64 = base64Url.unescape(base64);\n }\n if (decoder === 'native') {\n base64 = decodeURIComponent(base64);\n }\n return Buffer.from(base64, 'base64').toString('latin1');\n}\n","module.exports = __webpack_public_path__ + \"static/media/tunnelin_vnc.dd590df5.jpg\";","module.exports = __webpack_public_path__ + \"static/media/tunnelin_ssh.9d9b2f6f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/tunnelin_rdp.47d589a4.jpg\";","module.exports = __webpack_public_path__ + \"static/media/no_device.c182b90e.png\";","module.exports = __webpack_public_path__ + \"static/media/tunnel.29c0c3bb.jpg\";","module.exports = __webpack_public_path__ + \"static/media/tunnelin_devices.257fe251.jpg\";","module.exports = __webpack_public_path__ + \"static/media/tunnelin_tunnels.55d94a09.jpg\";","// @flow\n\nimport createHistory from 'history/createBrowserHistory';\n\nconst browserHistory = createHistory();\n\nexport default browserHistory;\n","// eslint-disable-next-line\nexport const GLOBAL_COOKIE_MESSAGE =\n 'Cookies help us improve our web content and deliver personalised content. By using this web site, you agree to our use of cookies.';\n","// @flow\nimport type { InitialState } from '../types/initial-state';\nimport { GLOBAL_COOKIE_MESSAGE } from '../constants/message-constants';\n\nconst initialState: InitialState = {\n global: {\n loading: {\n login: false,\n signup: false,\n updatingCurrentUser: false,\n changingPassword: false,\n toggleTwoFactorAuth: false,\n regenerateTwoFactorAuthQR: false\n },\n message: {\n cookies: localStorage.getItem('cookiesMessageShowed')\n ? ''\n : GLOBAL_COOKIE_MESSAGE,\n error: '',\n success: ''\n },\n insufficientlyAuthenticationDetails: [],\n loggedInUser: null\n },\n users: {\n data: []\n },\n userDevices: {\n loading: {\n get: false,\n add: false,\n remove: false,\n update: false\n },\n data: []\n },\n devices: {\n statuses: {\n data: {},\n loading: false\n },\n loading: {\n get: false,\n add: false,\n update: [],\n remove: []\n },\n error: {\n get: ''\n },\n data: [],\n count: 0,\n lastAddedDeviceId: null\n },\n groups: {\n data: []\n },\n tunnels: {\n searchQuery: '',\n filters: [\n {\n property: 'type',\n values: ['http', 'custom', 'ssh', 'rdp', 'vnc', 'proxy']\n }\n ],\n uiFilters: [\n { property: 'tunnelStatus', value: 'all' },\n { property: 'deviceStatus', value: 'all' }\n ],\n statuses: {\n data: []\n }\n }\n};\n\nexport default initialState;\n","// @flow\n\nimport { combineReducers } from 'redux';\nimport globalInitialState from './initial-state';\n\nconst initialState = globalInitialState.users;\n\nfunction data(state = initialState.data, action) {\n // if (action.type === '...') {\n // return [];\n // }\n return state;\n}\n\nexport default combineReducers({\n data\n});\n","// @flow\n\nexport const SET_CONNECTIVITY_STATUS = 'SET_CONNECTIVITY_STATUS';\nexport const SET_GLOBAL_LOADER = 'SET_GLOBAL_LOADER';\nexport const SET_GLOBAL_MESSAGE_ERROR = 'SET_GLOBAL_MESSAGE_ERROR';\nexport const SET_GLOBAL_MESSAGE_SUCCESS = 'SET_GLOBAL_MESSAGE_SUCCESS';\nexport const SET_GLOBAL_MESSAGE_COOKIES = 'SET_GLOBAL_MESSAGE_COOKIES';\nexport const INIT_APP = 'INIT_APP';\n\n// Login and Logout\nexport const LOGIN = 'LOGIN_LOADING';\nexport const LOGIN_LOADING = 'LOGIN_LOADING';\n\nexport const LOGIN_SUCCESS = 'LOGIN_SUCCESS';\n\nexport const CHANGE_ORGANIZATION = 'CHANGE_ORGANIZATION';\n\nexport const LOGOUT_LOADING = 'LOGOUT_LOADING';\n\nexport const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS';\n\nexport const GET_LOGGED_IN_USER = 'GET_LOGGED_IN_USER';\nexport const GET_LOGGED_IN_USER_LOADING = 'GET_LOGGED_IN_USER_LOADING';\nexport const GET_LOGGED_IN_USER_SUCCESS = 'GET_LOGGED_IN_USER_SUCCESS';\nexport const GET_LOGGED_IN_USER_ERROR = 'GET_LOGGED_IN_USER_ERROR';\n\nexport const UPDATE_CURRENT_USER = 'UPDATE_CURRENT_USER';\nexport const UPDATE_CURRENT_USER_LOADING = 'UPDATE_CURRENT_USER_LOADING';\nexport const UPDATE_CURRENT_USER_SUCCESS = 'UPDATE_CURRENT_USER_SUCCESS';\n\nexport const CHANGE_CURRENT_USER_PASSWORD = 'CHANGE_CURRENT_USER_PASSWORD';\nexport const CHANGE_CURRENT_USER_PASSWORD_LOADING =\n 'CHANGE_CURRENT_USER_PASSWORD_LOADING';\nexport const CHANGE_CURRENT_USER_PASSWORD_SUCCESS =\n 'CHANGE_CURRENT_USER_PASSWORD_SUCCESS';\nexport const TOGGLE_TWO_FACTOR_AUTH = 'TOGGLE_TWO_FACTOR_AUTH';\nexport const TOGGLE_TWO_FACTOR_AUTH_LOADING = 'TOGGLE_TWO_FACTOR_AUTH_LOADING';\nexport const REGENERATE_TWO_FACTOR_QR = 'REGENERATE_TWO_FACTOR_QR';\nexport const REGENERATE_TWO_FACTOR_QR_LOADING =\n 'REGENERATE_TWO_FACTOR_QR_LOADING';\nexport const INSUFFICIENTLY_AUTHENTICATION_DETAILS =\n 'INSUFFICIENTLY_AUTHENTICATION_DETAILS';\n\n// Users\nexport const USERS_LOADING = 'USERS_LOADING';\n\nexport const USERS_SUCCESS = 'USERS_SUCCESS';\n\nexport const USERS_ERROR = 'USERS_ERROR';\n\nexport const SIGNUP = 'SIGNUP';\nexport const SIGNUP_ACTIVATE_ORG_USER = 'SIGNUP_ACTIVATE_ORG_USER';\nexport const SIGNUP_LOADING = 'SIGNUP_LOADING';\n\nexport const SIGNUP_SUCCESS = 'SIGNUP_SUCCESS';\n\nexport const MAKE_GROUP_AS_DEFAULT = 'MAKE_GROUP_AS_DEFAULT';\nexport const MAKE_GROUP_AS_DEFAULT_LOADING = 'MAKE_GROUP_AS_DEFAULT_LOADING';\nexport const MAKE_GROUP_AS_DEFAULT_SUCCESS = 'MAKE_GROUP_AS_DEFAULT_SUCCESS';\n\nexport const SEND_ACTIVATION_EMAIL = 'SEND_ACTIVATION_EMAIL';\nexport const SEND_ACTIVATION_EMAIL_LOADING = 'SEND_ACTIVATION_EMAIL_LOADING';\n\n// Devices\n\nexport const GET_DEVICES = 'GET_DEVICES';\nexport const GET_DEVICES_LOADING = 'GET_DEVICES_LOADING';\nexport const GET_DEVICES_SUCCESS = 'GET_DEVICES_SUCCESS';\nexport const GET_DEVICES_ERROR = 'GET_DEVICES_ERROR';\n\nexport const ADD_DEVICE = 'ADD_DEVICE';\nexport const ADD_DEVICE_LOADING = 'ADD_DEVICE_LOADING';\nexport const ADD_DEVICE_SUCCESS = 'ADD_DEVICE_SUCCESS';\n\nexport const UPDATE_DEVICE = 'UPDATE_DEVICE';\nexport const UPDATE_DEVICE_LOADING = 'UPDATE_DEVICE_LOADING';\nexport const UPDATE_DEVICE_SUCCESS = 'UPDATE_DEVICE_SUCCESS';\n\nexport const DELETE_DEVICE = 'DELETE_DEVICE';\nexport const DELETE_DEVICE_LOADING = 'DELETE_DEVICE_LOADING';\nexport const DELETE_DEVICE_SUCCESS = 'DELETE_DEVICE_SUCCESS';\n\nexport const GET_DEVICES_STATUSES = 'GET_DEVICES_STATUSES';\nexport const GET_DEVICES_STATUSES_LOADING = 'GET_DEVICES_STATUSES_LOADING';\nexport const GET_DEVICES_STATUSES_SUCCESS = 'GET_DEVICES_STATUSES_SUCCESS';\n\nexport const DEVICE_SOCKET_MESSAGE = 'SOCKET_MESSAGE';\n\n// Groups\n\nexport const GET_GROUPS = 'GET_GROUPS';\nexport const GET_GROUPS_LOADING = 'GET_GROUPS_LOADING';\nexport const GET_GROUPS_SUCCESS = 'GET_GROUPS_SUCCESS';\n\nexport const UPDATE_GROUPS_ORDERING = 'UPDATE_GROUPS_ORDERING';\nexport const UPDATE_GROUPS_ORDERING_LOADING = 'UPDATE_GROUPS_ORDERING_LOADING';\nexport const UPDATE_GROUPS_ORDERING_SUCCESS = 'UPDATE_GROUPS_ORDERING_SUCCESS';\n\nexport const ADD_GROUP = 'ADD_GROUP';\nexport const ADD_GROUP_LOADING = 'ADD_GROUP_LOADING';\nexport const ADD_GROUP_SUCCESS = 'ADD_GROUP_SUCCESS';\n\nexport const DELETE_GROUP = 'DELETE_GROUP';\nexport const DELETE_GROUP_LOADING = 'DELETE_GROUP_LOADING';\nexport const DELETE_GROUP_SUCCESS = 'DELETE_GROUP_SUCCESS';\n\nexport const UPDATE_GROUP = 'UPDATE_GROUP';\nexport const UPDATE_GROUP_LOADING = 'UPDATE_GROUP_LOADING';\nexport const UPDATE_GROUP_SUCCESS = 'UPDATE_GROUP_SUCCESS';\n\n// User Devices\nexport const CLEAR_DEVICE_USERS = 'CLEAR_DEVICE_USERS';\n\nexport const GET_DEVICE_USERS = 'GET_DEVICE_USERS';\nexport const GET_DEVICE_USERS_LOADING = 'GET_DEVICE_USERS_LOADING';\nexport const GET_DEVICE_USERS_SUCCESS = 'GET_DEVICE_USERS_SUCCESS';\n\nexport const UPDATE_DEVICES_ORDERING = 'UPDATE_DEVICES_ORDERING';\nexport const UPDATE_DEVICES_ORDERING_LOADING =\n 'UPDATE_DEVICES_ORDERING_LOADING';\nexport const UPDATE_DEVICES_ORDERING_SUCCESS =\n 'UPDATE_DEVICES_ORDERING_SUCCESS';\nexport const UPDATE_DEVICES_ORDERING_ERROR = 'UPDATE_DEVICES_ORDERING_ERROR';\n\nexport const ADD_USER_TO_DEVICE = 'ADD_USER_TO_DEVICE';\nexport const ADD_USER_TO_DEVICE_LOADING = 'ADD_USER_TO_DEVICE_LOADING';\nexport const ADD_USER_TO_DEVICE_SUCCESS = 'ADD_USER_TO_DEVICE_SUCCESS';\nexport const ADD_USER_TO_DEVICE_ERROR = 'ADD_USER_TO_DEVICE_ERROR';\n\nexport const ADD_OR_REMOVE_USERS_TO_DEVICE = 'ADD_OR_REMOVE_USERS_TO_DEVICE';\nexport const ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING =\n 'ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING';\nexport const ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS =\n 'ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS';\n\nexport const UPDATE_USER_TO_DEVICE_ACCESS = 'UPDATE_USER_TO_DEVICE';\nexport const UPDATE_USER_TO_DEVICE_ACCESS_LOADING =\n 'UPDATE_USER_TO_DEVICE_ACCESS_LOADING';\nexport const UPDATE_USER_TO_DEVICE_ACCESS_SUCCESS =\n 'UPDATE_USER_TO_DEVICE_ACCESS_SUCCESS';\nexport const UPDATE_USER_TO_DEVICE_ACCESS_ERROR =\n 'UPDATE_USER_TO_DEVICE_ACCESS_ERROR';\n\nexport const REMOVE_USER_FROM_DEVICE = 'REMOVE_USER_FROM_DEVICE';\nexport const REMOVE_USER_FROM_DEVICE_LOADING = 'DELETE_USER_DEVICE_LOADING';\nexport const REMOVE_USER_FROM_DEVICE_SUCCESS = 'DELETE_USER_DEVICE_SUCCESS';\nexport const REMOVE_USER_FROM_DEVICE_ERROR = 'DELETE_USER_DEVICE_ERROR';\n\nexport const REMOVE_CURRENT_USER_FROM_DEVICE =\n 'REMOVE_CURRENT_USER_FROM_DEVICE';\nexport const REMOVE_CURRENT_USER_FROM_DEVICE_LOADING =\n 'REMOVE_CURRENT_USER_FROM_DEVICE_LOADING';\nexport const REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS =\n 'REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS';\n\n// Tunnels\nexport const UPDATE_TUNNEL_SEARCH = 'UPDATE_TUNNEL_SEARCH';\nexport const RESET_ALL_TUNNEL_FILTERS = 'RESET_ALL_TUNNEL_FILTERS';\nexport const UPDATE_TUNNEL_UI_FILTERS = 'UPDATE_TUNNEL_UI_FILTERS';\nexport const UPDATE_TUNNEL_FILTER = 'UPDATE_TUNNEL_FILTER';\n\nexport const VERIFY_EMAIL_SUCCESS = 'VERIFY_EMAIL_SUCCESS';\n\nexport const GET_TUNNEL_STATUSES = 'GET_TUNNEL_STATUSES';\nexport const GET_TUNNEL_STATUSES_SUCCES = 'GET_TUNNEL_STATUSES_SUCCES';\n","export function singlePayloadReducer(type, initialState) {\n return (state = initialState, action) => {\n if (action.type === type) {\n return action.payload;\n }\n return state;\n };\n}\n","// @flow\n\n// eslint-disable-next-line\nconst MD5 = require('crypto-js/md5');\n\nconst GRAVATAR_PREFIX = 'https://gravatar.com/avatar/';\nconst GRAVATAR_QUERY_DEFAULT = 'd=404';\n\nlet loggedInUserHash = null;\n\n// eslint-disable-next-line\nexport function getGravatarUrl(email: string, size: number = 40) {\n return `${GRAVATAR_PREFIX +\n MD5(email).toString()}?${GRAVATAR_QUERY_DEFAULT}&s=${size}`;\n}\n\nexport function getLoggedInUserIdHash() {\n return loggedInUserHash;\n}\n\nexport function constructLoggedInUserIdHash(id: string) {\n loggedInUserHash = MD5(id).toString();\n return loggedInUserHash;\n}\n","// @flow\n\nimport { combineReducers } from 'redux';\nimport globalInitialState from './initial-state';\nimport {\n CHANGE_CURRENT_USER_PASSWORD_LOADING,\n GET_LOGGED_IN_USER_SUCCESS,\n LOGIN_LOADING,\n LOGIN_SUCCESS,\n LOGOUT_SUCCESS,\n MAKE_GROUP_AS_DEFAULT_SUCCESS,\n SIGNUP_LOADING,\n SIGNUP_SUCCESS,\n UPDATE_CURRENT_USER_SUCCESS,\n UPDATE_CURRENT_USER_LOADING,\n SET_GLOBAL_MESSAGE_ERROR,\n SET_GLOBAL_MESSAGE_SUCCESS,\n SET_GLOBAL_MESSAGE_COOKIES,\n GET_LOGGED_IN_USER_LOADING,\n VERIFY_EMAIL_SUCCESS,\n INSUFFICIENTLY_AUTHENTICATION_DETAILS,\n TOGGLE_TWO_FACTOR_AUTH_LOADING,\n REGENERATE_TWO_FACTOR_QR_LOADING\n} from '../constants/action-types';\nimport { singlePayloadReducer } from '../utils/reducer-util';\nimport { constructLoggedInUserIdHash } from '../utils/user-utils';\n\nconst initialState = globalInitialState.global;\n\nfunction loggedInUser(state = initialState.loggedInUser, action) {\n switch (action.type) {\n case LOGOUT_SUCCESS:\n return null;\n case GET_LOGGED_IN_USER_SUCCESS:\n case LOGIN_SUCCESS:\n case SIGNUP_SUCCESS: {\n constructLoggedInUserIdHash(action.payload._id);\n return action.payload;\n }\n case MAKE_GROUP_AS_DEFAULT_SUCCESS: {\n const _id = action.payload;\n return { ...state, defaultGroup: _id };\n }\n case UPDATE_CURRENT_USER_SUCCESS: {\n return {\n ...state,\n ...action.payload\n };\n }\n case VERIFY_EMAIL_SUCCESS: {\n return state\n ? {\n ...state,\n emailVerified: true\n }\n : {};\n }\n default:\n return state;\n }\n}\n\nfunction loginLoading(state = initialState.loading.login, action) {\n switch (action.type) {\n case GET_LOGGED_IN_USER_LOADING:\n case LOGIN_LOADING:\n return action.payload;\n default:\n return state;\n }\n}\n\nfunction insufficientlyAuthenticationDetails(state = initialState, action) {\n if (action.type === INSUFFICIENTLY_AUTHENTICATION_DETAILS) {\n return action.payload || [];\n }\n return state;\n}\n\nexport default combineReducers({\n loggedInUser,\n loading: combineReducers({\n login: loginLoading,\n changeOrganization: loginLoading,\n signup: singlePayloadReducer(\n SIGNUP_LOADING,\n initialState.loading.signup\n ),\n updatingCurrentUser: singlePayloadReducer(\n UPDATE_CURRENT_USER_LOADING,\n initialState.loading.updatingCurrentUser\n ),\n changingPassword: singlePayloadReducer(\n CHANGE_CURRENT_USER_PASSWORD_LOADING,\n initialState.loading.changingPassword\n ),\n toggleTwoFactorAuth: singlePayloadReducer(\n TOGGLE_TWO_FACTOR_AUTH_LOADING,\n initialState.loading.toggleTwoFactorAuth\n ),\n regenerateTwoFactorAuthQR: singlePayloadReducer(\n REGENERATE_TWO_FACTOR_QR_LOADING,\n initialState.loading.regenerateTwoFactorAuthQR\n )\n }),\n message: combineReducers({\n cookies: singlePayloadReducer(\n SET_GLOBAL_MESSAGE_COOKIES,\n initialState.message.cookies\n ),\n error: singlePayloadReducer(\n SET_GLOBAL_MESSAGE_ERROR,\n initialState.message.error\n ),\n success: singlePayloadReducer(\n SET_GLOBAL_MESSAGE_SUCCESS,\n initialState.message.success\n )\n }),\n insufficientlyAuthenticationDetails\n});\n","// import { filter, find, findIndex } from 'lodash';\nimport { combineReducers } from 'redux';\nimport globalInitialState from './initial-state';\nimport {\n GET_DEVICES_SUCCESS,\n GET_DEVICES_STATUSES_LOADING,\n GET_DEVICES_STATUSES_SUCCESS\n} from '../constants/action-types';\nimport { singlePayloadReducer } from '../utils/reducer-util';\n\nconst initialState = globalInitialState.devices.statuses;\n\nfunction data(state = initialState.data, action) {\n switch (action.type) {\n case GET_DEVICES_SUCCESS: {\n return action.payload.data.statuses;\n }\n case GET_DEVICES_STATUSES_SUCCESS: {\n return action.payload;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n data,\n loading: singlePayloadReducer(\n GET_DEVICES_STATUSES_LOADING,\n initialState.loading\n )\n});\n","// @flow\n\nimport { filter, find, findIndex } from 'lodash';\nimport { combineReducers } from 'redux';\nimport globalInitialState from './initial-state';\nimport {\n ADD_DEVICE_LOADING,\n ADD_DEVICE_SUCCESS,\n GET_DEVICES_ERROR,\n GET_DEVICES_LOADING,\n GET_DEVICES_SUCCESS,\n UPDATE_DEVICE_SUCCESS,\n UPDATE_DEVICE_LOADING,\n DELETE_DEVICE_SUCCESS,\n DELETE_DEVICE_LOADING,\n REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS,\n UPDATE_DEVICES_ORDERING_SUCCESS\n} from '../constants/action-types';\nimport statuses from './devices-statuses-reducer';\nimport { singlePayloadReducer } from '../utils/reducer-util';\n\nconst initialState = globalInitialState.devices;\n\nfunction data(state = initialState.data, action) {\n switch (action.type) {\n case GET_DEVICES_SUCCESS: {\n return action.payload.data.devices;\n }\n case ADD_DEVICE_SUCCESS: {\n return [action.payload, ...state];\n }\n case UPDATE_DEVICES_ORDERING_SUCCESS: {\n const orderedDevices = [...action.payload];\n return state.map(r => {\n const index = findIndex(orderedDevices, { _id: r._id });\n if (index !== -1) {\n return { ...r, order: orderedDevices[index].order };\n }\n\n return { ...r };\n });\n }\n case REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS: {\n const { removedUserDevices } = action.payload;\n let newState = [...state];\n const idMapper = userDevice => userDevice.device._id;\n if (removedUserDevices && removedUserDevices.length) {\n const removedUserDeviceIds = removedUserDevices.map(idMapper);\n newState = filter(\n newState,\n ({ _id }) => removedUserDeviceIds.indexOf(_id) === -1\n );\n }\n\n const modified = newState.length !== state.length;\n return modified ? newState : state;\n }\n case UPDATE_DEVICE_SUCCESS: {\n const { _id } = action.payload;\n const data = [...state];\n let datum = find(data, { _id });\n if (!datum) {\n return state;\n }\n const indexOf = data.indexOf(datum);\n datum = {\n ...datum,\n ...action.payload\n };\n\n return [\n ...data.slice(0, indexOf),\n datum,\n ...data.slice(indexOf + 1)\n ];\n }\n case DELETE_DEVICE_SUCCESS: {\n const _id = action.payload;\n const data = [...state];\n const datum = find(data, { _id });\n if (!datum) {\n return state;\n }\n const indexOf = data.indexOf(datum);\n\n return [...data.slice(0, indexOf), ...data.slice(indexOf + 1)];\n }\n default:\n return state;\n }\n}\n\nfunction count(state = initialState.count, action) {\n switch (action.type) {\n case GET_DEVICES_SUCCESS: {\n return action.payload.data.devices.length;\n }\n case ADD_DEVICE_SUCCESS:\n return state + 1;\n default:\n return state;\n }\n}\n\nfunction lastAddedDeviceId(state = initialState.lastAddedDeviceId, action) {\n switch (action.type) {\n case ADD_DEVICE_SUCCESS: {\n return action.payload._id;\n }\n default:\n return state;\n }\n}\n\nfunction updateLoading(state = initialState.loading.update, action) {\n switch (action.type) {\n case UPDATE_DEVICE_LOADING: {\n const { id, loading } = action.payload;\n const currentIndex = state.indexOf(id);\n const currentlyLoading = state.indexOf(id) !== -1;\n if (loading && !currentlyLoading) {\n return [...state, id];\n }\n if (!loading && currentlyLoading) {\n const newState = [...state];\n newState.splice(currentIndex, 1);\n return newState;\n }\n return state;\n }\n\n default:\n return state;\n }\n}\n\nfunction deleteLoading(state = initialState.loading.remove, action) {\n switch (action.type) {\n case DELETE_DEVICE_LOADING: {\n const { id, loading } = action.payload;\n const currentIndex = state.indexOf(id);\n const currentlyLoading = state.indexOf(id) !== -1;\n if (loading && !currentlyLoading) {\n return [...state, id];\n }\n if (!loading && currentlyLoading) {\n const newState = [...state];\n newState.splice(currentIndex, 1);\n return newState;\n }\n return state;\n }\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n data,\n count,\n lastAddedDeviceId,\n loading: combineReducers({\n get: singlePayloadReducer(\n GET_DEVICES_LOADING,\n initialState.loading.get\n ),\n add: singlePayloadReducer(ADD_DEVICE_LOADING, initialState.loading.add),\n update: updateLoading,\n remove: deleteLoading\n }),\n error: combineReducers({\n get: singlePayloadReducer(GET_DEVICES_ERROR, initialState.error.get)\n }),\n statuses\n});\n","// @flow\nimport { combineReducers } from 'redux';\nimport globalInitialState from './initial-state';\nimport {\n UPDATE_TUNNEL_SEARCH,\n GET_LOGGED_IN_USER_SUCCESS,\n LOGIN_SUCCESS,\n GET_TUNNEL_STATUSES_SUCCES,\n UPDATE_TUNNEL_UI_FILTERS,\n UPDATE_TUNNEL_FILTER,\n RESET_ALL_TUNNEL_FILTERS\n} from '../constants/action-types';\nimport {\n getLoggedInUserIdHash,\n constructLoggedInUserIdHash\n} from '../utils/user-utils';\n\nconst initialState = globalInitialState.tunnels;\n\nfunction searchQuery(state = initialState.searchQuery, action) {\n switch (action.type) {\n case UPDATE_TUNNEL_SEARCH:\n return action.payload;\n default:\n return state;\n }\n}\n\nfunction uiFilters(state = initialState.uiFilters, action) {\n switch (action.type) {\n case UPDATE_TUNNEL_UI_FILTERS: {\n const filterToUpdate = action.payload;\n const existingFilter = state.find(\n uiF => uiF.property === filterToUpdate.property\n );\n const index = state.indexOf(existingFilter);\n const newState = [...state];\n newState.splice(index, 1, filterToUpdate);\n return newState;\n }\n default:\n return state;\n }\n}\n\nfunction filters(state = initialState.filters, action) {\n switch (action.type) {\n case GET_LOGGED_IN_USER_SUCCESS:\n case LOGIN_SUCCESS: {\n const userIdHash =\n getLoggedInUserIdHash() ||\n constructLoggedInUserIdHash(action.payload._id);\n const storageFilters = localStorage.getItem(\n `tunnelFilters-${userIdHash}`\n );\n return storageFilters ? JSON.parse(storageFilters) : state;\n }\n case UPDATE_TUNNEL_FILTER: {\n const { property, value } = action.payload;\n let filter = state.filter(f => f.property === property)[0];\n const index = state.indexOf(filter);\n const newState = [...state];\n if (!filter) {\n filter = {\n property,\n values: [value]\n };\n newState.push(filter);\n } else {\n const valueIndex = filter.values.indexOf(value);\n if (valueIndex > -1) {\n const newValues = [...filter.values];\n newValues.splice(valueIndex, 1);\n filter = {\n ...filter,\n values: newValues\n };\n } else {\n filter = {\n ...filter,\n values: [...filter.values, value]\n };\n }\n newState[index] = filter;\n }\n const userIdHash = getLoggedInUserIdHash();\n localStorage.setItem(\n `tunnelFilters-${userIdHash}`,\n JSON.stringify(newState)\n );\n return newState;\n }\n default:\n return state;\n }\n}\n\nfunction statuses(state = initialState.statuses, action) {\n switch (action.type) {\n case GET_TUNNEL_STATUSES_SUCCES:\n return { ...state, data: action.payload };\n default:\n return state;\n }\n}\n\nconst tunnelReducer = (state = initialState, action) => {\n if (action.type === RESET_ALL_TUNNEL_FILTERS) {\n const userIdHash = getLoggedInUserIdHash();\n localStorage.setItem(\n `tunnelFilters-${userIdHash}`,\n JSON.stringify(initialState.filters)\n );\n return {\n ...state,\n searchQuery: '',\n filters: initialState.filters,\n uiFilters: initialState.uiFilters\n };\n }\n return combineReducers({\n searchQuery,\n filters,\n uiFilters,\n statuses\n })(state, action);\n};\n\nexport default tunnelReducer;\n","// @flow\n\nimport { combineReducers } from 'redux';\nimport { filter, isEqual } from 'lodash';\n\nimport globalInitialState from './initial-state';\nimport {\n GET_DEVICE_USERS_SUCCESS,\n CLEAR_DEVICE_USERS,\n ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING,\n ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS,\n REMOVE_CURRENT_USER_FROM_DEVICE_LOADING,\n REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS\n} from '../constants/action-types';\n\nconst initialState = globalInitialState.userDevices;\n\nfunction data(state = initialState.data, action) {\n switch (action.type) {\n case GET_DEVICE_USERS_SUCCESS: {\n return action.payload.data;\n }\n case REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS:\n case ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS: {\n const { addedUserDevices, removedUserDevices } = action.payload;\n let newState = [...state];\n if (addedUserDevices && addedUserDevices.length) {\n newState = [...newState, ...addedUserDevices];\n }\n const idMapper = userDevice => userDevice._id;\n if (removedUserDevices && removedUserDevices.length) {\n const removedUserDeviceIds = removedUserDevices.map(idMapper);\n newState = filter(\n newState,\n ({ _id }) => removedUserDeviceIds.indexOf(_id) === -1\n );\n }\n\n const modified = !isEqual(\n newState.map(idMapper),\n state.map(idMapper)\n );\n return modified ? newState : state;\n }\n case CLEAR_DEVICE_USERS: {\n return filter(\n state,\n ({ device: { _id } }) => _id !== action.payload\n );\n }\n default:\n return state;\n }\n}\n\nfunction loading(state = initialState.loading, action) {\n switch (action.type) {\n case ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING: {\n return {\n ...state,\n add: action.payload,\n remove: action.payload\n };\n }\n case REMOVE_CURRENT_USER_FROM_DEVICE_LOADING: {\n return {\n ...state,\n remove: action.payload\n };\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n data,\n loading\n});\n","// @flow\nimport { combineReducers } from 'redux';\nimport { find } from 'lodash';\n\nimport globalInitialState from './initial-state';\nimport {\n ADD_GROUP_SUCCESS,\n DELETE_GROUP_SUCCESS,\n GET_GROUPS_SUCCESS,\n UPDATE_GROUPS_ORDERING_SUCCESS,\n UPDATE_GROUP_SUCCESS\n} from '../constants/action-types';\n\nconst initialState = globalInitialState.groups;\n\nfunction data(state = initialState.data, action) {\n switch (action.type) {\n case GET_GROUPS_SUCCESS: {\n return action.payload;\n }\n case ADD_GROUP_SUCCESS: {\n const data = [...state];\n const shared = state.find(g => g._id === '-1');\n if (shared) {\n const sharedIndex = state.indexOf(shared);\n return [\n ...data.slice(0, sharedIndex),\n ...data.slice(sharedIndex + 1),\n action.payload,\n shared\n ];\n }\n return [...state, action.payload];\n }\n case UPDATE_GROUPS_ORDERING_SUCCESS: {\n const shared = state.find(g => g._id === '-1');\n if (shared) {\n return [...action.payload, shared];\n }\n return action.payload;\n }\n case DELETE_GROUP_SUCCESS: {\n const _id = action.payload;\n const data = [...state];\n const datum = find(data, { _id });\n if (!datum) {\n return state;\n }\n const indexOf = data.indexOf(datum);\n const storageActiveGroup = localStorage.getItem('activeGroup');\n if (storageActiveGroup === _id) {\n localStorage.removeItem('activeGroup');\n }\n return [...data.slice(0, indexOf), ...data.slice(indexOf + 1)];\n }\n case UPDATE_GROUP_SUCCESS: {\n const { _id } = action.payload;\n const data = [...state];\n let datum = find(data, { _id });\n if (!datum) {\n return state;\n }\n const indexOf = data.indexOf(datum);\n datum = {\n ...datum,\n ...action.payload\n };\n\n return [\n ...data.slice(0, indexOf),\n datum,\n ...data.slice(indexOf + 1)\n ];\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n data\n});\n","import { combineReducers } from 'redux';\nimport { routerReducer } from 'react-router-redux';\nimport users from './users-reducer';\nimport global from './app-reducer';\nimport devices from './devices-reducer';\nimport tunnels from './tunnels-reducer';\nimport userDevices from './user-devices-reducer';\nimport groups from './groups-reducer';\nimport { LOGOUT_SUCCESS } from '../constants/action-types';\nimport initialState from './initial-state';\n\nconst appReducer = combineReducers({\n global,\n users,\n devices,\n tunnels,\n groups,\n userDevices,\n routing: routerReducer\n});\n\nconst rootReducer = (state, action) => {\n if (action.type === LOGOUT_SUCCESS) {\n return {\n ...initialState\n };\n }\n\n return appReducer(state, action);\n};\n\nexport default rootReducer;\n","import { createAction } from 'redux-actions';\nimport {\n INIT_APP,\n SET_CONNECTIVITY_STATUS,\n SET_GLOBAL_LOADER,\n SET_GLOBAL_MESSAGE_ERROR,\n SET_GLOBAL_MESSAGE_SUCCESS,\n SET_GLOBAL_MESSAGE_COOKIES\n} from '../constants/action-types';\n\nexport const setConnectivityStatus = createAction(SET_CONNECTIVITY_STATUS);\n\nexport const setGlobalLoader = createAction(SET_GLOBAL_LOADER);\n\nexport const setGlobalMessageError = createAction(SET_GLOBAL_MESSAGE_ERROR);\n\nexport const setGlobalMessageSuccess = createAction(SET_GLOBAL_MESSAGE_SUCCESS);\n\nexport const setGlobalMessageCookies = createAction(SET_GLOBAL_MESSAGE_COOKIES);\n\nexport const initApp = createAction(INIT_APP);\n","import { createAction } from 'redux-actions';\nimport {\n CHANGE_CURRENT_USER_PASSWORD,\n CHANGE_CURRENT_USER_PASSWORD_LOADING,\n CHANGE_CURRENT_USER_PASSWORD_SUCCESS,\n GET_LOGGED_IN_USER,\n GET_LOGGED_IN_USER_ERROR,\n GET_LOGGED_IN_USER_LOADING,\n GET_LOGGED_IN_USER_SUCCESS,\n LOGIN,\n LOGIN_LOADING,\n LOGIN_SUCCESS,\n LOGOUT_LOADING,\n LOGOUT_SUCCESS,\n SIGNUP,\n SIGNUP_LOADING,\n SIGNUP_SUCCESS,\n UPDATE_CURRENT_USER,\n UPDATE_CURRENT_USER_LOADING,\n UPDATE_CURRENT_USER_SUCCESS,\n VERIFY_EMAIL_SUCCESS,\n REGENERATE_TWO_FACTOR_QR,\n REGENERATE_TWO_FACTOR_QR_LOADING,\n TOGGLE_TWO_FACTOR_AUTH,\n TOGGLE_TWO_FACTOR_AUTH_LOADING,\n INSUFFICIENTLY_AUTHENTICATION_DETAILS,\n CHANGE_ORGANIZATION,\n SIGNUP_ACTIVATE_ORG_USER\n} from '../constants/action-types';\n\nexport const login = createAction(LOGIN);\nexport const loginLoading = createAction(LOGIN_LOADING);\nexport const loginSuccess = createAction(LOGIN_SUCCESS);\n\nexport const changeOrganization = createAction(CHANGE_ORGANIZATION);\n\nexport const logout = createAction(LOGOUT_LOADING);\nexport const logoutSuccess = createAction(LOGOUT_SUCCESS);\n\nexport const getLoggedInUser = createAction(GET_LOGGED_IN_USER);\nexport const getLoggedInUserLoading = createAction(GET_LOGGED_IN_USER_LOADING);\nexport const getLoggedInUserSuccess = createAction(GET_LOGGED_IN_USER_SUCCESS);\nexport const getLoggedInUserError = createAction(GET_LOGGED_IN_USER_ERROR);\n\nexport const updateCurrentUser = createAction(UPDATE_CURRENT_USER);\nexport const updateCurrentUserLoading = createAction(\n UPDATE_CURRENT_USER_LOADING\n);\nexport const updateCurrentUserSuccess = createAction(\n UPDATE_CURRENT_USER_SUCCESS\n);\n\nexport const changeCurrentUserPassword = createAction(\n CHANGE_CURRENT_USER_PASSWORD\n);\nexport const changeCurrentUserPasswordLoading = createAction(\n CHANGE_CURRENT_USER_PASSWORD_LOADING\n);\nexport const changeCurrentUserPasswordSuccess = createAction(\n CHANGE_CURRENT_USER_PASSWORD_SUCCESS\n);\nexport const verifyEmailSuccess = createAction(VERIFY_EMAIL_SUCCESS);\n\nexport const signup = createAction(SIGNUP);\nexport const signupActivateOrgUser = createAction(SIGNUP_ACTIVATE_ORG_USER);\n\nexport const signupLoading = createAction(SIGNUP_LOADING);\nexport const signupSuccess = createAction(SIGNUP_SUCCESS);\nexport const regenerateTwoFactorAuthQR = createAction(REGENERATE_TWO_FACTOR_QR);\nexport const regenerateTwoFactorAuthQRLoading = createAction(\n REGENERATE_TWO_FACTOR_QR_LOADING\n);\nexport const toggleTwoFactorAuth = createAction(TOGGLE_TWO_FACTOR_AUTH);\nexport const toggleTwoFactorAuthLoading = createAction(\n TOGGLE_TWO_FACTOR_AUTH_LOADING\n);\nexport const insufficientlyAuthenticationDetails = createAction(\n INSUFFICIENTLY_AUTHENTICATION_DETAILS\n);\n","// @flow\nimport { api, makeGet, makePost, makePatch } from '../utils/http-util';\n\nconst API_URL = {\n SIGNUP: () => api`v1/signup`,\n SIGNUP_ACTIVATE_ORG_USER: () => api`v1/signup-org-user`,\n SIGNUP_FOR_GET_DEVICE: () => api`v1/signup-get-device`,\n LOGIN: () => api`v1/login`,\n LOGOUT: () => api`v1/logout`,\n GET_LOGGED_IN_USER: () => api`v1/me`,\n CHANGE_PASSWORD: () => api`v1/me/change-password`,\n SET_NEW_PASSWORD: () => api`v1/me/set-new-password`,\n CHANGE_ADD_DEVICE_PASSWORD: () => api`v1/me/change-add-device-password`,\n PASSWORD_RECOVERY: () => api`v1/password-recovery`,\n GET_SUGGESTED_USERNAME: () => api`v1/get-suggested-username`,\n CHECK_USERNAME: () => api`v1/username-exists`,\n VERIFY_EMAIL: () => api`v1/verify-email`,\n TOGGLE_TWO_FACTOR_AUTH: () => api`v1/toggle-two-factor-authentication`,\n CHANGE_ORGANIZATION: orgId => api`v1/users/change-organization/${orgId}`,\n REGENERATE_TWO_FACTOR_AUTHENTICATION_QR: () =>\n api`v1/regenerate-two-factor-authentication-qr`\n};\n\nexport function login(\n email: string,\n password: string,\n twoFactorAuthStr: string = ''\n) {\n return makePost(API_URL.LOGIN(), { email, password, twoFactorAuthStr });\n}\n\nexport function loginForGetDevice(email: string, password: string, headers) {\n return makePost(API_URL.LOGIN(), { email, password }, headers);\n}\n\nexport function signup(data: {\n fullName: string,\n email: string,\n username: string,\n password: string,\n confirmPassword: string\n}) {\n return makePost(API_URL.SIGNUP(), data);\n}\n\nexport function signupActivateOrgUser(data: {\n fullName: string,\n email: string,\n username: string,\n password: string,\n confirmPassword: string,\n token: string\n}) {\n return makePost(API_URL.SIGNUP_ACTIVATE_ORG_USER(), data);\n}\n\nexport function signupForGetDevice(\n data: {\n fullName: string,\n email: string,\n username: string,\n password: string,\n confirmPassword: string\n },\n headers\n) {\n return makePost(API_URL.SIGNUP_FOR_GET_DEVICE(), data, headers);\n}\n\nexport function getSuggestedUsername(body: {\n fullName?: string,\n email?: string\n}) {\n return makePost(API_URL.GET_SUGGESTED_USERNAME(), body);\n}\n\nexport function checkUsernameExisting(body: { userName?: string }) {\n return makePost(API_URL.CHECK_USERNAME(), body);\n}\n\nexport function logout() {\n return null;\n}\n\nexport function getLoggedInUser(headers) {\n return makeGet(API_URL.GET_LOGGED_IN_USER(), headers);\n}\n\nexport function updateCurrentUser(body: {\n email?: string,\n fullName?: string,\n defaultGroup?: string\n}) {\n return makePatch(API_URL.GET_LOGGED_IN_USER(), body);\n}\n\nexport function changePassword(oldPassword: string, newPassword: string) {\n return makePost(API_URL.CHANGE_PASSWORD(), {\n oldPassword,\n newPassword\n });\n}\n\nexport function changeCurrentUserAddDevicePassword(\n oldPassword: string,\n newPassword: string\n) {\n return makePost(API_URL.CHANGE_ADD_DEVICE_PASSWORD(), {\n oldPassword,\n newPassword\n }).toPromise();\n}\n\nexport function passwordRecovery(email: string) {\n return makePost(API_URL.PASSWORD_RECOVERY(), { email });\n}\n\nexport function setNewPasswordWithRecoveryToken(newPassword: string, headers) {\n return makePost(\n API_URL.SET_NEW_PASSWORD(),\n {\n newPassword\n },\n headers\n );\n}\n\nexport function verifyEmail(headers) {\n return makePost(API_URL.VERIFY_EMAIL(), null, headers);\n}\n\nexport function toggleTwoFactorAuth(enabled) {\n return makePost(API_URL.TOGGLE_TWO_FACTOR_AUTH(), { enabled });\n}\nexport function regenerateTwoFactorAuthQr() {\n return makePost(API_URL.REGENERATE_TWO_FACTOR_AUTHENTICATION_QR());\n}\nexport function changeOrg(id) {\n return makePost(API_URL.CHANGE_ORGANIZATION(id));\n}\n","// @flow\nimport React from 'react';\n// eslint-disable-next-line\nexport function parseErrorMessage(error: any) {\n return (\n (error.response && error.response.error) ||\n ((error.status === 0 || error.status >= 500) &&\n `Something went wrong${\n !navigator.onLine ? ', check internet connection' : ''\n }`) ||\n (error.name === 'TypeError' && 'Something went wrong') ||\n error.message\n );\n}\n\n// eslint-disable-next-line\nexport function constructGlobalErrorMessage(error: any) {\n if (typeof error === 'string') {\n return error;\n }\n if (error.length === 0) {\n return '';\n }\n if (error.length === 1) {\n return error[0].message;\n }\n if (error.length > 1) {\n return (\n \n );\n }\n}\n","import { merge, of, iif } from 'rxjs';\nimport { switchMap, map, filter, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { push } from 'react-router-redux';\nimport { LOGIN } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n loginLoading,\n loginSuccess,\n insufficientlyAuthenticationDetails\n} from '../../actions/authentication-actions';\nimport { login } from '../../api/authentication-api';\nimport browserHistory from '../../store/history';\nimport { saveAuthToken } from '../../utils/http-util';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(LOGIN),\n map(action => action.payload),\n filter(data => !!data.email && !!data.password),\n switchMap(({ email, password, twoFactorAuthStr, redirect }) =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(loginLoading(true)),\n login(email, password, twoFactorAuthStr).pipe(\n mergeMap(({ data }) => {\n if (!data) {\n throw new Error('Invalid response');\n }\n const { user, authToken } = data;\n saveAuthToken(authToken);\n if (!redirect) {\n return of(\n setConnectivityStatus({ loading: false }),\n loginSuccess(user),\n loginLoading(false)\n );\n }\n const {\n location: { state }\n } = browserHistory;\n let pathname = '/';\n if (state && state.redirectTo) {\n pathname = state.redirectTo;\n }\n\n return of(\n setConnectivityStatus({ loading: false }),\n loginSuccess(user),\n insufficientlyAuthenticationDetails([]),\n loginLoading(false),\n push(pathname)\n );\n }),\n catchError(error => {\n const actions = [\n setConnectivityStatus({ loading: false }),\n loginLoading(false),\n insufficientlyAuthenticationDetails(\n error &&\n error.response &&\n error.response.details\n )\n ];\n return iif(\n () => error.status !== 412,\n of(\n ...actions,\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n ),\n of(...actions)\n );\n })\n )\n )\n )\n );\n","import { combineEpics } from 'redux-observable';\nimport loginEpic from './login-epic';\nimport getActiveUserEpic from './get-logged-in-user-epic';\nimport signupEpic from './signup-epic';\nimport logoutEpic from './logout-epic';\nimport changeCurrentUserPasswordEpic from './change-current-user-password-epic';\nimport updateCurrentUserEpic from './update-current-user-epic';\nimport toggleTwoFactorAuthEpic from './toggle-two-factor-auth-epic';\nimport regenerateTwoFactorAuthQrEpic from './regenerate-two-factor-auth-qr-epic';\nimport changeOrganizationEpics from './change-organization';\nimport signupActivateOrgUserEpicEpics from './signup-activate-orguser-epic';\n\nexport default combineEpics(\n loginEpic,\n getActiveUserEpic,\n signupEpic,\n logoutEpic,\n changeCurrentUserPasswordEpic,\n updateCurrentUserEpic,\n toggleTwoFactorAuthEpic,\n regenerateTwoFactorAuthQrEpic,\n changeOrganizationEpics,\n signupActivateOrgUserEpicEpics\n);\n","import { merge, of } from 'rxjs';\nimport { switchMap, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_LOGGED_IN_USER } from '../../constants/action-types';\nimport { getLoggedInUser } from '../../api/authentication-api';\nimport { setConnectivityStatus } from '../../actions/app-actions';\nimport {\n getLoggedInUserLoading,\n getLoggedInUserSuccess,\n getLoggedInUserError,\n logout\n} from '../../actions/authentication-actions';\nimport { parseErrorMessage } from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_LOGGED_IN_USER),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(getLoggedInUserLoading(true)),\n getLoggedInUser().pipe(\n mergeMap(user => {\n const { data } = user;\n return of(\n setConnectivityStatus({ loading: false }),\n getLoggedInUserSuccess(data),\n getLoggedInUserLoading(false)\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n getLoggedInUserError(parseErrorMessage(error)),\n getLoggedInUserLoading(false),\n logout()\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { push } from 'react-router-redux';\n\nimport { SIGNUP } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n signupLoading,\n signupSuccess\n} from '../../actions/authentication-actions';\nimport { signup } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport browserHistory from '../../store/history';\nimport { saveAuthToken } from '../../utils/http-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(SIGNUP),\n map(action => action.payload),\n switchMap(user =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(signupLoading(true)),\n signup(user).pipe(\n mergeMap(({ data }) => {\n const { user, authToken } = data;\n const {\n location: { state }\n } = browserHistory;\n let pathname = '/';\n if (state && state.redirectTo) {\n pathname = state.redirectTo;\n }\n saveAuthToken(authToken);\n return of(\n setConnectivityStatus({ loading: false }),\n signupLoading(false),\n signupSuccess(user),\n push(pathname)\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n signupLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { push } from 'react-router-redux';\nimport { LOGOUT_LOADING } from '../../constants/action-types';\nimport { logoutSuccess } from '../../actions/authentication-actions';\nimport { clearAuthToken } from '../../utils/http-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(LOGOUT_LOADING),\n switchMap(() => {\n clearAuthToken();\n return of(logoutSuccess(), push('/login'));\n })\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\nimport { CHANGE_CURRENT_USER_PASSWORD } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n changeCurrentUserPasswordLoading,\n logout\n} from '../../actions/authentication-actions';\nimport { changePassword } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(CHANGE_CURRENT_USER_PASSWORD),\n map(action => action.payload),\n switchMap(({ oldPassword, newPassword }) =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(changeCurrentUserPasswordLoading(true)),\n changePassword(oldPassword, newPassword).pipe(\n mergeMap(() =>\n of(\n setConnectivityStatus({ loading: false }),\n changeCurrentUserPasswordLoading(false),\n logout()\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n changeCurrentUserPasswordLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { UPDATE_CURRENT_USER } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n updateCurrentUserLoading,\n updateCurrentUserSuccess\n} from '../../actions/authentication-actions';\nimport { updateCurrentUser } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(UPDATE_CURRENT_USER),\n map(action => action.payload),\n switchMap(user =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(updateCurrentUserLoading(true)),\n updateCurrentUser(user).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n updateCurrentUserLoading(false),\n updateCurrentUserSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n updateCurrentUserLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { TOGGLE_TWO_FACTOR_AUTH } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport { toggleTwoFactorAuth } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport {\n toggleTwoFactorAuthLoading,\n updateCurrentUserSuccess\n} from '../../actions/authentication-actions';\n\nexport default action$ =>\n action$.pipe(\n ofType(TOGGLE_TWO_FACTOR_AUTH),\n map(action => action.payload),\n switchMap(enabled => {\n return merge(\n of(setConnectivityStatus({ loading: true })),\n of(toggleTwoFactorAuthLoading(true)),\n toggleTwoFactorAuth(enabled).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n toggleTwoFactorAuthLoading(false),\n updateCurrentUserSuccess({\n twoFactorAuth: {\n ...data\n }\n })\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n toggleTwoFactorAuthLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n );\n })\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { REGENERATE_TWO_FACTOR_QR } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport { regenerateTwoFactorAuthQr } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport {\n regenerateTwoFactorAuthQRLoading,\n updateCurrentUserSuccess\n} from '../../actions/authentication-actions';\n\nexport default action$ =>\n action$.pipe(\n ofType(REGENERATE_TWO_FACTOR_QR),\n map(action => action.payload),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(regenerateTwoFactorAuthQRLoading(true)),\n regenerateTwoFactorAuthQr().pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n regenerateTwoFactorAuthQRLoading(false),\n updateCurrentUserSuccess({\n twoFactorAuth: {\n ...data\n }\n })\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n regenerateTwoFactorAuthQRLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of, iif } from 'rxjs';\nimport { switchMap, map, filter, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\nimport { CHANGE_ORGANIZATION } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n loginLoading,\n insufficientlyAuthenticationDetails\n} from '../../actions/authentication-actions';\nimport { changeOrg } from '../../api/authentication-api';\n\nimport { saveAuthToken } from '../../utils/http-util';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(CHANGE_ORGANIZATION),\n map(action => action.payload),\n filter(data => data.organizationId),\n switchMap(({ organizationId }) =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(loginLoading(true)),\n changeOrg(organizationId).pipe(\n mergeMap(({ data }) => {\n if (!data) {\n throw new Error('Invalid response');\n }\n const { authToken } = data;\n saveAuthToken(authToken);\n window.location.reload();\n }),\n catchError(error => {\n const actions = [\n setConnectivityStatus({ loading: false }),\n loginLoading(false),\n insufficientlyAuthenticationDetails(\n error &&\n error.response &&\n error.response.details\n )\n ];\n return iif(\n () => error.status !== 412,\n of(\n ...actions,\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n ),\n of(...actions)\n );\n })\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { push } from 'react-router-redux';\n\nimport { SIGNUP_ACTIVATE_ORG_USER } from '../../constants/action-types';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n signupLoading,\n signupSuccess\n} from '../../actions/authentication-actions';\nimport { signupActivateOrgUser } from '../../api/authentication-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport browserHistory from '../../store/history';\nimport { saveAuthToken } from '../../utils/http-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(SIGNUP_ACTIVATE_ORG_USER),\n map(action => action.payload),\n switchMap(user =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(signupLoading(true)),\n signupActivateOrgUser(user).pipe(\n mergeMap(({ data }) => {\n const { user, authToken } = data;\n const {\n location: { state }\n } = browserHistory;\n let pathname = '/';\n if (state && state.redirectTo) {\n pathname = state.redirectTo;\n }\n saveAuthToken(authToken);\n return of(\n setConnectivityStatus({ loading: false }),\n signupLoading(false),\n signupSuccess(user),\n push(pathname)\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n signupLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","// eslint-disable-next-line\nexport const UNAUTHENTICATED_URLS = [\n '/signup',\n '/login',\n '/passwordrecovery',\n '/setnewpassword',\n '/changedeviceowner',\n '/signupandchangedeviceowner'\n];\n","import { of, Observable } from 'rxjs';\nimport { switchMap, catchError } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\nimport { push } from 'react-router-redux';\n\nimport { INIT_APP } from '../../constants/action-types';\nimport {\n getLoggedInUser,\n logoutSuccess\n} from '../../actions/authentication-actions';\nimport { getAuthToken } from '../../utils/http-util';\nimport browserHistory from '../../store/history';\nimport { UNAUTHENTICATED_URLS } from '../../constants/route-constants';\n\nconst authToken$ = Observable.create(observer => {\n const authToken = getAuthToken();\n if (!authToken) {\n observer.error();\n } else {\n observer.next();\n }\n observer.complete();\n});\n\nexport default action$ =>\n action$.pipe(\n ofType(INIT_APP),\n switchMap(() => authToken$),\n switchMap(() => of(getLoggedInUser(true))),\n catchError(() => {\n const {\n location: { pathname, search }\n } = browserHistory;\n const newLocation = {};\n const redirectUrl = '/login';\n if (UNAUTHENTICATED_URLS.indexOf(pathname.toLowerCase()) > -1) {\n // keep the pathname, without the state\n return of(logoutSuccess());\n }\n // after login redirect to whenever user wants\n newLocation.state = {\n redirectTo: pathname\n };\n newLocation.pathname = redirectUrl + search;\n return of(logoutSuccess(), push(newLocation));\n })\n );\n","import { combineEpics } from 'redux-observable';\nimport initAppEpic from './init-app-epic';\n\nexport default combineEpics(initAppEpic);\n","// @flow\nimport {\n api,\n makeGet,\n makePost,\n makePatch,\n makeDelete\n} from '../utils/http-util';\n\nconst API_URL = {\n GET_DEVICES: () => api`v1/devices`,\n ADD_DEVICE: () => api`v1/devices`,\n UPDATE_DEVICE: id => api`v1/devices/${id}`,\n DELETE_DEVICE: id => api`v1/devices/${id}`,\n GET_DEVICE_USERS: id => api`v1/devices/${id}/users`,\n ADD_OR_REMOVE_USERS_TO_DEVICE: id => api`v1/devices/${id}/users`,\n UPDATE_DEVICES_ORDERING: () => api`v1/devices/orders`,\n CHANGE_DEVICE_OWNER: id => api`v1/devices/${id}/change-device-owner`,\n CHANGE_DEVICE_OWNER_APPROVE: () =>\n api`v1/devices/change-device-owner-approve`,\n GET_DEVICE_TUNNELS: deviceId => api`v1/devices/${deviceId}/tunnels`,\n GET_DEVICES_STATUSES: () => api`v1/devices/statuses`\n};\n\nexport function getDevices() {\n return makeGet(API_URL.GET_DEVICES());\n}\n\nexport function addDevice(device: any) {\n return makePost(API_URL.ADD_DEVICE(), device);\n}\n\nexport function updateDevice(device: any) {\n return makePatch(API_URL.UPDATE_DEVICE(device._id), device);\n}\n\nexport function deleteDevice(id: string) {\n return makeDelete(API_URL.DELETE_DEVICE(id));\n}\n\nexport function getDeviceUsers(id: string) {\n return makeGet(API_URL.GET_DEVICE_USERS(id));\n}\n\nexport function updateDevicesOrdering(devices: any[]) {\n return makePost(API_URL.UPDATE_DEVICES_ORDERING(), devices);\n}\n\nexport function addOrRemoveUsersToDevice(\n deviceId: string,\n removedUsers?: string[],\n emails?: string[]\n) {\n return makePost(API_URL.ADD_OR_REMOVE_USERS_TO_DEVICE(deviceId), {\n removedUsers,\n emails\n });\n}\n\nexport function changeDeviceOwner(\n deviceId: string,\n email: string,\n tunnelsToMove: string[]\n) {\n return makePost(API_URL.CHANGE_DEVICE_OWNER(deviceId), {\n email,\n tunnelsToMove\n });\n}\n\nexport function changeDeviceOwnerApprove(\n token: string,\n validationNumbers: string,\n headers: any\n) {\n return makePost(\n API_URL.CHANGE_DEVICE_OWNER_APPROVE(),\n {\n token,\n validationNumbers\n },\n headers\n );\n}\n\nexport function getDeviceTunnels(deviceId: string) {\n return makeGet(API_URL.GET_DEVICE_TUNNELS(deviceId));\n}\n\nexport function getDevicesStatuses() {\n return makeGet(API_URL.GET_DEVICES_STATUSES());\n}\n","import { createAction } from 'redux-actions';\nimport {\n ADD_DEVICE,\n ADD_DEVICE_LOADING,\n ADD_DEVICE_SUCCESS,\n GET_DEVICES,\n GET_DEVICES_ERROR,\n GET_DEVICES_LOADING,\n GET_DEVICES_SUCCESS,\n UPDATE_DEVICE_SUCCESS,\n DEVICE_SOCKET_MESSAGE,\n UPDATE_DEVICE,\n UPDATE_DEVICE_LOADING,\n DELETE_DEVICE_SUCCESS,\n DELETE_DEVICE,\n DELETE_DEVICE_LOADING,\n UPDATE_DEVICES_ORDERING,\n UPDATE_DEVICES_ORDERING_LOADING,\n UPDATE_DEVICES_ORDERING_SUCCESS,\n UPDATE_DEVICES_ORDERING_ERROR,\n GET_DEVICES_STATUSES,\n GET_DEVICES_STATUSES_LOADING,\n GET_DEVICES_STATUSES_SUCCESS\n} from '../constants/action-types';\n\nexport const getDevices = createAction(GET_DEVICES);\nexport const getDevicesLoading = createAction(GET_DEVICES_LOADING);\nexport const getDevicesSuccess = createAction(GET_DEVICES_SUCCESS);\nexport const getDevicesError = createAction(GET_DEVICES_ERROR);\n\nexport const updateDevicesOrdering = createAction(UPDATE_DEVICES_ORDERING);\nexport const updateDevicesOrderingLoading = createAction(\n UPDATE_DEVICES_ORDERING_LOADING\n);\nexport const updateDevicesOrderingSuccess = createAction(\n UPDATE_DEVICES_ORDERING_SUCCESS\n);\nexport const updateDevicesOrderingError = createAction(\n UPDATE_DEVICES_ORDERING_ERROR\n);\n\nexport const addDevice = createAction(ADD_DEVICE);\nexport const addDeviceLoading = createAction(ADD_DEVICE_LOADING);\nexport const addDeviceSuccess = createAction(ADD_DEVICE_SUCCESS);\n\nexport const updateDevice = createAction(UPDATE_DEVICE);\nexport const updateDeviceLoading = createAction(UPDATE_DEVICE_LOADING);\nexport const updateDeviceSuccess = createAction(UPDATE_DEVICE_SUCCESS);\n\nexport const deleteDevice = createAction(DELETE_DEVICE);\nexport const deleteDeviceLoading = createAction(DELETE_DEVICE_LOADING);\nexport const deleteDeviceSuccess = createAction(DELETE_DEVICE_SUCCESS);\n\nexport const getStatuses = createAction(GET_DEVICES_STATUSES);\nexport const getStatusesLoading = createAction(GET_DEVICES_STATUSES_LOADING);\nexport const getStatusesSuccess = createAction(GET_DEVICES_STATUSES_SUCCESS);\n\nexport const socketMessageReceive = createAction(DEVICE_SOCKET_MESSAGE);\n","// @flow\nimport { api, makeGet, makePost, makeDelete } from '../utils/http-util';\n\nconst API_URL = {\n GET_DEVICE_USERS: id => api`v1/devices/${id}/users`,\n ADD_OR_REMOVE_USERS_TO_DEVICE: id => api`v1/devices/${id}/users`,\n HAS_TUNNEL_SETTINGS: (deviceId, user) =>\n api`v1/devices/${deviceId}/users/${user}/has-tunnel-settings`,\n TUNNEL_SETTINGS: (deviceId, user) =>\n api`v1/devices/${deviceId}/users/${user}/tunnel-settings`\n};\n\nexport function getDeviceUsers(id: string) {\n return makeGet(API_URL.GET_DEVICE_USERS(id));\n}\n\nexport function addOrRemoveUsersToDevice(\n deviceId: string,\n removedUsers?: string[],\n emails?: string[]\n) {\n return makePost(API_URL.ADD_OR_REMOVE_USERS_TO_DEVICE(deviceId), {\n removedUsers,\n emails\n });\n}\n\nexport function hasTunnelSettingsForType(\n deviceId: string,\n userId: string,\n type: string\n) {\n return makePost(API_URL.HAS_TUNNEL_SETTINGS(deviceId, userId), {\n type\n });\n}\n\nexport function replaceOrCreateTunnelSettingsForType(\n deviceId: string,\n userId: string,\n config: { type: string }\n) {\n return makePost(API_URL.TUNNEL_SETTINGS(deviceId, userId), config);\n}\n\nexport function removeTunnelSettingsForType(\n deviceId: string,\n userId: string,\n type: string\n) {\n return makeDelete(API_URL.TUNNEL_SETTINGS(deviceId, userId), {\n type\n });\n}\n","import { createAction } from 'redux-actions';\nimport {\n GET_DEVICE_USERS,\n GET_DEVICE_USERS_LOADING,\n GET_DEVICE_USERS_SUCCESS,\n UPDATE_USER_TO_DEVICE_ACCESS,\n UPDATE_USER_TO_DEVICE_ACCESS_LOADING,\n UPDATE_USER_TO_DEVICE_ACCESS_SUCCESS,\n UPDATE_USER_TO_DEVICE_ACCESS_ERROR,\n ADD_OR_REMOVE_USERS_TO_DEVICE,\n ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING,\n ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS,\n REMOVE_CURRENT_USER_FROM_DEVICE,\n REMOVE_CURRENT_USER_FROM_DEVICE_LOADING,\n REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS,\n CLEAR_DEVICE_USERS\n} from '../constants/action-types';\n\nexport const clearDeviceUsers = createAction(CLEAR_DEVICE_USERS);\n\nexport const getDeviceUsers = createAction(GET_DEVICE_USERS);\nexport const getDeviceUsersLoading = createAction(GET_DEVICE_USERS_LOADING);\nexport const getDeviceUsersSuccess = createAction(GET_DEVICE_USERS_SUCCESS);\n\nexport const addOrRemoveUsersToDevice = createAction(\n ADD_OR_REMOVE_USERS_TO_DEVICE\n);\nexport const addOrRemoveUsersToDeviceLoading = createAction(\n ADD_OR_REMOVE_USERS_TO_DEVICE_LOADING\n);\nexport const addOrRemoveUsersToDeviceSuccess = createAction(\n ADD_OR_REMOVE_USERS_TO_DEVICE_SUCCESS\n);\n\nexport const updateUserToDeviceAccess = createAction(\n UPDATE_USER_TO_DEVICE_ACCESS\n);\nexport const updateUserToDeviceAccessLoading = createAction(\n UPDATE_USER_TO_DEVICE_ACCESS_LOADING\n);\nexport const updateUserToDeviceAccessSuccess = createAction(\n UPDATE_USER_TO_DEVICE_ACCESS_SUCCESS\n);\nexport const updateUserToDeviceAccessError = createAction(\n UPDATE_USER_TO_DEVICE_ACCESS_ERROR\n);\n\nexport const removeCurrentUserFromDevice = createAction(\n REMOVE_CURRENT_USER_FROM_DEVICE\n);\n\nexport const removeCurrentUserFromDeviceLoading = createAction(\n REMOVE_CURRENT_USER_FROM_DEVICE_LOADING\n);\nexport const removeCurrentUserFromDeviceSuccess = createAction(\n REMOVE_CURRENT_USER_FROM_DEVICE_SUCCESS\n);\n","import { createSelector } from 'reselect';\n\nexport const selectLocalState = () => state => state.global;\n\nexport const getLoggedInUser = () =>\n createSelector(\n selectLocalState(),\n ({ loggedInUser }) => loggedInUser\n );\n\nexport const isAuthenticated = () =>\n createSelector(\n getLoggedInUser(),\n user => !!user\n );\n\nexport const isEmailVerified = () =>\n createSelector(\n getLoggedInUser(),\n user => {\n if (!user) {\n return false;\n }\n return user.emailVerified;\n }\n );\n\nexport const selectLoading = () =>\n createSelector(\n selectLocalState(),\n ({ loading }) => loading\n );\n\nexport const loginInProcess = () =>\n createSelector(\n selectLoading(),\n ({ login }) => login\n );\n\nexport const signupInProgress = () =>\n createSelector(\n selectLoading(),\n ({ signup }) => signup\n );\n\nexport const selectGlobalMessage = () =>\n createSelector(\n selectLocalState(),\n ({ message }) => message\n );\n\nexport const getErrorMessage = () =>\n createSelector(\n selectGlobalMessage(),\n ({ error }) => error\n );\n\nexport const getSuccessMessage = () =>\n createSelector(\n selectGlobalMessage(),\n ({ success }) => success\n );\n\nexport const getCookiesMessage = () =>\n createSelector(\n selectGlobalMessage(),\n ({ cookies }) => cookies\n );\n\nexport const selectUpdateCurrentUserLoading = () =>\n createSelector(\n selectLoading(),\n ({ updatingCurrentUser }) => updatingCurrentUser\n );\n\nexport const selectChangeCurrentUserPasswordLoading = () =>\n createSelector(\n selectLoading(),\n ({ changingPassword }) => changingPassword\n );\n\nexport const isSigningUp = () =>\n createSelector(\n selectLocalState(),\n ({ isSigningUp }) => isSigningUp\n );\n\nexport const selectToggleTwoFactorAuthLoading = () =>\n createSelector(\n selectLoading(),\n ({ toggleTwoFactorAuth }) => toggleTwoFactorAuth\n );\nexport const selectRegenerateTwoFactorAuthQRLoading = () =>\n createSelector(\n selectLoading(),\n ({ regenerateTwoFactorAuthQR }) => regenerateTwoFactorAuthQR\n );\nexport const insufficientlyAuthenticationDetails = () =>\n createSelector(\n selectLocalState(),\n ({ insufficientlyAuthenticationDetails }) =>\n insufficientlyAuthenticationDetails\n );\n","import { combineEpics } from 'redux-observable';\nimport getDevicesEpic from './get-devices';\nimport addDeviceEpic from './add-device';\nimport updateDeviceEpic from './update-device';\nimport deleteDeviceEpic from './delete-device';\nimport getDeviceUsersEpic from './get-device-users';\nimport getStatusesEpic from './get-statuses';\nimport addOrRemoveUsersToDeviceEpic from './add-or-remove-users-to-device';\nimport removeCurrentUserFromDeviceEpic from './remove-current-user-from-device';\nimport updateDevicesOrdering from './update-devices-ordering';\n\nexport default combineEpics(\n getDevicesEpic,\n getStatusesEpic,\n addDeviceEpic,\n updateDeviceEpic,\n deleteDeviceEpic,\n getDeviceUsersEpic,\n addOrRemoveUsersToDeviceEpic,\n removeCurrentUserFromDeviceEpic,\n updateDevicesOrdering\n);\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_DEVICES } from '../../constants/action-types';\nimport { getDevices } from '../../api/device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport {\n getDevicesLoading,\n getDevicesSuccess,\n getDevicesError\n} from '../../actions/device-actions';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_DEVICES),\n map(action => action.payload),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(getDevicesLoading(true)),\n getDevices().pipe(\n mergeMap(devices =>\n of(\n setConnectivityStatus({ loading: false }),\n getDevicesLoading(false),\n getDevicesError(''),\n getDevicesSuccess(devices)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n getDevicesLoading(false),\n getDevicesError(parseErrorMessage(error)),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_DEVICES_STATUSES } from '../../constants/action-types';\nimport { getDevicesStatuses } from '../../api/device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n getStatusesSuccess,\n getStatusesLoading\n} from '../../actions/device-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_DEVICES_STATUSES),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(getStatusesLoading(true)),\n getDevicesStatuses().pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n getStatusesLoading(false),\n getStatusesSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n getStatusesLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { ADD_DEVICE } from '../../constants/action-types';\nimport { addDevice } from '../../api/device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport {\n addDeviceLoading,\n addDeviceSuccess\n} from '../../actions/device-actions';\n\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(ADD_DEVICE),\n map(action => action.payload),\n switchMap(device =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(addDeviceLoading(true)),\n addDevice(device).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n addDeviceLoading(false),\n addDeviceSuccess(data),\n setGlobalMessageSuccess(\n `${device.name} added successfully.`\n )\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n addDeviceLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\nimport { UPDATE_DEVICE } from '../../constants/action-types';\nimport { updateDevice } from '../../api/device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageSuccess,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n updateDeviceLoading,\n updateDeviceSuccess\n} from '../../actions/device-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(UPDATE_DEVICE),\n map(action => action.payload),\n switchMap(device =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(updateDeviceLoading({ id: device._id, loading: true })),\n updateDevice(device).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n updateDeviceLoading({\n id: device._id,\n loading: false\n }),\n updateDeviceSuccess(data),\n setGlobalMessageSuccess(\n `${data.name} updated successfully.`\n )\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n updateDeviceLoading({\n id: device._id,\n loading: false\n }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { DELETE_DEVICE } from '../../constants/action-types';\nimport { deleteDevice } from '../../api/device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport {\n deleteDeviceLoading,\n deleteDeviceSuccess\n} from '../../actions/device-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default (action$, state) =>\n action$.pipe(\n ofType(DELETE_DEVICE),\n map(action => action.payload),\n mergeMap(deviceId =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(deleteDeviceLoading({ id: deviceId, loading: true })),\n deleteDevice(deviceId).pipe(\n mergeMap(() => {\n const {\n value: {\n devices: { data: devices }\n }\n } = state;\n const deletedDevice = devices.find(\n device => device._id === deviceId\n );\n return of(\n setConnectivityStatus({ loading: false }),\n deleteDeviceLoading({\n id: deviceId,\n loading: false\n }),\n deleteDeviceSuccess(deviceId),\n setGlobalMessageSuccess(\n deletedDevice\n ? `${\n deletedDevice.name\n } deleted successfully.`\n : ''\n )\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n deleteDeviceLoading({\n id: deviceId,\n loading: false\n }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_DEVICE_USERS } from '../../constants/action-types';\nimport { getDeviceUsers } from '../../api/user-device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n getDeviceUsersLoading,\n getDeviceUsersSuccess\n} from '../../actions/user-device-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_DEVICE_USERS),\n map(action => action.payload),\n switchMap(deviceId =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(getDeviceUsersLoading(true)),\n getDeviceUsers(deviceId).pipe(\n mergeMap(userDevices =>\n of(\n setConnectivityStatus({ loading: false }),\n getDeviceUsersLoading(false),\n getDeviceUsersSuccess(userDevices)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n getDeviceUsersLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { ADD_OR_REMOVE_USERS_TO_DEVICE } from '../../constants/action-types';\nimport { addOrRemoveUsersToDevice } from '../../api/user-device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n addOrRemoveUsersToDeviceLoading,\n addOrRemoveUsersToDeviceSuccess\n} from '../../actions/user-device-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(ADD_OR_REMOVE_USERS_TO_DEVICE),\n map(action => action.payload),\n switchMap(({ id, removedUsers, emails }) =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(addOrRemoveUsersToDeviceLoading(true)),\n addOrRemoveUsersToDevice(id, removedUsers, emails).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n addOrRemoveUsersToDeviceLoading(false),\n addOrRemoveUsersToDeviceSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n addOrRemoveUsersToDeviceLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { REMOVE_CURRENT_USER_FROM_DEVICE } from '../../constants/action-types';\nimport { addOrRemoveUsersToDevice } from '../../api/user-device-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n removeCurrentUserFromDeviceLoading,\n removeCurrentUserFromDeviceSuccess\n} from '../../actions/user-device-actions';\n\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default (action$, state$) =>\n action$.pipe(\n ofType(REMOVE_CURRENT_USER_FROM_DEVICE),\n map(action => action.payload),\n switchMap(deviceId => {\n const state = state$.value;\n const currentUser = getLoggedInUser()(state);\n const removedUsers = [currentUser._id];\n return merge(\n of(setConnectivityStatus({ loading: true })),\n of(removeCurrentUserFromDeviceLoading(true)),\n addOrRemoveUsersToDevice(deviceId, removedUsers).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n removeCurrentUserFromDeviceLoading(false),\n removeCurrentUserFromDeviceSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n removeCurrentUserFromDeviceLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n );\n })\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { UPDATE_DEVICES_ORDERING } from '../../constants/action-types';\nimport { updateDevicesOrdering } from '../../api/device-api';\nimport { setConnectivityStatus } from '../../actions/app-actions';\nimport {\n updateDevicesOrderingLoading,\n updateDevicesOrderingSuccess,\n updateDevicesOrderingError\n} from '../../actions/device-actions';\nimport { parseErrorMessage } from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(UPDATE_DEVICES_ORDERING),\n map(action => action.payload),\n switchMap(devices =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(updateDevicesOrderingLoading(true)),\n updateDevicesOrdering(devices).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n updateDevicesOrderingLoading(false),\n updateDevicesOrderingSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n updateDevicesOrderingLoading(false),\n updateDevicesOrderingError(parseErrorMessage(error))\n )\n )\n )\n )\n )\n );\n","// @flow\nimport {\n api,\n makeGet,\n makePost,\n makePatch,\n makeDelete\n} from '../utils/http-util';\n\nconst API_URL = {\n GET_GROUPS: () => api`v1/groups`,\n ADD_GROUP: () => api`v1/groups`,\n UPDATE_GROUP: id => api`v1/groups/${id}`,\n DELETE_GROUP: id => api`v1/groups/${id}`,\n UPDATE_GROUPS_ORDERING: () => api`v1/groups/orders`\n};\n\nexport function getGroups() {\n return makeGet(API_URL.GET_GROUPS());\n}\n\nexport function addGroup(group: any) {\n return makePost(API_URL.ADD_GROUP(), group);\n}\n\nexport function updateGroup(group: any) {\n return makePatch(API_URL.UPDATE_GROUP(group._id), group);\n}\n\nexport function updateGroupsOrdering(groups: any[]) {\n return makePost(API_URL.UPDATE_GROUPS_ORDERING(), groups);\n}\n\nexport function deleteGroup(_id: string) {\n return makeDelete(API_URL.DELETE_GROUP(_id));\n}\n","import { createAction } from 'redux-actions';\nimport {\n ADD_GROUP,\n ADD_GROUP_LOADING,\n ADD_GROUP_SUCCESS,\n DELETE_GROUP,\n DELETE_GROUP_LOADING,\n DELETE_GROUP_SUCCESS,\n GET_GROUPS,\n GET_GROUPS_LOADING,\n GET_GROUPS_SUCCESS,\n UPDATE_GROUPS_ORDERING,\n UPDATE_GROUPS_ORDERING_LOADING,\n UPDATE_GROUPS_ORDERING_SUCCESS,\n UPDATE_GROUP,\n UPDATE_GROUP_LOADING,\n UPDATE_GROUP_SUCCESS\n} from '../constants/action-types';\n\nexport const getGroups = createAction(GET_GROUPS);\nexport const getGroupsLoading = createAction(GET_GROUPS_LOADING);\nexport const getGroupsSuccess = createAction(GET_GROUPS_SUCCESS);\n\nexport const updateGroupsOrdering = createAction(UPDATE_GROUPS_ORDERING);\nexport const updateGroupsOrderingLoading = createAction(\n UPDATE_GROUPS_ORDERING_LOADING\n);\nexport const updateGroupsOrderingSuccess = createAction(\n UPDATE_GROUPS_ORDERING_SUCCESS\n);\n\nexport const addGroup = createAction(ADD_GROUP);\nexport const addGroupLoading = createAction(ADD_GROUP_LOADING);\nexport const addGroupSuccess = createAction(ADD_GROUP_SUCCESS);\n\nexport const deleteGroup = createAction(DELETE_GROUP);\nexport const deleteGroupLoading = createAction(DELETE_GROUP_LOADING);\nexport const deleteGroupSuccess = createAction(DELETE_GROUP_SUCCESS);\n\nexport const updateGroup = createAction(UPDATE_GROUP);\nexport const updateGroupLoading = createAction(UPDATE_GROUP_LOADING);\nexport const updateGroupSuccess = createAction(UPDATE_GROUP_SUCCESS);\n","import { combineEpics } from 'redux-observable';\nimport getGroupsEpic from './get-groups';\nimport updateGroupsOrdering from './update-groups-ordering';\nimport addGroupEpic from './add-group';\nimport deleteGroupEpic from './delete-group';\nimport updateGroupEpic from './update-group';\n\nexport default combineEpics(\n getGroupsEpic,\n updateGroupsOrdering,\n addGroupEpic,\n updateGroupEpic,\n deleteGroupEpic\n);\n","import { merge, of } from 'rxjs';\nimport { switchMap, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_GROUPS } from '../../constants/action-types';\nimport { getGroups } from '../../api/group-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n getGroupsLoading,\n getGroupsSuccess\n} from '../../actions/group-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_GROUPS),\n switchMap(group =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(getGroupsLoading(true)),\n getGroups(group).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n getGroupsLoading(false),\n getGroupsSuccess([\n ...data,\n { _id: '-1', name: 'Shared' }\n ])\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n getGroupsLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { UPDATE_GROUPS_ORDERING } from '../../constants/action-types';\nimport { updateGroupsOrdering } from '../../api/group-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport {\n updateGroupsOrderingLoading,\n updateGroupsOrderingSuccess\n} from '../../actions/group-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(UPDATE_GROUPS_ORDERING),\n map(action => action.payload),\n switchMap(groups =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(updateGroupsOrderingLoading(true)),\n updateGroupsOrdering(groups).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n updateGroupsOrderingLoading(false),\n updateGroupsOrderingSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n updateGroupsOrderingLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { ADD_GROUP } from '../../constants/action-types';\nimport { addGroup } from '../../api/group-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport { addGroupLoading, addGroupSuccess } from '../../actions/group-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(ADD_GROUP),\n map(action => action.payload),\n switchMap(group =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(addGroupLoading(true)),\n addGroup(group).pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n addGroupLoading(false),\n addGroupSuccess(data),\n setGlobalMessageSuccess(\n `${group.name} added successfully.`\n )\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n addGroupLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { UPDATE_GROUP } from '../../constants/action-types';\nimport { updateGroup } from '../../api/group-api';\nimport {\n updateGroupLoading,\n updateGroupSuccess\n} from '../../actions/group-actions';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(UPDATE_GROUP),\n map(action => action.payload),\n switchMap(group =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(updateGroupLoading({ id: group.id, loading: true })),\n updateGroup(group).pipe(\n mergeMap(() =>\n of(\n setConnectivityStatus({ loading: false }),\n updateGroupLoading({\n id: group.id,\n loading: false\n }),\n updateGroupSuccess(group),\n setGlobalMessageSuccess(\n group\n ? `${group.name} updated successfully.`\n : ''\n )\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n updateGroupLoading({\n id: group.id,\n loading: false\n }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { DELETE_GROUP } from '../../constants/action-types';\nimport { deleteGroup } from '../../api/group-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport {\n deleteGroupLoading,\n deleteGroupSuccess\n} from '../../actions/group-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default (action$, state) =>\n action$.pipe(\n ofType(DELETE_GROUP),\n map(action => action.payload),\n switchMap(groupId =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(deleteGroupLoading({ id: groupId, loading: true })),\n deleteGroup(groupId).pipe(\n mergeMap(() => {\n const {\n value: {\n groups: { data: groups }\n }\n } = state;\n const deletedGroup = groups.find(\n group => group._id === groupId\n );\n return of(\n setConnectivityStatus({ loading: false }),\n deleteGroupLoading({\n id: groupId,\n loading: false\n }),\n deleteGroupSuccess(groupId),\n setGlobalMessageSuccess(\n deletedGroup\n ? `${\n deletedGroup.name\n } deleted successfully.`\n : ''\n )\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n deleteGroupLoading({\n id: groupId,\n loading: false\n }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","// @flow\nimport {\n api,\n makeDelete,\n makeGet,\n makePatch,\n makePost\n} from '../utils/http-util';\n\nconst API_URL = {\n GET_USERS: () => api`v1/users`,\n ORG_USERS: () => api`v1/organization/users`,\n GET_USERS_BY_EMAILS: () => api`v1/users/by-emails`,\n GET_USER: id => api`v1/users/${id}`,\n MAKE_GROUP_AS_DEFAULT: () => api`v1/me`,\n SEND_ACTIVATION_EMAIL: () => api`v1/me/send-activation-email`,\n ADD_ORG_USER: () => api`v1/users/organization`,\n ACTIVATE_ORG_USER: () => api`v1/activate-org-user`,\n RESEND_INVITATION_ORG_USER: () => api`v1/users/resend-invitation`\n};\n\nexport function getUsers() {\n return makeGet(API_URL.GET_USERS());\n}\n\nexport function getUser(id: string) {\n return makeGet(API_URL.GET_USER(id));\n}\nexport function getOrganizationUser() {\n return makeGet(API_URL.ORG_USERS());\n}\nexport function deleteOrganizationUser(email: string) {\n return makeDelete(API_URL.ORG_USERS(), { email });\n}\n\nexport function inviteOrgUser(data) {\n return makePost(API_URL.ADD_ORG_USER(), data);\n}\n\nexport function resendInvitationOrgUser(data) {\n return makePost(API_URL.RESEND_INVITATION_ORG_USER(), data);\n}\n\nexport function getUsersByEmail(emails: string[]) {\n return makePost(API_URL.GET_USERS_BY_EMAILS(), emails);\n}\n\nexport function makeGroupAsDefault(_id: string) {\n return makePatch(API_URL.MAKE_GROUP_AS_DEFAULT(), {\n defaultGroup: _id\n });\n}\n\nexport function sendAccountActivationEmail() {\n return makeGet(API_URL.SEND_ACTIVATION_EMAIL());\n}\nexport function activateOrgUser(data) {\n return makePost(API_URL.ACTIVATE_ORG_USER(), data);\n}\n","import { createAction } from 'redux-actions';\nimport {\n MAKE_GROUP_AS_DEFAULT,\n MAKE_GROUP_AS_DEFAULT_LOADING,\n MAKE_GROUP_AS_DEFAULT_SUCCESS,\n SEND_ACTIVATION_EMAIL,\n SEND_ACTIVATION_EMAIL_LOADING\n} from '../constants/action-types';\n\nexport const makeGroupAsDefault = createAction(MAKE_GROUP_AS_DEFAULT);\nexport const makeGroupAsDefaultLoading = createAction(\n MAKE_GROUP_AS_DEFAULT_LOADING\n);\nexport const makeGroupAsDefaultSuccess = createAction(\n MAKE_GROUP_AS_DEFAULT_SUCCESS\n);\n\nexport const sendActivationEmail = createAction(SEND_ACTIVATION_EMAIL);\nexport const sendActivationEmailLoading = createAction(\n SEND_ACTIVATION_EMAIL_LOADING\n);\n","import { combineEpics } from 'redux-observable';\nimport makeDefaultGroupEpic from './make-default-group';\nimport sendActivationEmailEpic from './send-activation-email';\n\nexport default combineEpics(makeDefaultGroupEpic, sendActivationEmailEpic);\n","import { merge, of } from 'rxjs';\nimport { switchMap, map, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { MAKE_GROUP_AS_DEFAULT } from '../../constants/action-types';\nimport { makeGroupAsDefault } from '../../api/users-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport {\n makeGroupAsDefaultLoading,\n makeGroupAsDefaultSuccess\n} from '../../actions/users-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default (action$, state) =>\n action$.pipe(\n ofType(MAKE_GROUP_AS_DEFAULT),\n map(action => action.payload),\n switchMap(groupId =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(makeGroupAsDefaultLoading({ id: groupId, loading: true })),\n makeGroupAsDefault(groupId).pipe(\n mergeMap(() => {\n const {\n value: {\n groups: { data: groups }\n }\n } = state;\n const defaultGroup = groups.find(\n group => group._id === groupId\n );\n return of(\n setConnectivityStatus({ loading: false }),\n makeGroupAsDefaultLoading({\n id: groupId,\n loading: false\n }),\n makeGroupAsDefaultSuccess(groupId),\n setGlobalMessageSuccess(\n defaultGroup\n ? `Maked ${\n defaultGroup.name\n } group as default.`\n : ''\n )\n );\n }),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n makeGroupAsDefaultLoading({\n id: groupId,\n loading: false\n }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { merge, of } from 'rxjs';\nimport { switchMap, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { SEND_ACTIVATION_EMAIL } from '../../constants/action-types';\nimport { sendAccountActivationEmail } from '../../api/users-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../actions/app-actions';\nimport { sendActivationEmailLoading } from '../../actions/users-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(SEND_ACTIVATION_EMAIL),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n of(sendActivationEmailLoading(true)),\n sendAccountActivationEmail().pipe(\n mergeMap(() =>\n of(\n setConnectivityStatus({ loading: false }),\n sendActivationEmailLoading(false),\n setGlobalMessageSuccess('Activation Email Resent')\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n sendActivationEmailLoading(false),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","// @flow\nimport {\n api,\n makeDelete,\n makeGet,\n makePost,\n makePut\n} from '../utils/http-util';\n\nconst API_URL = {\n ADD_TUNNEL: () => api`v1/tunnel/start/`,\n UPDATE_TUNNEL: id => api`v1/tunnel/${id}`,\n SSH: id => api`v1/tunnel/ssh/start/${id}`,\n PROXY: id => api`v1/tunnel/proxy/start/${id}`,\n VNC: id => api`v1/tunnel/vnc/start/${id}`,\n RDP: id => api`v1/tunnel/rdp/start/${id}`,\n GET_TUNNELS: query => api`v1/tunnels?${query}`,\n GET_DEVICE_HTTP_TUNNELS: deviceId =>\n api`v1/tunnels?filters[0][property]=type&filters[0][value]=http&filters[1][property]=deviceId&filters[1][value]=${deviceId}`,\n DELETE_CUSTOM_TUNNEL: id => api`v1/tunnel/${id}`,\n STOP_TUNNEL: id => api`v1/tunnel/stop/${id}`,\n STOP_TUNNELS: () => api`v1/tunnels/stop`,\n RELOAD_TUNNELS: () => api`v1/tunnels/reload`,\n GET_TUNNELS_STATUSES: () => api`v1/tunnels/statuses`\n};\n\nexport function openSSHTunnel(id, data) {\n return makePost(API_URL.SSH(id), data);\n}\n\nexport function openTunnel(data) {\n return makePost(API_URL.ADD_TUNNEL(), data);\n}\n\nexport function stopTunnel(id, data) {\n return makePost(API_URL.STOP_TUNNEL(id), data);\n}\n\nexport function stopAllRunningTunnels() {\n return makePost(API_URL.STOP_TUNNELS(), {});\n}\n\nexport function reloadAllRunningTunnels() {\n return makePost(API_URL.RELOAD_TUNNELS(), {});\n}\n\nexport function addTunnel(data: any) {\n return makePost(API_URL.ADD_TUNNEL(), data);\n}\n\nexport function updateTunnel(tunnelId, data) {\n return makePut(API_URL.UPDATE_TUNNEL(tunnelId), data);\n}\n\nexport function openVNCTunnel(id, data) {\n return makePost(API_URL.VNC(id), data);\n}\n\nexport function openRDPTunnel(id, data) {\n return makePost(API_URL.RDP(id), data);\n}\n\nexport function openProxyTunnel(id, data) {\n return makePost(API_URL.PROXY(id), data);\n}\n\nexport function getTunnels(search, filters = []) {\n // let search = 'tunnelName' and filters = [{ property: \"type\", values: ['http', 'rdp'] }]\n // query wiil be 'search=tunnelName&filters[0][property]=type&filters[0][value][0]=http&filters[0][value][1]=rdp&'\n let query = '';\n if (search) {\n query += `search=${search}&`;\n }\n const map = filters.reduce((map, f) => {\n const { property } = f;\n if (!map[property]) {\n // eslint-disable-next-line\n map[property] = [];\n }\n const values = f.values || [];\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (map[property].indexOf(v) === -1) {\n map[property].push(v);\n }\n }\n return map;\n }, {});\n let q = '';\n let count = 0;\n // eslint-disable-next-line\n for (const property in map) {\n // eslint-disable-next-line\n if (map.hasOwnProperty(property)) {\n const values = map[property];\n if (!values || values.length === 0) {\n // eslint-disable-next-line\n continue;\n }\n q += `filters[${count}][property]=${property}&`;\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n q += `filters[${count}][value][${i}]=${v}&`;\n }\n // q += '&';\n count += 1;\n }\n }\n query += q;\n if (query.charAt(query.length - 1) === '&')\n query = query.slice(0, query.length - 1);\n return makeGet(API_URL.GET_TUNNELS(query));\n}\n\nexport function getDeviceHttpTunnels(deviceId) {\n return makeGet(API_URL.GET_DEVICE_HTTP_TUNNELS(deviceId));\n}\n\nexport function deleteCustomTunnel(id) {\n return makeDelete(API_URL.DELETE_CUSTOM_TUNNEL(id));\n}\nexport function getTunnelStatuses() {\n return makeGet(API_URL.GET_TUNNELS_STATUSES());\n}\n","import { createAction } from 'redux-actions';\nimport {\n UPDATE_TUNNEL_SEARCH,\n RESET_ALL_TUNNEL_FILTERS,\n GET_TUNNEL_STATUSES,\n GET_TUNNEL_STATUSES_SUCCES,\n UPDATE_TUNNEL_UI_FILTERS,\n UPDATE_TUNNEL_FILTER\n} from '../constants/action-types';\n\nexport const updateTunnelSearch = createAction(UPDATE_TUNNEL_SEARCH);\nexport const resetAllTunnelFilters = createAction(RESET_ALL_TUNNEL_FILTERS);\nexport const updateTunnelUiFilters = createAction(UPDATE_TUNNEL_UI_FILTERS);\n\nexport const updateTunnelFilter = createAction(UPDATE_TUNNEL_FILTER);\n\nexport const getTunnelStatuses = createAction(GET_TUNNEL_STATUSES);\nexport const getTunnelStatusesSuccess = createAction(\n GET_TUNNEL_STATUSES_SUCCES\n);\n","import { combineEpics } from 'redux-observable';\nimport getStatusesEpic from './get-statuses';\n\nexport default combineEpics(getStatusesEpic);\n","import { merge, of } from 'rxjs';\nimport { switchMap, catchError, mergeMap } from 'rxjs/operators';\nimport { ofType } from 'redux-observable';\n\nimport { GET_TUNNEL_STATUSES } from '../../constants/action-types';\nimport { getTunnelStatuses } from '../../api/tunnel-api';\nimport {\n setConnectivityStatus,\n setGlobalMessageError\n} from '../../actions/app-actions';\nimport { getTunnelStatusesSuccess } from '../../actions/tunnel-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nexport default action$ =>\n action$.pipe(\n ofType(GET_TUNNEL_STATUSES),\n switchMap(() =>\n merge(\n of(setConnectivityStatus({ loading: true })),\n getTunnelStatuses().pipe(\n mergeMap(({ data }) =>\n of(\n setConnectivityStatus({ loading: false }),\n getTunnelStatusesSuccess(data)\n )\n ),\n catchError(error =>\n of(\n setConnectivityStatus({ loading: false }),\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n )\n )\n )\n )\n )\n )\n );\n","import { combineEpics } from 'redux-observable';\nimport authenticationEpics from './authentication-epic';\nimport appEpics from './app-epic';\nimport deviceEpic from './device-epic';\nimport groupEpic from './group-epic';\nimport usersEpic from './users-epic';\nimport tunnelEpic from './tunnel-epic';\n\nexport default combineEpics(\n appEpics,\n authenticationEpics,\n deviceEpic,\n groupEpic,\n usersEpic,\n tunnelEpic\n);\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport { createEpicMiddleware } from 'redux-observable';\nimport { routerMiddleware } from 'react-router-redux';\nimport reduxImmutableStateInvariant from 'redux-immutable-state-invariant';\nimport rootReducer from '../reducers';\nimport rootEpic from '../epics';\nimport browserHistory from './history';\nimport initialState from '../reducers/initial-state';\n\n// Build the middleware for intercepting and dispatching navigation actions\nconst routeMiddleware = routerMiddleware(browserHistory);\nconst epicMiddleware = createEpicMiddleware();\n\nfunction configureStoreProd(state = initialState) {\n const middlewares = [epicMiddleware, routeMiddleware];\n const store = createStore(\n rootReducer,\n state,\n compose(applyMiddleware(...middlewares))\n );\n epicMiddleware.run(rootEpic);\n return store;\n}\n\nfunction configureStoreDev(state = initialState) {\n const middlewares = [\n // Add other middleware on this line...\n\n // Redux middleware that spits an error on you when you try to mutate your state either inside a dispatch or between dispatches.\n reduxImmutableStateInvariant(),\n\n epicMiddleware,\n routeMiddleware\n ];\n const composeEnhancers =\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n const store = createStore(\n rootReducer,\n state,\n composeEnhancers(applyMiddleware(...middlewares))\n );\n epicMiddleware.run(rootEpic);\n\n if (module.hot && typeof module.hot.accept === 'function') {\n // Enable Webpack hot module replacement for reducers\n module.hot.accept('../reducers', () => {\n const nextReducer = require('../reducers').default; // eslint-disable-line global-require\n store.replaceReducer(nextReducer);\n });\n }\n\n return store;\n}\n\nconst configureStore =\n process.env.NODE_ENV === 'production'\n ? configureStoreProd\n : configureStoreDev;\n\nexport default configureStore;\n","// @flow\nimport configureStore from './configureStore';\n\nconst store = configureStore(window.__PRELOADED_STATE__);\n\nexport default store;\n","import React from 'react';\nimport { JssProvider } from 'react-jss';\nimport { withStyles, MuiThemeProvider } from '@material-ui/core/styles';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport getPageContext from '../styles/createContext';\n\n// Apply some reset\nconst styles = theme => ({\n '@global': {\n html: {\n background: theme.palette.background.default,\n WebkitFontSmoothing: 'antialiased', // Antialiasing.\n MozOsxFontSmoothing: 'grayscale' // Antialiasing.\n },\n body: {\n margin: 0\n }\n }\n});\n\nlet AppWrapper = props => props.children;\n\nAppWrapper = withStyles(styles)(AppWrapper);\n\nfunction withRoot(Component) {\n class WithRoot extends React.Component {\n constructor(props) {\n super(props);\n this.pageContext = getPageContext();\n }\n\n componentDidMount() {\n // Remove the server-side injected CSS.\n const jssStyles = document.querySelector('#jss-server-side');\n if (jssStyles && jssStyles.parentNode) {\n jssStyles.parentNode.removeChild(jssStyles);\n }\n }\n\n render() {\n const { pageContext } = this;\n return (\n /* Wrap every page in Jss and Theme providers */\n \n {/* MuiThemeProvider makes the theme available down the React\n tree thanks to React context. */}\n \n \n \n \n \n \n \n );\n }\n }\n\n return WithRoot;\n}\n\nexport default withRoot;\n","// @flow\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Typography from '@material-ui/core/Typography';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Card from '@material-ui/core/Card';\nimport SignUpLink from '@material-ui/core/Link';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport { withStyles } from '@material-ui/core/styles';\nimport { validate as validateEmail } from 'email-validator';\nimport { Hidden } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n content: {\n padding: '20px'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'column',\n padding: '5px 20px',\n height: '80px',\n alignItems: 'inherit'\n },\n flex1: {\n flex: '1'\n },\n fontSizeH1: {\n fontSize: '2rem'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n loginButton: {\n // margin: theme.spacing.unit\n // marginRight: '16px'\n },\n mainActions: {\n display: 'flex',\n flexDirection: 'row',\n height: '36px',\n margin: 0\n },\n passwordRecoveryLink: {\n padding: '0',\n fontSize: '11px',\n height: '30px',\n minHeight: '30px',\n // marginRight: '16px',\n marginTop: '4px'\n },\n passwordRecoveryLinkWrapper: {\n display: 'flex',\n flexDirection: 'row',\n margin: 0\n }\n});\n\nconst Login = ({\n classes,\n actions: { login },\n loginInProgress,\n insufficientlyAuthenticationDetails,\n mode\n}) => {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [twoFactorAuthStr, setTwoFactorAuthStr] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [emailError, setEmailError] = useState('');\n const [passwordError, setPasswordError] = useState('');\n const [twoFactorAuthStrError, setTwoFactorAuthStrError] = useState('');\n const [showTwoFactorAuthField, setShowTwoFactorAuthField] = useState(false);\n\n useEffect(\n () => {\n if (\n insufficientlyAuthenticationDetails.indexOf(\n 'twoFactorAuthStr'\n ) > -1\n ) {\n setShowTwoFactorAuthField(true);\n }\n },\n [insufficientlyAuthenticationDetails]\n );\n\n const handleEmailChange = event => {\n setEmail(event.target.value);\n };\n const handlePasswordChange = event => {\n setPassword(event.target.value);\n };\n const handleTwoFactorAuthStrChange = event => {\n setTwoFactorAuthStr(event.target.value);\n };\n const handleMouseDownPassword = event => {\n event.preventDefault();\n };\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword);\n };\n const validateFormFields = (setToState = true) => {\n const errors = {\n emailError: '',\n passwordError: '',\n twoFactorAuthStrError: ''\n };\n let isValid = true;\n if (email.trim() === '') {\n isValid = false;\n errors.emailError = 'Please enter your email';\n } else if (!validateEmail(email)) {\n isValid = false;\n errors.emailError = 'Invalid Email';\n }\n if (password.trim() === '') {\n isValid = false;\n errors.passwordError = 'Please enter password';\n } else if (password.length < 8) {\n isValid = false;\n errors.passwordError = 'Passwords should be at least 8 chars';\n }\n if (showTwoFactorAuthField) {\n if (twoFactorAuthStr.trim() === '') {\n isValid = false;\n errors.twoFactorAuthStrError = 'Please enter digits';\n } else if (twoFactorAuthStr.trim().length !== 6) {\n isValid = false;\n errors.twoFactorAuthStrError =\n 'Two factor authentitaction should be 6 digits';\n }\n }\n if (setToState) {\n setEmailError(errors.emailError);\n setPasswordError(errors.passwordError);\n setTwoFactorAuthStrError(errors.twoFactorAuthStrError);\n }\n return isValid;\n };\n const handleLoginButtonClick = () => {\n if (validateFormFields()) {\n const data = {\n email,\n password,\n twoFactorAuthStr,\n redirect: true\n };\n if (mode) {\n data.redirect = false;\n }\n login(data);\n }\n };\n\n const onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n handleLoginButtonClick();\n break;\n }\n default:\n break;\n }\n };\n\n const inputProps = {\n onKeyDown\n };\n\n return (\n <>\n \n \n \n Sign in\n \n
\n {!showTwoFactorAuthField && (\n <>\n \n \n Email\n \n \n {emailError && (\n \n {emailError}\n \n )}\n \n \n \n Password\n \n \n \n {showPassword ? (\n \n ) : (\n \n )}\n \n \n }\n />\n {passwordError && (\n \n {passwordError}\n \n )}\n \n \n )}\n {showTwoFactorAuthField && (\n \n \n Two Factor Auth\n \n \n {twoFactorAuthStrError && (\n \n {twoFactorAuthStrError}\n \n )}\n \n )}\n
\n
\n \n
\n {mode !== 'forDeviceOwnership' &&\n !showTwoFactorAuthField && (\n (\n \n )}\n >\n Sign Up\n \n )}\n {showTwoFactorAuthField && (\n {\n setShowTwoFactorAuthField(false);\n setTwoFactorAuthStr('');\n }}\n >\n Back\n \n )}\n
\n \n Login\n \n
\n {mode !== 'forDeviceOwnership' && !showTwoFactorAuthField && (\n
\n
\n (\n \n )}\n >\n Forgot Password?\n \n
\n )}\n \n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n
\n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n
\n \n \n );\n};\n\nLogin.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired\n }).isRequired,\n actions: PropTypes.shape({\n login: PropTypes.func.isRequired\n }).isRequired,\n loginInProgress: PropTypes.bool.isRequired,\n insufficientlyAuthenticationDetails: PropTypes.array.isRequired,\n mode: PropTypes.string\n};\n\nexport default withStyles(styles)(Login);\n","import { bindActionCreators } from 'redux';\n\n// shortcut for binding actions and wrapping them in \"actions\"\nexport const wrapActionCreators = actions => dispatch => ({\n actions: bindActionCreators(actions, dispatch)\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport Login from '../../../components/Authentication/Login';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { login } from '../../../actions/authentication-actions';\nimport {\n loginInProcess,\n insufficientlyAuthenticationDetails\n} from '../../../selectors/app-selectors';\n\nconst LoginHOC = ({\n actions,\n loginInProgress,\n insufficientlyAuthenticationDetails,\n mode,\n newOwnerEmail\n}) => (\n \n);\n\nLoginHOC.propTypes = {\n actions: PropTypes.shape({\n login: PropTypes.func.isRequired\n }).isRequired,\n loginInProgress: PropTypes.bool.isRequired,\n insufficientlyAuthenticationDetails: PropTypes.array,\n mode: PropTypes.string,\n newOwnerEmail: PropTypes.string\n};\n\nconst mapStateToProps = createStructuredSelector({\n loginInProgress: loginInProcess(),\n insufficientlyAuthenticationDetails: insufficientlyAuthenticationDetails()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n login\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(LoginHOC);\n","import { validate as emailValidator } from 'email-validator';\n\nexport function validateFullname(fullName) {\n let isValid = true;\n const errors = {\n fullNameError: ''\n };\n if (!fullName || !fullName.trim()) {\n isValid = false;\n errors.fullNameError = 'Please enter your full name';\n }\n return {\n isValid,\n errors\n };\n}\n\nexport function validateEmail(email) {\n let isValid = true;\n const errors = {\n emailError: ''\n };\n if (!email || !email.trim()) {\n isValid = false;\n errors.emailError = 'Please enter your email';\n } else if (!emailValidator(email)) {\n isValid = false;\n errors.emailError = 'Invalid Email';\n }\n return {\n isValid,\n errors\n };\n}\n\nexport function validateUsername(username) {\n let isValid = true;\n const errors = {\n usernameError: ''\n };\n const regex = /^[a-z][a-z0-9]+$/i;\n if (!username || !username.trim()) {\n isValid = false;\n errors.usernameError = 'Please enter Username';\n } else if (username.trim().length < 5 || !regex.test(username.trim())) {\n isValid = false;\n errors.usernameError =\n 'Username should be minimum 5 characters, only numbers and letters with first letter character.';\n }\n return {\n isValid,\n errors\n };\n}\n\nexport function isValidLocalPort(localPort) {\n const parsedLocalPort = parseFloat(localPort);\n let isValid = true;\n if (\n !Number.isInteger(parsedLocalPort) ||\n parsedLocalPort < 0 ||\n parsedLocalPort > 65535\n ) {\n isValid = false;\n }\n return isValid;\n}\n\nexport function isValidTunnelName(name) {\n const nameRegEx = /^[a-z0-9_-]*$/i;\n let isValid = true;\n if (!nameRegEx.test(name.trim())) {\n isValid = false;\n }\n return isValid;\n}\n","// @flow\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport Button from '@material-ui/core/Button';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport FormControl from '@material-ui/core/FormControl';\nimport SignUpLink from '@material-ui/core/Link';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport CheckedIcon from '@material-ui/icons/CheckOutlined';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Hidden } from '@material-ui/core';\nimport {\n validateUsername,\n validateEmail,\n validateFullname\n} from '../../../utils/validations';\nimport {\n getSuggestedUsername,\n checkUsernameExisting\n} from '../../../api/authentication-api';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n content: {\n padding: '20px'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'row',\n padding: '5px 20px'\n },\n fontSizeH1: {\n fontSize: '2rem'\n },\n flex1: {\n flex: '1'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n button: {\n // margin: theme.spacing.unit\n marginRight: 0,\n marginLeft: 0\n },\n privacy: {\n marginTop: '15px'\n },\n userNameAdornment: {\n marginRight: 12\n }\n});\n\nclass Signup extends React.Component<\n {\n classes: {\n root: string,\n content: string,\n contentBody: string,\n actionsBar: string,\n flex1: string,\n formControl: string,\n button: string,\n privacy: string\n },\n actions: {\n signup: ({\n fullName: string,\n email: string,\n username: string,\n password: string,\n confirmPassword: string\n }) => void\n },\n signupInProgress: boolean,\n mode: string,\n newOwnerEmail: string\n },\n {\n email: string,\n username: string,\n password: string,\n showPassword: boolean,\n confirmPassword: string,\n showConfirmPassword: boolean,\n fullName: string,\n fullNameError: string,\n emailError: string,\n usernameError: string,\n passwordError: string,\n confirmPasswordError: string,\n isCheckingUsername: boolean,\n userNameNotExists: boolean\n }\n > {\n checkUserName = debounce(() => {\n const { username } = this.state;\n this.setState({\n isCheckingUsername: true,\n userNameNotExists: false\n });\n checkUsernameExisting({\n username\n }).subscribe(d => {\n const { data } = d;\n if (!data) {\n this.setState({\n isCheckingUsername: false,\n userNameNotExists: true,\n usernameError: ''\n });\n } else {\n this.setState({\n isCheckingUsername: false,\n usernameError: 'Username exists'\n });\n }\n });\n }, 100);\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n constructor(props) {\n super(props);\n this.state = {\n fullName: '',\n email: props.newOwnerEmail || '',\n username: '',\n password: '',\n confirmPassword: '',\n showPassword: false,\n showConfirmPassword: false,\n fullNameError: '',\n usernameError: '',\n emailError: '',\n passwordError: '',\n confirmPasswordError: '',\n isCheckingUsername: false,\n userNameNotExists: false\n };\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSignup();\n break;\n }\n default:\n break;\n }\n };\n\n handleChange = prop => event => {\n this.setState({ [prop]: event.target.value });\n if (prop === 'username') {\n this.setState({ isCheckingUsername: true });\n this.checkUserName();\n }\n };\n\n handleMouseDownPassword = event => {\n event.preventDefault();\n };\n\n handleClickShowPassword = prop => () => {\n const { [prop]: stateProp } = this.state;\n this.setState({ [prop]: !stateProp });\n };\n\n handleSignup = () => {\n const {\n actions: { signup },\n token\n } = this.props;\n const {\n fullName,\n email,\n username,\n password,\n confirmPassword,\n isCheckingUsername,\n userNameNotExists\n } = this.state;\n if (\n this.validateFormFields() &&\n !isCheckingUsername &&\n userNameNotExists\n ) {\n signup({\n fullName: fullName.trim(),\n email: email.trim(),\n username: username.trim(),\n password: password.trim(),\n confirmPassword: confirmPassword.trim(),\n token\n });\n }\n };\n\n validateFormFields = (setToState: boolean = true) => {\n const { fullName, email, username } = this.state;\n let errors = {\n fullNameError: '',\n emailError: '',\n usernameError: '',\n passwordError: '',\n confirmPasswordError: ''\n };\n let isValid = true;\n\n const {\n isValid: isValidFullname,\n errors: fullNameErrors\n } = validateFullname(fullName);\n isValid = isValid && isValidFullname;\n errors = {\n ...errors,\n ...fullNameErrors\n };\n\n const { isValid: isValidEmail, errors: emailErrors } = validateEmail(\n email\n );\n isValid = isValid && isValidEmail;\n errors = {\n ...errors,\n ...emailErrors\n };\n\n const {\n isValid: isValidUserName,\n errors: userNameErrors\n } = validateUsername(username);\n isValid = isValid && isValidUserName;\n errors = {\n ...errors,\n ...userNameErrors\n };\n\n const {\n isValid: areValidPasswords,\n errors: passwordsErrors\n } = this.validatePasswords();\n isValid = isValid && areValidPasswords;\n errors = {\n ...errors,\n ...passwordsErrors\n };\n\n if (setToState && Object.keys(errors).length) {\n this.setState(errors);\n }\n return isValid;\n };\n\n validatePasswords = (fromField: null) => {\n const { password, confirmPassword, confirmPasswordError } = this.state;\n let isValid = true;\n const errors = {\n passwordError: '',\n confirmPasswordError\n };\n if (password.trim() === '') {\n isValid = false;\n errors.passwordError = 'Please enter password';\n } else if (password.trim().length < 8) {\n isValid = false;\n errors.passwordError = 'Passwords should be at least 8 chars';\n }\n if (fromField === 'signup-password-field') {\n if (\n confirmPassword.trim() &&\n confirmPassword.trim() !== password.trim()\n ) {\n isValid = false;\n errors.confirmPasswordError =\n \"Password and confirm password don't match\";\n } else if (confirmPassword.trim()) {\n errors.confirmPasswordError = '';\n }\n } else if (confirmPassword.trim() !== password.trim()) {\n isValid = false;\n errors.confirmPasswordError =\n \"Password and confirm password don't match\";\n } else {\n errors.confirmPasswordError = '';\n }\n return {\n isValid,\n errors\n };\n };\n\n _getSuggestedUsername = () => {\n const { fullName, email } = this.state;\n this.setState({\n isCheckingUsername: true,\n userNameNotExists: false\n });\n getSuggestedUsername({\n fullName: fullName.trim(),\n email: email.trim()\n }).subscribe(username => {\n if (username && username.data) {\n this.setState({\n username: username.data,\n isCheckingUsername: false,\n userNameNotExists: true\n });\n this.checkUserName();\n }\n });\n };\n\n onBlur = event => {\n const { username, fullName, email } = this.state;\n if (event.target.id === 'signup-fullName-field') {\n const { isValid, errors } = validateFullname(fullName);\n if (!isValid) {\n this.setState(errors);\n } else {\n this.setState(errors);\n if (!username && fullName) {\n this._getSuggestedUsername();\n }\n }\n }\n if (event.target.id === 'signup-email-field') {\n const { isValid, errors } = validateEmail(email);\n if (!isValid) {\n this.setState(errors);\n } else {\n this.setState(errors);\n if (!username && fullName) {\n this._getSuggestedUsername();\n }\n }\n }\n if (event.target.id === 'signup-username-field') {\n const { errors } = validateUsername(username);\n this.setState(errors);\n }\n if (\n event.target.id === 'signup-confirm-password-field' ||\n event.target.id === 'signup-password-field'\n ) {\n const { errors } = this.validatePasswords(event.target.id);\n this.setState(errors);\n }\n };\n\n render() {\n const { classes, signupInProgress, mode } = this.props;\n const {\n fullName,\n email,\n username,\n password,\n confirmPassword,\n showPassword,\n showConfirmPassword,\n fullNameError,\n usernameError,\n emailError,\n passwordError,\n confirmPasswordError,\n isCheckingUsername,\n userNameNotExists\n } = this.state;\n return (\n <>\n \n \n \n Sign up\n \n
\n \n \n Full Name\n \n \n {fullNameError && (\n \n {fullNameError}\n \n )}\n \n \n \n Email\n \n \n {emailError && (\n \n {emailError}\n \n )}\n \n \n \n Username\n \n \n {isCheckingUsername ? (\n \n ) : userNameNotExists &&\n !usernameError ? (\n \n ) : (\n \n )}\n \n )\n }\n />\n {usernameError && (\n \n {usernameError}\n \n )}\n \n \n \n Password\n \n \n \n {showPassword ? (\n \n ) : (\n \n )}\n \n \n }\n />\n {passwordError && (\n \n {passwordError}\n \n )}\n \n \n \n Confirm Password\n \n \n \n {showConfirmPassword ? (\n \n ) : (\n \n )}\n \n \n }\n />\n {confirmPasswordError && (\n \n {confirmPasswordError}\n \n )}\n \n
\n \n By registering an account, you agree with our Terms\n of Use and Privacy Policy.\n \n
\n \n {mode !== 'forDeviceOwnership' && (\n (\n \n )}\n >\n Go To Login\n \n )}\n
\n \n Join\n \n \n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n
\n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n \n \n \n );\n }\n}\n\nSignup.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired\n }).isRequired,\n actions: PropTypes.shape({\n signup: PropTypes.func.isRequired\n }).isRequired,\n signupInProgress: PropTypes.bool.isRequired,\n mode: PropTypes.string,\n newOwnerEmail: PropTypes.string\n};\n\nexport default withStyles(styles)(Signup);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport Signup from '../../../components/Authentication/Signup';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { signup } from '../../../actions/authentication-actions';\nimport { signupInProgress } from '../../../selectors/app-selectors';\n\nconst SignupHOC = ({ actions, signupInProgress }) => (\n \n);\n\nSignupHOC.propTypes = {\n actions: PropTypes.shape({\n signup: PropTypes.func.isRequired\n }).isRequired,\n signupInProgress: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n signupInProgress: signupInProgress()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n signup\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SignupHOC);\n","import jwt from 'jwt-simple';\n\nexport default function decodeJwt(token, key, noVerify) {\n try {\n const data = jwt.decode(token, key, noVerify);\n return { data };\n } catch (error) {\n return { error };\n }\n}\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { signupActivateOrgUser } from '../../actions/authentication-actions';\nimport { signupInProgress } from '../../selectors/app-selectors';\nimport Signup from '../Authentication/Signup';\nimport { urlToToken } from '../../utils/http-util';\n\nconst SignupHOC = ({ actions, signupInProgress, token, newOwnerEmail }) => (\n \n);\n\nSignupHOC.propTypes = {\n actions: PropTypes.shape({\n signup: PropTypes.func.isRequired\n }).isRequired,\n token: PropTypes.string.isRequired,\n newOwnerEmail: PropTypes.string.isRequired,\n signupInProgress: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n signupInProgress: signupInProgress()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n signup: signupActivateOrgUser\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SignupHOC);\n","// @flow\nimport React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\nimport decodeJwt from '../../utils/jwt-utils';\nimport { urlToToken } from '../../utils/http-util';\n\nimport Login from '../../containers/Authentication/Login';\nimport SignupHOC from './Signup';\n\nconst styles = () => ({\n wrapper: {\n flex: '1 1 0%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n titleText: {\n margin: 20,\n textAlign: 'center'\n },\n cardViewChangeBtn: {\n margin: '0 10px'\n }\n});\n\nclass SignUpAndApprove extends React.Component<\n {\n classes: {\n wrapper: string,\n root: string,\n content: string,\n actionsBar: string,\n flex1: string,\n mainActions: string,\n formControl: string,\n titleText: string,\n privacy: string,\n contentBody: string,\n colorGreen: string,\n cardsWrapper: string,\n cardViewChangeBtn: string\n },\n token: string\n },\n {\n isSignUpView: boolean\n }\n> {\n state = {\n isSignUpView: false\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n handleChangeCardViewButtonClick = () => {\n const { isSignUpView } = this.state;\n this.setState({ isSignUpView: !isSignUpView });\n };\n\n render() {\n const { classes, token } = this.props;\n const { data: dataFromToken } = decodeJwt(\n urlToToken(token),\n null,\n true\n );\n const { isSignUpView } = this.state;\n return (\n
\n
\n Accept Invitation to participate in{' '}\n {dataFromToken.organizationName} organization\n

\n Please\n \n SignUp\n \n or\n \n Login\n \n to get device.\n

\n
\n {isSignUpView ? (\n \n ) : (\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(SignUpAndApprove);\n","import React from 'react';\nimport withMobileDialog from '@material-ui/core/withMobileDialog/withMobileDialog';\nimport { withStyles } from '@material-ui/core';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport CardActions from '@material-ui/core/CardActions';\nimport Button from '@material-ui/core/Button';\nimport PropTypes from 'prop-types';\nimport { clearAuthToken, urlToToken } from '../../utils/http-util';\n\nimport decodeJwt from '../../utils/jwt-utils';\nimport { activateOrgUser } from '../../api/users-api';\nimport SignUpAndApprove from './SignUpAndApprove';\n\nconst styles = theme => ({\n wrapper: {\n flex: '1 1 0%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: 500,\n marginTop: 50\n },\n content: {\n padding: '20px'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'column',\n padding: '5px 0px',\n height: '40px',\n alignItems: 'inherit'\n },\n flex1: {\n flex: '1'\n },\n mainActions: {\n display: 'flex',\n flexDirection: 'row',\n height: '36px'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n titleText: {\n marginTop: 20\n },\n colorGreen: {\n color: '#61bd4f'\n }\n});\nconst OrganizationInvitation = ({ classes, loggedInUser, token, history }) => {\n const handleChangeAccountClick = () => {\n clearAuthToken();\n window.location.reload();\n };\n\n const handleGetDeviceWithCurrentAccClick = () => {\n activateOrgUser({ token: urlToToken(token) }).subscribe(() => {\n history.replace('/');\n window.location.reload();\n });\n };\n\n const handleHomeBtnClick = () => {\n // const { history } = props;\n\n window.location.reload();\n };\n const { data: dataFromToken } = decodeJwt(urlToToken(token), null, true);\n return (\n
\n {loggedInUser ? (\n \n \n \n Accept Invitation to participate in{' '}\n {dataFromToken.organizationName} organization\n \n
\n

\n Invitation was sent to {dataFromToken.email}{' '}\n email\n

\n

\n You are logged in as {loggedInUser.fullName} (\n {loggedInUser.email})\n

\n

\n Do you want to Accept Invitation with current\n account?\n

\n
\n
\n \n
\n
\n \n Home\n \n \n Change Account\n \n \n Accept\n \n
\n \n \n ) : (\n \n )}\n
\n );\n};\nOrganizationInvitation.propTypes = {\n classes: PropTypes.object.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n token: PropTypes.string.isRequired,\n history: PropTypes.shape({\n action: PropTypes.string.isRequired,\n replace: PropTypes.func.isRequired\n }).isRequired\n};\nexport default withMobileDialog()(withStyles(styles)(OrganizationInvitation));\n","// @flow\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\n\nimport queryString from 'query-string';\nimport { createStructuredSelector } from 'reselect';\nimport wrapActionCreators from 'react-redux/es/utils/wrapActionCreators';\nimport OrganizationInvitation from '../../components/OrganizationInvitation';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport { setGlobalMessageError } from '../../actions/app-actions';\n\nclass OrganizationInvitationHOC extends React.Component<\n {\n location: any,\n actions: {\n setGlobalMessageError: any\n },\n history: any,\n loggedInUser: any\n },\n {\n token: string,\n initiallyAuthenticated: boolean\n }\n> {\n constructor(props) {\n super(props);\n this.state = {\n token: '',\n initiallyAuthenticated: !!props.loggedInUser\n };\n }\n\n componentDidMount() {\n const {\n location: { search }\n } = this.props;\n const searchParams = queryString.parse(search || '');\n const tokenPart = searchParams.token;\n this.setState({\n token: tokenPart || ''\n });\n }\n\n render() {\n const { token, initiallyAuthenticated } = this.state;\n const { loggedInUser, history } = this.props;\n return (\n \n );\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(OrganizationInvitationHOC)\n);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Typography from '@material-ui/core/Typography';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport { validate as validateEmail } from 'email-validator';\nimport { Hidden } from '@material-ui/core';\nimport SignUpLink from '@material-ui/core/Link';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n content: {\n padding: '20px'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'row',\n padding: '5px 0px'\n },\n fontSizeH1: {\n fontSize: '2rem'\n },\n flex1: {\n flex: '1'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n passwordRecoveryButton: {\n // margin: theme.spacing.unit\n marginRight: '16px'\n },\n button: {\n margin: '0px 20px'\n }\n});\n\nclass PasswordRecovery extends React.Component<\n {\n classes: {\n root: string,\n content: string,\n contentBody: string,\n actionsBar: string,\n flex1: string,\n formControl: string,\n button: string,\n passwordRecoveryButton: string\n },\n handlePasswordRecovery: (email: string) => void,\n passwordRecoveryLoading: boolean,\n passwordRecoverySuccess: boolean\n },\n {\n email: string,\n emailError: string,\n disablePasswordRecoveryButton: boolean\n }\n> {\n state = {\n email: '',\n emailError: '',\n disablePasswordRecoveryButton: false\n };\n\n handleChange = prop => event => {\n this.setState({ [prop]: event.target.value });\n };\n\n handlePasswordRecoveryClick = () => {\n const { email } = this.state;\n const { handlePasswordRecovery } = this.props;\n if (validateEmail(email)) {\n this.setState({\n emailError: '',\n disablePasswordRecoveryButton: false\n });\n handlePasswordRecovery(email);\n } else {\n this.setState({\n emailError: 'Please Enter a Valid Email',\n disablePasswordRecoveryButton: true\n });\n }\n };\n\n onKeyDown = event => {\n const { email } = this.state;\n if (validateEmail(email)) {\n this.setState({\n emailError: '',\n disablePasswordRecoveryButton: false\n });\n }\n switch (event.keyCode) {\n case 13: {\n this.handlePasswordRecoveryClick();\n break;\n }\n default:\n break;\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes,\n passwordRecoveryLoading,\n passwordRecoverySuccess\n } = this.props;\n const { email, emailError, disablePasswordRecoveryButton } = this.state;\n return (\n <>\n \n \n \n Password Recovery\n \n
\n \n \n Email\n \n \n {emailError && (\n \n {emailError}\n \n )}\n \n
\n
\n \n }\n >\n Go To Login\n \n
\n \n Send Recovery Link\n \n \n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n
\n \n \n \n \n Tunnelin\n {' '}\n © 2020 All Right Reserved\n
\n \n \n );\n }\n}\n\nPasswordRecovery.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired\n }).isRequired,\n handlePasswordRecovery: PropTypes.func.isRequired,\n passwordRecoveryLoading: PropTypes.bool.isRequired,\n passwordRecoverySuccess: PropTypes.bool.isRequired\n};\n\nexport default withStyles(styles)(PasswordRecovery);\n","// @flow\nimport React from 'react';\nimport connect from 'react-redux/es/connect/connect';\nimport PropTypes from 'prop-types';\nimport PasswordRecovery from '../../../components/Authentication/PasswordRecovery';\n\nimport { passwordRecovery } from '../../../api/authentication-api';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport {\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\n\nclass PasswordRecoveryHOC extends React.Component<\n {\n actions: {\n setGlobalMessageError: any,\n setGlobalMessageSuccess: any\n }\n },\n {\n passwordRecoveryLoading: boolean,\n passwordRecoverySuccess: boolean\n }\n> {\n state = {\n passwordRecoveryLoading: false,\n passwordRecoverySuccess: false\n };\n\n handlePasswordRecovery = (email: string) => {\n const {\n actions: { setGlobalMessageError, setGlobalMessageSuccess }\n } = this.props;\n this.setState({\n passwordRecoveryLoading: true,\n passwordRecoverySuccess: false\n });\n passwordRecovery(email).subscribe(\n () => {\n setGlobalMessageSuccess(\n 'Password Recovery Link (valid for two days.)\\n' +\n ' Sent To Your Email.'\n );\n this.setState({\n passwordRecoveryLoading: false,\n passwordRecoverySuccess: true\n });\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({\n passwordRecoveryLoading: false\n });\n }\n );\n };\n\n render() {\n const { passwordRecoveryLoading, passwordRecoverySuccess } = this.state;\n return (\n \n );\n }\n}\n\nPasswordRecoveryHOC.propTypes = {\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired,\n setGlobalMessageSuccess: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError,\n setGlobalMessageSuccess\n});\n\nexport default connect(\n null,\n mapDispatchToProps\n)(PasswordRecoveryHOC);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Typography from '@material-ui/core/Typography';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\n\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n content: {\n padding: '20px'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'row',\n padding: '5px 0px'\n },\n flex1: {\n flex: '1'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n passwordRecoveryButton: {\n // margin: theme.spacing.unit\n marginRight: '16px'\n },\n button: {\n marginLeft: 20,\n marginRight: 20\n }\n});\n\nclass SetNewPassword extends React.Component<\n {\n classes: {\n root: string,\n content: string,\n contentBody: string,\n actionsBar: string,\n flex1: string,\n formControl: string,\n button: string,\n passwordRecoveryButton: string\n },\n handleSetNewPasswordPassword: (newPassword: string) => void,\n changePasswordInProgress: boolean,\n changePasswordSuccess: boolean,\n replace: (path: string) => void,\n userFullName: string,\n getMeError: string\n },\n {\n newPassword: string,\n showNewPassword: boolean,\n confirmNewPassword: string,\n showConfirmNewPassword: boolean,\n setNewPasswordError: string\n }\n> {\n state = {\n newPassword: '',\n showNewPassword: false,\n confirmNewPassword: '',\n showConfirmNewPassword: false,\n setNewPasswordError: ''\n };\n\n handleClickShowNewPassword = () => {\n const { showNewPassword } = this.state;\n this.setState({ showNewPassword: !showNewPassword });\n };\n\n handleClickShowConfirmNewPassword = () => {\n const { showConfirmNewPassword } = this.state;\n this.setState({\n showConfirmNewPassword: !showConfirmNewPassword\n });\n };\n\n handleMouseDownPassword = event => {\n event.preventDefault();\n };\n\n handleNewPasswordChange = prop => event => {\n this.setState({ [prop]: event.target.value, setNewPasswordError: '' });\n };\n\n handleConfirmNewPasswordChange = prop => event => {\n this.setState({ [prop]: event.target.value, setNewPasswordError: '' });\n };\n\n handleGoToLogin = () => {\n const { replace } = this.props;\n replace('/login');\n window.location.reload();\n };\n\n handleSaveNewPasswordClick = () => {\n let isValid = true;\n const { newPassword, confirmNewPassword } = this.state;\n if (!newPassword || !confirmNewPassword) {\n isValid = false;\n this.setState({\n setNewPasswordError: 'Please enter all password fields'\n });\n } else if (newPassword !== confirmNewPassword) {\n isValid = false;\n this.setState({\n setNewPasswordError: 'Passwords does not match'\n });\n } else if (newPassword.length < 8) {\n isValid = false;\n this.setState({\n setNewPasswordError: 'Passwords should be at least 8 chars'\n });\n }\n if (isValid) {\n const { handleSetNewPasswordPassword } = this.props;\n handleSetNewPasswordPassword(newPassword);\n }\n };\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSaveNewPasswordClick();\n break;\n }\n default:\n break;\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes,\n changePasswordInProgress,\n changePasswordSuccess,\n userFullName,\n getMeError\n } = this.props;\n const {\n newPassword,\n showNewPassword,\n confirmNewPassword,\n showConfirmNewPassword,\n setNewPasswordError\n } = this.state;\n return (\n \n \n \n {!getMeError ? (\n
\n

Hi {userFullName}.

\n

Please set your new password.

\n
\n ) : (\n
Set New Password
\n )}\n
\n
\n \n \n Set New Password\n \n \n \n {showNewPassword ? (\n \n ) : (\n \n )}\n \n \n }\n />\n \n \n \n Confirm New Password\n \n \n \n {showConfirmNewPassword ? (\n \n ) : (\n \n )}\n \n \n }\n />\n \n
\n {!!setNewPasswordError && (\n \n {setNewPasswordError}\n \n )}\n
\n \n \n Go To Login\n \n
\n \n Save\n \n \n \n );\n }\n}\n\nSetNewPassword.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired\n }).isRequired,\n handleSetNewPasswordPassword: PropTypes.func.isRequired,\n changePasswordInProgress: PropTypes.bool.isRequired,\n changePasswordSuccess: PropTypes.bool.isRequired,\n replace: PropTypes.func.isRequired,\n userFullName: PropTypes.string.isRequired,\n getMeError: PropTypes.string.isRequired\n};\n\nexport default withStyles(styles)(SetNewPassword);\n","// @flow\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport queryString from 'query-string';\nimport PropTypes from 'prop-types';\nimport SetNewPassword from '../../../components/Authentication/SetNewPassword';\n\nimport {\n getLoggedInUser,\n setNewPasswordWithRecoveryToken\n} from '../../../api/authentication-api';\nimport { saveAuthToken, urlToToken } from '../../../utils/http-util';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport {\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../../actions/app-actions';\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nclass SetNewPasswordHOC extends React.Component<\n {\n history: any,\n location: any,\n actions: {\n setGlobalMessageError: any,\n setGlobalMessageSuccess: any\n }\n },\n {\n changePasswordInProgress: boolean,\n changePasswordSuccess: boolean,\n userFullName: string,\n getMeError: string\n }\n> {\n state = {\n changePasswordInProgress: false,\n changePasswordSuccess: false,\n userFullName: '',\n getMeError: ''\n };\n\n componentDidMount() {\n const {\n location: { search },\n history: { replace },\n actions: { setGlobalMessageError }\n } = this.props;\n const searchParams = queryString.parse(search || '');\n const tokenPart = searchParams.password_recovery_token;\n let headers;\n\n try {\n headers = {\n Authorization: `Bearer ${urlToToken(tokenPart)}`\n };\n } catch (e) {\n setGlobalMessageError(\n constructGlobalErrorMessage('The link was corrupted')\n );\n replace('/login');\n }\n\n getLoggedInUser(headers).subscribe(\n user => {\n if (user && user.data && user.data.fullName) {\n this.setState({ userFullName: user.data.fullName });\n }\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n if (err.status === 401 || err.status === 403) {\n message = 'The link was corrupted';\n replace('/login');\n } else {\n message = parseErrorMessage(err);\n }\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({ getMeError: message });\n }\n );\n }\n\n handleSetNewPasswordPassword = (newPassword: string) => {\n const {\n location: { search },\n history: { replace },\n actions: { setGlobalMessageError, setGlobalMessageSuccess }\n } = this.props;\n const searchParams = queryString.parse(search || '');\n const changePasswordRecoveryToken =\n searchParams.password_recovery_token;\n const headers = {\n Authorization: `Bearer ${urlToToken(changePasswordRecoveryToken)}`\n };\n this.setState({\n changePasswordInProgress: true,\n changePasswordSuccess: false\n });\n setNewPasswordWithRecoveryToken(newPassword, headers).subscribe(\n authToken => {\n setGlobalMessageSuccess('Please Log In with new password.');\n this.setState({\n changePasswordInProgress: false,\n changePasswordSuccess: true\n });\n let token;\n try {\n token = atob(decodeURIComponent(authToken.data));\n } catch (e) {\n // invalid url just do logout;\n setGlobalMessageError('Invalid Token');\n }\n if (token) {\n saveAuthToken(token);\n replace('/');\n window.location.reload();\n }\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({\n changePasswordInProgress: false\n });\n }\n );\n };\n\n render() {\n const {\n changePasswordInProgress,\n changePasswordSuccess,\n userFullName,\n getMeError\n } = this.state;\n const {\n history: { replace }\n } = this.props;\n return (\n \n );\n }\n}\n\nSetNewPasswordHOC.propTypes = {\n history: PropTypes.object.isRequired,\n location: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired,\n setGlobalMessageSuccess: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError,\n setGlobalMessageSuccess\n});\n\nexport default withRouter(\n connect(\n null,\n mapDispatchToProps\n )(SetNewPasswordHOC)\n);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core';\nimport Card from '@material-ui/core/es/Card/Card';\nimport Typography from '@material-ui/core/es/Typography/Typography';\nimport FormControl from '@material-ui/core/es/FormControl/FormControl';\nimport InputLabel from '@material-ui/core/es/InputLabel/InputLabel';\nimport Input from '@material-ui/core/es/Input/Input';\nimport FormHelperText from '@material-ui/core/es/FormHelperText/FormHelperText';\nimport CardActions from '@material-ui/core/es/CardActions/CardActions';\nimport Button from '@material-ui/core/es/Button/Button';\nimport CardContent from '@material-ui/core/es/CardContent/CardContent';\n\nconst styles = theme => ({\n wrapper: {\n flex: '1 1 0%',\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'center'\n },\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: 500,\n marginTop: 50\n },\n content: {\n padding: '20px'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'column',\n padding: '5px 0px',\n height: '40px',\n alignItems: 'inherit'\n },\n flex1: {\n flex: '1'\n },\n mainActions: {\n display: 'flex',\n flexDirection: 'row',\n height: '36px'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n titleText: {\n marginTop: 20\n },\n successMessage: {\n fontSize: 24,\n color: '#61bd4f'\n }\n});\n\nclass GetSendedDevice extends React.Component<\n {\n classes: {\n wrapper: string,\n root: string,\n content: string,\n actionsBar: string,\n flex1: string,\n mainActions: string,\n formControl: string,\n titleText: string,\n successMessage: string\n },\n oldOwnerEmail: string,\n deviceName: string,\n history: { replace: (path: string) => void },\n getNewDeviceLoading: boolean,\n getNewDeviceSuccess: boolean,\n handleGetDeviceClick: (validationNumbers: string) => void\n },\n {\n validationError: string,\n validationNumbers: string,\n disableGetDeviceButton: boolean\n }\n> {\n state = {\n validationError: '',\n validationNumbers: '',\n disableGetDeviceButton: false\n };\n\n onKeyDown = event => {\n const { validationNumbers } = this.state;\n const { handleGetDeviceClick } = this.props;\n switch (event.keyCode) {\n case 13: {\n handleGetDeviceClick(validationNumbers);\n break;\n }\n default:\n break;\n }\n };\n\n handleChange = prop => event => {\n this.setState({ [prop]: event.target.value });\n if (!event.target.value) {\n this.setState({ disableGetDeviceButton: true });\n } else {\n this.setState({ disableGetDeviceButton: false });\n }\n };\n\n handleGetDeviceClick = () => {\n const { validationNumbers } = this.state;\n const { handleGetDeviceClick } = this.props;\n if (validationNumbers && validationNumbers.length === 4) {\n this.setState({\n validationError: '',\n disableGetDeviceButton: false\n });\n handleGetDeviceClick(validationNumbers);\n } else {\n this.setState({\n validationError: 'Please enter four digits',\n disableGetDeviceButton: true\n });\n }\n };\n\n handleHomeBtnClick = () => {\n const { history } = this.props;\n history.replace('/');\n window.location.reload();\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n deviceName,\n oldOwnerEmail,\n classes,\n getNewDeviceLoading,\n getNewDeviceSuccess\n } = this.props;\n const {\n disableGetDeviceButton,\n validationError,\n validationNumbers\n } = this.state;\n return (\n \n \n \n Change Device Owner\n \n
\n {!getNewDeviceSuccess ? (\n

\n User with {oldOwnerEmail} email wants to give\n you `{deviceName}` device.\n

\n ) : (\n <>\n
\n Success\n
\n

\n Please click the Home button to start using\n your new device.\n

\n \n )}\n
\n {!getNewDeviceSuccess && (\n \n \n Validation Numbers\n \n \n {validationError && (\n \n {validationError}\n \n )}\n \n )}\n
\n \n
\n
\n \n Home\n \n \n Get Device\n \n
\n \n \n );\n }\n}\n\nGetSendedDevice.propTypes = {\n oldOwnerEmail: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired\n};\n\nexport default withRouter(withStyles(styles)(GetSendedDevice));\n","// @flow\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { changeDeviceOwnerApprove } from '../../../api/device-api';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport GetSendedDevice from '../../../components/Devices/GetSendedDevice';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\n\nclass GetSendedDeviceHoc extends React.Component<\n {\n oldOwnerEmail: string,\n deviceName: string,\n actions: {\n setGlobalMessageError: any\n },\n token: string\n },\n {\n getNewDeviceLoading: boolean,\n getNewDeviceSuccess: boolean\n }\n> {\n state = {\n getNewDeviceLoading: false,\n getNewDeviceSuccess: false\n };\n\n handleGetDeviceClick = validationNumbers => {\n const {\n token,\n actions: { setGlobalMessageError }\n } = this.props;\n changeDeviceOwnerApprove(token, validationNumbers).subscribe(\n () => {\n this.setState({\n getNewDeviceLoading: false,\n getNewDeviceSuccess: true\n });\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({\n getNewDeviceLoading: false\n });\n }\n );\n };\n\n render() {\n const { oldOwnerEmail, deviceName } = this.props;\n const { getNewDeviceLoading, getNewDeviceSuccess } = this.state;\n\n return (\n \n );\n }\n}\n\nGetSendedDeviceHoc.propTypes = {\n oldOwnerEmail: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n token: PropTypes.string.isRequired\n};\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default connect(\n null,\n mapDispatchToProps\n)(GetSendedDeviceHoc);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport Signup from '../../../components/Authentication/Signup';\n\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport { signupForGetDevice } from '../../../api/authentication-api';\nimport { saveAuthToken, urlToToken } from '../../../utils/http-util';\nimport { signupInProgress } from '../../../selectors/app-selectors';\nimport store from '../../../store/get-store';\n\nimport {\n signupLoading,\n signupSuccess\n} from '../../../actions/authentication-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\n\nconst { dispatch } = store;\n\nclass SignupGetDeviceHOC extends React.Component<\n {\n mode: string,\n newOwnerEmail: string,\n token: string,\n signupInProgress: any\n },\n {}\n> {\n handleSignupForGetDevice = data => {\n const { token } = this.props;\n const headers = {\n Authorization: `Bearer ${urlToToken(token)}`\n };\n dispatch(signupLoading(true));\n signupForGetDevice(data, headers).subscribe(\n data => {\n const { authToken, user } = data.data;\n saveAuthToken(authToken);\n dispatch(signupLoading(false));\n dispatch(signupSuccess(user));\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n dispatch(signupLoading(false));\n dispatch(\n setGlobalMessageError(constructGlobalErrorMessage(message))\n );\n }\n );\n };\n\n render() {\n const { actions, mode, newOwnerEmail, signupInProgress } = this.props;\n return (\n \n );\n }\n}\n\nSignupGetDeviceHOC.propTypes = {\n mode: PropTypes.string,\n newOwnerEmail: PropTypes.string,\n token: PropTypes.string.isRequired,\n signupInProgress: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n signupInProgress: signupInProgress()\n});\n\nexport default connect(\n mapStateToProps,\n null\n)(SignupGetDeviceHOC);\n","// @flow\nimport React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\nimport Signup from '../../../containers/Authentication/Signup/GetDevice';\nimport Login from '../../../containers/Authentication/Login';\n\nconst styles = () => ({\n wrapper: {\n flex: '1 1 0%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n titleText: {\n margin: 20,\n textAlign: 'center'\n },\n cardViewChangeBtn: {\n margin: '0 10px'\n }\n});\n\nclass SignUpAndChangeDeviceOwner extends React.Component<\n {\n classes: {\n wrapper: string,\n root: string,\n content: string,\n actionsBar: string,\n flex1: string,\n mainActions: string,\n formControl: string,\n titleText: string,\n privacy: string,\n contentBody: string,\n colorGreen: string,\n cardsWrapper: string,\n cardViewChangeBtn: string\n },\n newOwnerEmail: string,\n oldOwnerEmail: string,\n deviceName: string,\n token: string\n },\n {\n isSignUpView: boolean\n }\n> {\n state = {\n isSignUpView: false\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n handleChangeCardViewButtonClick = () => {\n const { isSignUpView } = this.state;\n this.setState({ isSignUpView: !isSignUpView });\n };\n\n render() {\n const {\n classes,\n newOwnerEmail,\n deviceName,\n oldOwnerEmail,\n token\n } = this.props;\n const { isSignUpView } = this.state;\n return (\n
\n
\n

\n User with {oldOwnerEmail} email wants to give you (\n {newOwnerEmail}) `{deviceName}` device.\n

\n

\n Please\n \n SignUp\n \n or\n \n Login\n \n to get device.\n

\n
\n {isSignUpView ? (\n \n ) : (\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(SignUpAndChangeDeviceOwner);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport SignUpAndChangeDeviceOwner from '../../../components/Devices/SignUpOrLoginForGetDevice';\n\nclass SignUpAndChangeDeviceOwnerHOC extends React.Component<\n {\n newOwnerEmail: string,\n oldOwnerEmail: string,\n deviceName: string,\n token: string\n },\n {}\n> {\n render() {\n const { newOwnerEmail, oldOwnerEmail, deviceName, token } = this.props;\n return (\n \n );\n }\n}\n\nSignUpAndChangeDeviceOwnerHOC.propTypes = {\n newOwnerEmail: PropTypes.string.isRequired,\n oldOwnerEmail: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired,\n token: PropTypes.string.isRequired\n};\n\nexport default SignUpAndChangeDeviceOwnerHOC;\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport styles from './styles';\n\nimport type { User } from '../../../types/user';\n\nclass ActivateAccount extends Component<\n {\n actions: {\n sendActivationEmail: () => any\n },\n classes: any,\n loggedInUser: User\n },\n {}\n> {\n static propTypes = {\n actions: PropTypes.shape({\n sendActivationEmail: PropTypes.func.isRequired\n }).isRequired,\n loggedInUser: PropTypes.object.isRequired\n };\n\n onSendActivationEmailButtonClick = () => {\n const {\n actions: { sendActivationEmail }\n } = this.props;\n sendActivationEmail();\n };\n\n render() {\n const { classes, loggedInUser } = this.props;\n const { fullName, email } = loggedInUser;\n\n return (\n
\n \n Dear {fullName}, the last step is left: Verify your identity\n \n \n We have sent activation link to your email: {email}. Please\n check your spam/trash folder. If still there is no email,\n please contact our administartor\n \n admin [at] tunnelin dot com\n \n \n \n Resend Activation Link\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(ActivateAccount);\n","export default (theme: any) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n button: {\n margin: theme.spacing.unit\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\n\nimport ActivateAccount from '../../../components/Users/ActivateAccount';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { sendActivationEmail } from '../../../actions/users-actions';\n\nconst ActivateAccountHOC = ({ loggedInUser, actions }) => (\n \n);\n\nActivateAccountHOC.propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n sendActivationEmail: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n sendActivationEmail\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ActivateAccountHOC);\n","// @flow\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport { clearAuthToken } from '../../../utils/http-util';\nimport GetSendedDevice from '../../../containers/Devices/GetSendedDevice';\nimport SignUpOrLoginForGetDevice from '../../../containers/Devices/SignUpOrLoginForGetDevice';\nimport ActivateAccount from '../../../containers/Users/ActivateAccount';\n\nconst styles = theme => ({\n wrapper: {\n flex: '1 1 0%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: 500,\n marginTop: 50\n },\n content: {\n padding: '20px'\n },\n actionsBar: {\n display: 'flex',\n flexDirection: 'column',\n padding: '5px 0px',\n height: '40px',\n alignItems: 'inherit'\n },\n flex1: {\n flex: '1'\n },\n mainActions: {\n display: 'flex',\n flexDirection: 'row',\n height: '36px'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n titleText: {\n marginTop: 20\n },\n colorGreen: {\n color: '#61bd4f'\n }\n});\n\nclass ChangeDeviceOwner extends React.Component<\n {\n classes: {\n wrapper: string,\n root: string,\n content: string,\n actionsBar: string,\n flex1: string,\n mainActions: string,\n formControl: string,\n titleText: string,\n colorGreen: string\n },\n oldOwnerEmail: string,\n newOwnerEmail: string,\n deviceName: string,\n loggedInUser: any,\n history: { replace: (path: string) => void },\n token: string,\n initiallyAuthenticated: boolean\n },\n {\n readyForGetDevice: boolean\n }\n> {\n state = {\n readyForGetDevice: false\n };\n\n handleChangeAccountClick = () => {\n clearAuthToken();\n window.location.reload();\n };\n\n handleGetDeviceWithCurrentAccClick = () => {\n this.setState({ readyForGetDevice: true });\n };\n\n handleHomeBtnClick = () => {\n const { history } = this.props;\n history.replace('/');\n window.location.reload();\n };\n\n render() {\n const {\n classes,\n oldOwnerEmail,\n deviceName,\n loggedInUser,\n token,\n newOwnerEmail,\n initiallyAuthenticated\n } = this.props;\n const { readyForGetDevice } = this.state;\n return (\n
\n {loggedInUser &&\n loggedInUser.emailVerified &&\n initiallyAuthenticated &&\n !readyForGetDevice && (\n \n \n \n Change Device Owner\n \n
\n

\n User with {oldOwnerEmail} email wants to\n give you ({newOwnerEmail}) `{deviceName}\n ` device.\n

\n

\n You are logged in as{' '}\n {loggedInUser.fullName} (\n {loggedInUser.email})\n

\n

\n Do you want to get device with current\n account?\n

\n
\n
\n \n
\n
\n \n Home\n \n \n Change Account\n \n \n Get Device\n \n
\n \n \n )}\n {loggedInUser &&\n loggedInUser.emailVerified &&\n (!initiallyAuthenticated || readyForGetDevice) && (\n \n )}\n {loggedInUser && !loggedInUser.emailVerified && (\n \n )}\n {!loggedInUser && (\n \n )}\n
\n );\n }\n}\n\nexport default withRouter(withStyles(styles)(ChangeDeviceOwner));\n","// @flow\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\n\nimport PropTypes from 'prop-types';\nimport queryString from 'query-string';\nimport { createStructuredSelector } from 'reselect';\n\nimport ChangeDeviceOwner from '../../../components/Devices/ChangeDeviceOwner';\nimport { urlToToken } from '../../../utils/http-util';\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\nimport { constructGlobalErrorMessage } from '../../../utils/global-message-util';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport decodeJwt from '../../../utils/jwt-utils';\n\nclass ChangeDeviceOwnerHOC extends React.Component<\n {\n history: any,\n location: any,\n actions: {\n setGlobalMessageError: any\n },\n loggedInUser: any\n },\n {\n newOwnerEmail: string,\n oldOwnerEmail: string,\n deviceName: string,\n token: string,\n initiallyAuthenticated: boolean\n }\n> {\n constructor(props) {\n super(props);\n this.state = {\n newOwnerEmail: '',\n oldOwnerEmail: '',\n deviceName: '',\n token: '',\n initiallyAuthenticated: !!props.loggedInUser\n };\n }\n\n componentDidMount() {\n const {\n location: { search },\n history: { replace },\n actions: { setGlobalMessageError }\n } = this.props;\n const searchParams = queryString.parse(search || '');\n const tokenPart = searchParams.change_device_owner_token;\n\n try {\n const { data: dataFromToken } = decodeJwt(\n urlToToken(tokenPart),\n null,\n true\n );\n this.setState({\n oldOwnerEmail: dataFromToken.oldOwnerEmail,\n newOwnerEmail: dataFromToken.newOwnerEmail,\n deviceName: dataFromToken.deviceName,\n token: tokenPart || ''\n });\n } catch (e) {\n setGlobalMessageError(\n constructGlobalErrorMessage('The link was corrupted')\n );\n replace('/login');\n }\n }\n\n render() {\n const {\n newOwnerEmail,\n oldOwnerEmail,\n deviceName,\n token,\n initiallyAuthenticated\n } = this.state;\n const { loggedInUser } = this.props;\n\n return (\n \n );\n }\n}\n\nChangeDeviceOwnerHOC.propTypes = {\n history: PropTypes.object.isRequired,\n location: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n loggedInUser: PropTypes.object\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(ChangeDeviceOwnerHOC)\n);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n marginTop: theme.spacing.unit * 3\n }\n});\n\nconst Loader = ({ classes }) => (\n
\n \n
\n \n
\n);\n\nLoader.propTypes = {\n classes: PropTypes.object.isRequired\n};\n\nexport default withStyles(styles)(Loader);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport queryString from 'query-string';\n\nimport { connect } from 'react-redux';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport {\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../../actions/app-actions';\n\nimport { verifyEmailSuccess } from '../../../actions/authentication-actions';\n\nimport Loader from '../../../components/LoadingPane/Loader';\nimport { verifyEmail } from '../../../api/authentication-api';\nimport { urlToToken } from '../../../utils/http-util';\n\nclass VerifyEmail extends React.Component<\n {\n actions: {\n setGlobalMessageError: any,\n setGlobalMessageSuccess: any,\n verifyEmailSuccess: any\n },\n location: { search: string },\n history: { action: string, replace: (path: string) => void }\n },\n {}\n> {\n componentDidMount() {\n const {\n location: { search },\n history: { replace },\n actions: { verifyEmailSuccess }\n } = this.props;\n const searchParams = queryString.parse(search || '');\n const tokenPart = searchParams.token;\n\n let headers;\n\n try {\n headers = {\n Authorization: `Bearer ${urlToToken(tokenPart)}`\n };\n } catch (e) {\n setGlobalMessageError(\n constructGlobalErrorMessage('The link was corrupted')\n );\n replace('/login');\n }\n\n verifyEmail(headers).subscribe(\n emailVerified => {\n if (emailVerified) {\n setGlobalMessageSuccess('Email verified');\n verifyEmailSuccess();\n replace('/');\n }\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n replace('/login');\n }\n );\n }\n\n render() {\n return ;\n }\n}\n\nconst mapDispatchToProps = wrapActionCreators({\n verifyEmailSuccess,\n setGlobalMessageError,\n setGlobalMessageSuccess\n});\n\nVerifyEmail.propTypes = {\n history: PropTypes.object.isRequired,\n location: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired,\n setGlobalMessageSuccess: PropTypes.func.isRequired,\n verifyEmailSuccess: PropTypes.func.isRequired\n }).isRequired\n};\n\nexport default withRouter(\n connect(\n null,\n mapDispatchToProps\n )(VerifyEmail)\n);\n","import React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { MAIN_TITLE } from '../constants/api-constants';\n\nfunction hasByName(arr = [], name) {\n return arr.some(item => item.name === name);\n}\n\nexport default options => Component => {\n const opts = { ...options };\n const { og = true, twitter = true, meta = [], image, applyTitlePrefix, description, ...restOptions } = opts;\n let { title, 'og:title': ogTitle, 'og:description': ogDescription, 'twitter:title': twitterTitle, 'twitter:description': twitterDescription, ...helmetOptions } = restOptions;\n if (applyTitlePrefix !== false) {\n title = `${MAIN_TITLE} ${title}`;\n }\n const ogMetas = [];\n const htmlAttrs = {\n lang: \"en-US\"\n };\n if (og) {\n if (ogDescription === undefined && description !== undefined) {\n ogDescription = description;\n }\n if (ogTitle === undefined && title !== undefined) {\n ogTitle = title;\n }\n if (!hasByName(meta, \"og:locale\")) {\n ogMetas.push( {name: 'og:locale', content: 'en_US'});\n }\n if (!hasByName(meta, \"og:type\")) {\n ogMetas.push( {name: 'og:type', content: 'site'});\n }\n if (!hasByName(meta, \"og:site_name\")) {\n ogMetas.push( {name: 'og:site_name', content: 'Tunnel In'});\n }\n if (image) {\n ogMetas.push(...[\n {\n name: 'og:image',\n content: image.src\n },\n {\n name: 'og:image:secure_url',\n content: image.src\n },\n {\n name: 'og:image:width',\n content: image.width\n },\n {\n name: 'og:image:height',\n content: image.height\n },\n {\n name: 'og:image:alt',\n content: image.alt || title\n },\n {\n name: 'og:image:type',\n content: image.type\n }\n ])\n }\n htmlAttrs.prefix = \"og: https://ogp.me/ns#\";\n }\n if (twitter) {\n if (twitterDescription === undefined && description !== undefined) {\n twitterDescription = description;\n }\n if (twitterTitle === undefined && title !== undefined) {\n twitterTitle = title;\n }\n }\n\n\n const WithHelmet = props => {\n return (\n <>\n \n \n {title}\n {description !== undefined ?\n : ''\n }\n {twitter ? : ''}\n {twitterTitle !== undefined ? : ''}\n {twitterDescription !== undefined ?\n : ''\n }\n {twitter && image ? : ''}\n {ogTitle !== undefined ? : ''}\n {ogDescription !== undefined ?\n : ''\n }\n {ogMetas.map(({ name, content }) => {\n return \n })}\n {meta.map(({ name, content }) => {\n return \n })}\n \n \n \n );\n };\n return WithHelmet;\n};\n","// @flow\nimport { api, makePost } from '../utils/http-util';\n\nconst API_URL = {\n GET_TERMINAL_TOKEN: (devideId: string, userId: string) =>\n api`v1/devices/${devideId}/users/${userId}/get-terminal-token`\n};\n\nexport function getTerminalToken(deviceId: string, userId: string, data: any) {\n return makePost(API_URL.GET_TERMINAL_TOKEN(deviceId, userId), data);\n}\n","// @flow\nimport { of } from 'rxjs';\nimport { catchError, map, mapTo } from 'rxjs/operators';\n\nimport { getTerminalToken } from '../../api/terminal-api';\nimport {\n hasTunnelSettingsForType as hasTunnelSettingsForTypeApi,\n replaceOrCreateTunnelSettingsForType as replaceOrCreateTunnelSettingsForTypeApi,\n removeTunnelSettingsForType as removeTunnelSettingsForTypeApi\n} from '../../api/user-device-api';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport getStore from '../../store/get-store';\n\nexport function loadToken(\n type: string,\n deviceId: string,\n userId: string,\n settings: {}\n) {\n const data = {\n connection: {\n type,\n settings\n }\n };\n\n return getTerminalToken(deviceId, userId, data);\n}\n\nexport function hasTunnelSettingsForType(\n type: string,\n deviceId: string,\n userId: string\n) {\n return hasTunnelSettingsForTypeApi(deviceId, userId, type).pipe(\n map(({ data }) => data),\n catchError(error => {\n const store = getStore();\n store.dispatch(\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n )\n );\n return of(false);\n })\n );\n}\n\nexport function replaceOrCreateTunnelSettingsForType(\n type: string,\n deviceId: string,\n userId: string,\n data: {}\n) {\n return replaceOrCreateTunnelSettingsForTypeApi(deviceId, userId, {\n type,\n ...data\n }).pipe(\n mapTo(true),\n catchError(error => {\n const store = getStore();\n store.dispatch(\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n )\n );\n return of(false);\n })\n );\n}\n\nexport function removeTunnelSettingsForType(\n type: string,\n deviceId: string,\n userId: string\n) {\n return removeTunnelSettingsForTypeApi(deviceId, userId, type).pipe(\n mapTo(true),\n catchError(error => {\n const store = getStore();\n store.dispatch(\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n )\n );\n return of(false);\n })\n );\n}\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nimport { getLoggedInUser } from '../../selectors/app-selectors';\n\nimport {\n loadToken,\n hasTunnelSettingsForType,\n replaceOrCreateTunnelSettingsForType,\n removeTunnelSettingsForType\n} from './token-requests';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n progress: {\n margin: theme.spacing.unit * 2\n }\n});\n\nexport default (options: { type: string, defaultSettings?: any }) => (\n WrappedComponent: any\n) => {\n class WithTokenCheck extends React.Component<\n {\n actions: {\n setGlobalMessageError: (message: any) => void\n },\n classes: {\n root: string,\n keyboardIcon: string,\n keyboard: string\n },\n deviceId: string,\n loggedInUser: any,\n hostname: string,\n port: number,\n deviceName: string\n },\n {\n hasConfig: boolean,\n loading: boolean,\n token: string\n }\n > {\n static propTypes = {\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n deviceId: PropTypes.string.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n port: PropTypes.number.isRequired,\n hostname: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired,\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n progress: PropTypes.string.isRequired\n }).isRequired\n };\n\n state = {\n firstTime: true,\n loading: false,\n token: ''\n };\n\n componentDidMount() {\n const { deviceId, loggedInUser } = this.props;\n this.setState({ firstTime: false, loading: true });\n hasTunnelSettingsForType(\n options.type,\n deviceId,\n loggedInUser._id\n ).subscribe(hasConfig => {\n if (!hasConfig) {\n this.setState({ hasConfig: false, loading: false });\n } else {\n this.setState({ hasConfig: true });\n this.loadToken();\n }\n });\n }\n\n onSettingsDataReady = (data: { saveConfig: boolean }) => {\n const { hasConfig } = this.state;\n const { saveConfig, ...rest } = data;\n const { deviceId, loggedInUser } = this.props;\n if (saveConfig) {\n const isEmpty = Object.keys(rest).length === 0;\n if (hasConfig && isEmpty) {\n removeTunnelSettingsForType(\n options.type,\n deviceId,\n loggedInUser._id\n ).subscribe(() => {\n this.loadToken();\n });\n } else if (!isEmpty) {\n replaceOrCreateTunnelSettingsForType(\n options.type,\n deviceId,\n loggedInUser._id,\n rest\n ).subscribe(() => {\n this.loadToken();\n });\n } else {\n // we don't save empty configs\n this.loadToken();\n }\n } else {\n this.loadToken(rest);\n }\n };\n\n loadToken(data = {}) {\n const {\n deviceId,\n loggedInUser,\n hostname,\n port,\n actions: { setGlobalMessageError }\n } = this.props;\n const defaultSettings = options.defaultSettings || {};\n const settings = {\n ...defaultSettings,\n hostname,\n port,\n ...data\n };\n loadToken(\n options.type,\n deviceId,\n loggedInUser._id,\n settings\n ).subscribe(\n ({ data: { token } }) => {\n this.setState({ token, loading: false });\n },\n error => {\n this.setState({ loading: false });\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n }\n\n render() {\n const {\n classes: { root, progress },\n deviceName\n } = this.props;\n const { loading, token, firstTime, hasConfig } = this.state;\n\n if (loading || firstTime) {\n return (\n
\n \n
\n );\n }\n\n return (\n \n );\n }\n }\n\n const mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n });\n\n const mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n });\n\n WithTokenCheck.displayName = `WithToken(${WrappedComponent.displayName ||\n WrappedComponent.name})`;\n WithTokenCheck.WrappedComponent = WrappedComponent;\n return connect(\n mapStateToProps,\n mapDispatchToProps\n )(withStyles(styles)(WithTokenCheck));\n};\n","import * as mqtt from 'mqtt';\nimport { getAuthToken } from './http-util';\nimport { MQTT_SERVER_URL, MQTT_ENV } from '../constants/api-constants';\n\nlet client;\nconst handlers = [];\n\nconst initializeClient = () => {\n client = mqtt.connect(\n MQTT_SERVER_URL,\n { keepalive: 60, username: getAuthToken(), password: 'UI' }\n );\n client.on('message', (t, message) => {\n handlers.forEach(f => f(t, message));\n });\n};\n\nexport const addListener = listener => {\n handlers.push(listener);\n};\n\nexport const removeListener = listener => {\n const index = handlers.indexOf(listener);\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n};\n\nexport const getClient = () => {\n if (!client) {\n initializeClient();\n }\n return client;\n};\n\nexport const publish = (message, channel) => {\n const client = getClient();\n client.publish(channel, JSON.stringify(message));\n};\n\nexport function subscribeToTopic(topic) {\n // argument topic must be the following types\n // '$user--${userId}/#' or '$users/#'\n const client = getClient();\n const realTopic = `${MQTT_ENV}/${topic}`;\n client.subscribe(realTopic);\n}\n\nexport function unsubscribeFromTopic(topic) {\n const client = getClient();\n const realTopic = `${MQTT_ENV}/${topic}`;\n client.unsubscribe(realTopic);\n}\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nimport {\n openSSHTunnel,\n openVNCTunnel,\n openRDPTunnel\n} from '../../api/tunnel-api';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { setGlobalMessageError } from '../../actions/app-actions';\n\nimport {\n subscribeToTopic,\n unsubscribeFromTopic,\n addListener,\n removeListener\n} from '../../utils/mqtt';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\n\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport { MQTT_ENV } from '../../constants/api-constants';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n progress: {\n margin: theme.spacing.unit * 2\n }\n});\n\nexport default () => WrappedComponent => {\n class WithTunnelCheck extends React.Component {\n static propTypes = {\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n tunnelType: PropTypes.string.isRequired,\n deviceId: PropTypes.string.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n progress: PropTypes.string.isRequired\n }).isRequired\n };\n\n state = {\n firstTime: true,\n loading: false,\n port: null,\n hostname: null\n };\n\n componentDidMount() {\n const {\n tunnelType,\n deviceId,\n loggedInUser,\n actions: { setGlobalMessageError }\n } = this.props;\n let tunnelId;\n let action;\n this.setState({ firstTime: false, loading: true });\n switch (tunnelType) {\n case 'ssh':\n action = openSSHTunnel;\n break;\n case 'vnc':\n action = openVNCTunnel;\n break;\n case 'rdp':\n action = openRDPTunnel;\n break;\n default:\n return;\n }\n action(deviceId, {}).subscribe(\n data => {\n tunnelId = data.data.tunnel.id;\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n const topic = `user--${loggedInUser._id}/server`;\n const fn = (t, message) => {\n const action = JSON.parse(message);\n if (action && action.type === 'NOTIFY_USER') {\n const { payload } = action;\n const { address, port, action: actionName } = payload;\n if (\n tunnelId === payload.tunnelId &&\n actionName === 'start_tunnel' &&\n t === `${MQTT_ENV}/user--${loggedInUser._id}/server`\n ) {\n this.setState({\n loading: false,\n hostname: address,\n port\n });\n removeListener(fn);\n }\n }\n };\n addListener(fn);\n subscribeToTopic(topic);\n }\n\n componentWillUnmount() {\n const { loggedInUser } = this.props;\n const topic = `user--${loggedInUser._id}/server`;\n unsubscribeFromTopic(topic);\n }\n\n render() {\n const {\n classes: { root, progress },\n ...rest\n } = this.props;\n const { loading, firstTime, hostname, port } = this.state;\n\n if (loading || firstTime) {\n return (\n
\n \n
\n );\n }\n\n return (\n \n );\n }\n }\n\n const mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n });\n\n const mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n });\n\n WithTunnelCheck.displayName = `WithTunnel(${WrappedComponent.displayName ||\n WrappedComponent.name})`;\n WithTunnelCheck.WrappedComponent = WrappedComponent;\n return connect(\n mapStateToProps,\n mapDispatchToProps\n )(withStyles(styles)(WithTunnelCheck));\n};\n","export const GUAC_CLIENT_STATE_DISCONNECTING = 4;\nexport const GUAC_CLIENT_STATE_DISCONNECTED = 5;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\n\nimport { Client, WebSocketTunnel } from 'apache-guacamole-common-js';\n\nimport { TERMINAL_URL } from '../../../constants/api-constants';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\n\nconst styles = () => ({\n canvas: {\n // overflowScrolling: 'touch',\n // webkitOverflowScrolling: 'touch',\n // transform: 'translateZ(0)',\n // webkitTransform: 'translateZ(0)',\n // zIndex: 1,\n overflowX: 'auto',\n overflowY: 'auto',\n '&::-webkit-scrollbar': {\n webkitAppearance: 'none',\n height: 18,\n width: 18\n },\n '&::-webkit-scrollbar-button': {\n display: 'block',\n height: 0,\n width: 0\n },\n '&::-webkit-scrollbar-thumb': {\n borderRadius: 4,\n backgroundColor: 'rgba(0, 0, 0, .5)'\n },\n '&::-webkit-scrollbar-track-piece': {\n background: 'rgba(0,0,0,.15)'\n },\n '&>div>div': {\n overflow: 'hidden'\n }\n }\n});\n// eslint-disable-next-line\nclass GuacCanvas extends Component<\n {\n actions: {\n setGlobalMessageError: (message: any) => void\n },\n onGuacClientReady: (guac: any) => void,\n onGuacClientStateChange: (state: any) => void,\n onGuacClientConnectCalled: () => void,\n onCanvasScroll: () => void,\n onError: (error: any) => void,\n classes: {\n canvas: string\n },\n width: number,\n height: number,\n token: string\n },\n {}\n> {\n static propTypes = {\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n token: PropTypes.string.isRequired,\n onError: PropTypes.func,\n onGuacClientStateChange: PropTypes.func,\n onGuacClientReady: PropTypes.func,\n // eslint-disable-next-line react/no-unused-prop-types\n onGuacClientConnectCalled: PropTypes.func,\n onCanvasScroll: PropTypes.func,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n classes: PropTypes.shape({\n canvas: PropTypes.string.isRequired\n }).isRequired\n };\n\n state = {};\n\n rootDiv = null;\n\n guacConnected = false;\n\n guac = null;\n\n componentDidMount() {\n this.setupGuacClient();\n const { width, height } = this.props;\n if (width !== 0 && height !== 0) {\n this.connectGuacClient(this.props);\n }\n }\n\n componentDidUpdate(prevProps) {\n const { width: oldWidth, height: oldHeight } = prevProps;\n const { width: newWidth, height: newHeight } = this.props;\n if (this.guac && (oldWidth !== newWidth || oldHeight !== newHeight)) {\n if (newWidth !== 0 && newHeight !== 0) {\n if (!this.guacConnected) {\n this.connectGuacClient(this.props);\n } else {\n this.guac.sendSize(newWidth, newHeight);\n }\n }\n }\n }\n\n componentWillUnmount() {\n if (!this.guac) {\n return;\n }\n this.guac.disconnect();\n this.guacConnected = false;\n }\n\n onGuacError = () => {\n // eslint-disable-next-line\n const {\n onError,\n actions: { setGlobalMessageError }\n } = this.props;\n setGlobalMessageError('Something went wrong.');\n if (typeof onError === 'function') {\n onError();\n }\n // console.log(error);\n };\n\n onGuacDisconnect = state => {\n const { onGuacClientStateChange } = this.props;\n if (onGuacClientStateChange) {\n onGuacClientStateChange(state);\n }\n };\n\n setupGuacClient() {\n const { onGuacClientReady } = this.props;\n this.guac = new Client(new WebSocketTunnel(TERMINAL_URL));\n if (typeof onGuacClientReady === 'function') {\n onGuacClientReady(this.guac);\n }\n }\n\n handleRef = rootDiv => {\n this.rootDiv = rootDiv;\n };\n\n handleScroll = ev => {\n const { onCanvasScroll } = this.props;\n if (onCanvasScroll) {\n onCanvasScroll(\n ev.nativeEvent.srcElement.scrollTop,\n ev.nativeEvent.srcElement.scrollLeft\n );\n }\n };\n\n connectGuacClient(props) {\n const { onGuacClientConnectCalled, token } = props;\n let { width, height } = props;\n const element = this.guac.getDisplay().getElement();\n this.rootDiv.appendChild(element);\n this.guac.onerror = this.onGuacError;\n this.guac.onstatechange = this.onGuacDisconnect;\n\n if (width === 0) {\n width = 1280;\n }\n if (height === 0) {\n height = 800;\n }\n\n // Connect\n this.guac.connect(`token=${token}&width=${width}&height=${height}`);\n this.guacConnected = true;\n if (onGuacClientConnectCalled) {\n onGuacClientConnectCalled();\n }\n }\n\n render() {\n // ev.nativeEvent.srcElement.scrollTop\n const {\n classes: { canvas },\n width,\n height\n } = this.props;\n return (\n \n );\n }\n}\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(withStyles(styles)(GuacCanvas));\n","export default {\n language: 'en_US',\n type: 'qwerty',\n width: 22,\n\n keys: {\n Back: 65288,\n Tab: 65289,\n Enter: 65293,\n Esc: 65307,\n Home: 65360,\n PgUp: 65365,\n PgDn: 65366,\n End: 65367,\n Ins: 65379,\n F1: 65470,\n F2: 65471,\n F3: 65472,\n F4: 65473,\n F5: 65474,\n F6: 65475,\n F7: 65476,\n F8: 65477,\n F9: 65478,\n F10: 65479,\n F11: 65480,\n F12: 65481,\n Del: 65535,\n\n Space: ' ',\n\n Left: [\n {\n title: '←',\n keysym: 65361\n }\n ],\n Up: [\n {\n title: '↑',\n keysym: 65362\n }\n ],\n Right: [\n {\n title: '→',\n keysym: 65363\n }\n ],\n Down: [\n {\n title: '↓',\n keysym: 65364\n }\n ],\n\n Menu: [\n {\n title: 'Menu',\n keysym: 65383\n }\n ],\n LShift: [\n {\n title: 'Shift',\n modifier: 'shift',\n keysym: 65505\n }\n ],\n RShift: [\n {\n title: 'Shift',\n modifier: 'shift',\n keysym: 65506\n }\n ],\n LCtrl: [\n {\n title: 'Ctrl',\n modifier: 'control',\n keysym: 65507\n }\n ],\n RCtrl: [\n {\n title: 'Ctrl',\n modifier: 'control',\n keysym: 65508\n }\n ],\n Caps: [\n {\n title: 'Caps',\n modifier: 'caps',\n keysym: 65509\n }\n ],\n LAlt: [\n {\n title: 'Alt',\n modifier: 'alt',\n keysym: 65513\n }\n ],\n RAlt: [\n {\n title: 'Alt',\n modifier: 'alt',\n keysym: 65514\n }\n ],\n Super: [\n {\n title: 'Super',\n modifier: 'super',\n keysym: 65515\n }\n ],\n\n '`': [\n { title: '`', requires: [] },\n { title: '~', requires: ['shift'] }\n ],\n '1': [\n { title: '1', requires: [] },\n { title: '!', requires: ['shift'] }\n ],\n '2': [\n { title: '2', requires: [] },\n { title: '@', requires: ['shift'] }\n ],\n '3': [\n { title: '3', requires: [] },\n { title: '#', requires: ['shift'] }\n ],\n '4': [\n { title: '4', requires: [] },\n { title: '$', requires: ['shift'] }\n ],\n '5': [\n { title: '5', requires: [] },\n { title: '%', requires: ['shift'] }\n ],\n '6': [\n { title: '6', requires: [] },\n { title: '^', requires: ['shift'] }\n ],\n '7': [\n { title: '7', requires: [] },\n { title: '&', requires: ['shift'] }\n ],\n '8': [\n { title: '8', requires: [] },\n { title: '*', requires: ['shift'] }\n ],\n '9': [\n { title: '9', requires: [] },\n { title: '(', requires: ['shift'] }\n ],\n '0': [\n { title: '0', requires: [] },\n { title: ')', requires: ['shift'] }\n ],\n '-': [\n { title: '-', requires: [] },\n { title: '_', requires: ['shift'] }\n ],\n '=': [\n { title: '=', requires: [] },\n { title: '+', requires: ['shift'] }\n ],\n ',': [\n { title: ',', requires: [] },\n { title: '<', requires: ['shift'] }\n ],\n '.': [\n { title: '.', requires: [] },\n { title: '>', requires: ['shift'] }\n ],\n '/': [\n { title: '/', requires: [] },\n { title: '?', requires: ['shift'] }\n ],\n '[': [\n { title: '[', requires: [] },\n { title: '{', requires: ['shift'] }\n ],\n ']': [\n { title: ']', requires: [] },\n { title: '}', requires: ['shift'] }\n ],\n '\\\\': [\n { title: '\\\\', requires: [] },\n { title: '|', requires: ['shift'] }\n ],\n ';': [\n { title: ';', requires: [] },\n { title: ':', requires: ['shift'] }\n ],\n \"'\": [\n { title: \"'\", requires: [] },\n { title: '\"', requires: ['shift'] }\n ],\n\n q: [\n { title: 'q', requires: [] },\n { title: 'Q', requires: ['caps'] },\n { title: 'Q', requires: ['shift'] },\n { title: 'q', requires: ['caps', 'shift'] }\n ],\n w: [\n { title: 'w', requires: [] },\n { title: 'W', requires: ['caps'] },\n { title: 'W', requires: ['shift'] },\n { title: 'w', requires: ['caps', 'shift'] }\n ],\n e: [\n { title: 'e', requires: [] },\n { title: 'E', requires: ['caps'] },\n { title: 'E', requires: ['shift'] },\n { title: 'e', requires: ['caps', 'shift'] }\n ],\n r: [\n { title: 'r', requires: [] },\n { title: 'R', requires: ['caps'] },\n { title: 'R', requires: ['shift'] },\n { title: 'r', requires: ['caps', 'shift'] }\n ],\n t: [\n { title: 't', requires: [] },\n { title: 'T', requires: ['caps'] },\n { title: 'T', requires: ['shift'] },\n { title: 't', requires: ['caps', 'shift'] }\n ],\n y: [\n { title: 'y', requires: [] },\n { title: 'Y', requires: ['caps'] },\n { title: 'Y', requires: ['shift'] },\n { title: 'y', requires: ['caps', 'shift'] }\n ],\n u: [\n { title: 'u', requires: [] },\n { title: 'U', requires: ['caps'] },\n { title: 'U', requires: ['shift'] },\n { title: 'u', requires: ['caps', 'shift'] }\n ],\n i: [\n { title: 'i', requires: [] },\n { title: 'I', requires: ['caps'] },\n { title: 'I', requires: ['shift'] },\n { title: 'i', requires: ['caps', 'shift'] }\n ],\n o: [\n { title: 'o', requires: [] },\n { title: 'O', requires: ['caps'] },\n { title: 'O', requires: ['shift'] },\n { title: 'o', requires: ['caps', 'shift'] }\n ],\n p: [\n { title: 'p', requires: [] },\n { title: 'P', requires: ['caps'] },\n { title: 'P', requires: ['shift'] },\n { title: 'p', requires: ['caps', 'shift'] }\n ],\n a: [\n { title: 'a', requires: [] },\n { title: 'A', requires: ['caps'] },\n { title: 'A', requires: ['shift'] },\n { title: 'a', requires: ['caps', 'shift'] }\n ],\n s: [\n { title: 's', requires: [] },\n { title: 'S', requires: ['caps'] },\n { title: 'S', requires: ['shift'] },\n { title: 's', requires: ['caps', 'shift'] }\n ],\n d: [\n { title: 'd', requires: [] },\n { title: 'D', requires: ['caps'] },\n { title: 'D', requires: ['shift'] },\n { title: 'd', requires: ['caps', 'shift'] }\n ],\n f: [\n { title: 'f', requires: [] },\n { title: 'F', requires: ['caps'] },\n { title: 'F', requires: ['shift'] },\n { title: 'f', requires: ['caps', 'shift'] }\n ],\n g: [\n { title: 'g', requires: [] },\n { title: 'G', requires: ['caps'] },\n { title: 'G', requires: ['shift'] },\n { title: 'g', requires: ['caps', 'shift'] }\n ],\n h: [\n { title: 'h', requires: [] },\n { title: 'H', requires: ['caps'] },\n { title: 'H', requires: ['shift'] },\n { title: 'h', requires: ['caps', 'shift'] }\n ],\n j: [\n { title: 'j', requires: [] },\n { title: 'J', requires: ['caps'] },\n { title: 'J', requires: ['shift'] },\n { title: 'j', requires: ['caps', 'shift'] }\n ],\n k: [\n { title: 'k', requires: [] },\n { title: 'K', requires: ['caps'] },\n { title: 'K', requires: ['shift'] },\n { title: 'k', requires: ['caps', 'shift'] }\n ],\n l: [\n { title: 'l', requires: [] },\n { title: 'L', requires: ['caps'] },\n { title: 'L', requires: ['shift'] },\n { title: 'l', requires: ['caps', 'shift'] }\n ],\n z: [\n { title: 'z', requires: [] },\n { title: 'Z', requires: ['caps'] },\n { title: 'Z', requires: ['shift'] },\n { title: 'z', requires: ['caps', 'shift'] }\n ],\n x: [\n { title: 'x', requires: [] },\n { title: 'X', requires: ['caps'] },\n { title: 'X', requires: ['shift'] },\n { title: 'x', requires: ['caps', 'shift'] }\n ],\n c: [\n { title: 'c', requires: [] },\n { title: 'C', requires: ['caps'] },\n { title: 'C', requires: ['shift'] },\n { title: 'c', requires: ['caps', 'shift'] }\n ],\n v: [\n { title: 'v', requires: [] },\n { title: 'V', requires: ['caps'] },\n { title: 'V', requires: ['shift'] },\n { title: 'v', requires: ['caps', 'shift'] }\n ],\n b: [\n { title: 'b', requires: [] },\n { title: 'B', requires: ['caps'] },\n { title: 'B', requires: ['shift'] },\n { title: 'b', requires: ['caps', 'shift'] }\n ],\n n: [\n { title: 'n', requires: [] },\n { title: 'N', requires: ['caps'] },\n { title: 'N', requires: ['shift'] },\n { title: 'n', requires: ['caps', 'shift'] }\n ],\n m: [\n { title: 'm', requires: [] },\n { title: 'M', requires: ['caps'] },\n { title: 'M', requires: ['shift'] },\n { title: 'm', requires: ['caps', 'shift'] }\n ]\n },\n\n layout: [\n [\n 'Esc',\n 0.7,\n 'F1',\n 'F2',\n 'F3',\n 'F4',\n 0.7,\n 'F5',\n 'F6',\n 'F7',\n 'F8',\n 0.7,\n 'F9',\n 'F10',\n 'F11',\n 'F12'\n ],\n\n [0.1],\n\n {\n main: {\n alpha: [\n [\n '`',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '0',\n '-',\n '=',\n 'Back'\n ],\n [\n 'Tab',\n 'q',\n 'w',\n 'e',\n 'r',\n 't',\n 'y',\n 'u',\n 'i',\n 'o',\n 'p',\n '[',\n ']',\n '\\\\'\n ],\n [\n 'Caps',\n 'a',\n 's',\n 'd',\n 'f',\n 'g',\n 'h',\n 'j',\n 'k',\n 'l',\n ';',\n \"'\",\n 'Enter'\n ],\n [\n 'LShift',\n 'z',\n 'x',\n 'c',\n 'v',\n 'b',\n 'n',\n 'm',\n ',',\n '.',\n '/',\n 'RShift'\n ],\n ['LCtrl', 'Super', 'LAlt', 'Space', 'RAlt', 'Menu', 'RCtrl']\n ],\n\n movement: [\n ['Ins', 'Home', 'PgUp'],\n ['Del', 'End', 'PgDn'],\n [1],\n ['Up'],\n ['Left', 'Down', 'Right']\n ]\n }\n }\n ],\n\n keyWidths: {\n Back: 2,\n Tab: 1.5,\n '\\\\': 1.5,\n Caps: 1.85,\n Enter: 2.25,\n LShift: 2.1,\n RShift: 3.1,\n\n LCtrl: 1.6,\n Super: 1.6,\n LAlt: 1.6,\n Space: 6.1,\n RAlt: 1.6,\n Menu: 1.6,\n RCtrl: 1.6,\n\n Ins: 1.6,\n Home: 1.6,\n PgUp: 1.6,\n Del: 1.6,\n End: 1.6,\n PgDn: 1.6\n }\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport KeyboardIcon from '@material-ui/icons/Keyboard';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport KeyboardHideIcon from '@material-ui/icons/KeyboardHide';\n\nimport {\n StringReader,\n Mouse as GuacMouse,\n Keyboard as GuacKeyboard,\n OnScreenKeyboard\n} from 'apache-guacamole-common-js';\n\nimport onScreenKeyboardLayout from '../../../keyboard-layouts/en-us-qwerty';\n\nimport copyTextToClipboard from '../../../utils/clipboard-util';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n position: 'relative'\n },\n canvasWrapper: {\n overflow: 'auto',\n flex: '3 1 0%'\n },\n keyboardIcon: {\n position: 'absolute',\n right: '5px',\n bottom: '75px'\n },\n settingsIcon: {\n position: 'absolute',\n right: '5px',\n bottom: '150px'\n },\n keyboard: {\n flex: '1 1 0%'\n }\n});\n\nexport default options => (WrappedComponent: any) => {\n const opts = {\n mouse: true,\n keyboard: true,\n touch: true,\n onScreenKeyboard: true,\n settingsIcon: true,\n ...options\n };\n class WithOptions extends React.Component<\n {\n classes: {\n root: string,\n keyboardIcon: string,\n settingsIcon: string,\n canvasWrapper: string,\n keyboard: string\n },\n onSettingsIconClick: () => void,\n ignoreMouse: boolean\n },\n {\n keyboardOpen: boolean\n }\n > {\n static propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired,\n keyboardIcon: PropTypes.string.isRequired,\n settingsIcon: PropTypes.string.isRequired,\n canvasWrapper: PropTypes.string.isRequired,\n keyboard: PropTypes.string.isRequired\n }).isRequired,\n onSettingsIconClick: PropTypes.func,\n ignoreMouse: PropTypes.bool\n };\n\n state = {\n keyboardOpened: false\n };\n\n componentWillUnmount() {\n const { onUnMount } = this.props;\n if (this.guacKeyboard) {\n this.guacKeyboard.destroyListeners();\n }\n if (onUnMount) {\n onUnMount();\n }\n }\n\n onRefReady = terminalInstance => {\n this.terminalInstance = terminalInstance;\n };\n\n onGuacClientReady = (guac: any) => {\n const { onGuacClientReady } = this.props;\n this.guac = guac;\n this.setupGuacListeners();\n if (onGuacClientReady) {\n onGuacClientReady({\n sendMouseState: this.guac.sendMouseState.bind(this.guac),\n setClipboard: this.guac.setClipboard.bind(this.guac),\n getDisplay: this.guac.getDisplay.bind(this.guac),\n _setClipboard: this._setClipboard.bind(this),\n _getClipboard: this._getClipboard.bind(this),\n _setGuacClipboard: this._setGuacClipboard.bind(this),\n _getGuacClipboard: this._getGuacClipboard.bind(this)\n });\n }\n };\n\n _setClipboard = (clipboard: any) => {\n this.clipboard = clipboard;\n };\n\n _getClipboard = () => this.clipboard;\n\n _setGuacClipboard = (clipboard: any) => {\n this.guacClipboard = clipboard;\n };\n\n _getGuacClipboard = () => this.guacClipboard;\n\n onGuacClientConnectCalled = () => {\n const { ignoreMouse } = this.props;\n if (opts.mouse && !ignoreMouse) {\n this.setupGuacMouse();\n }\n if (opts.keyboard) {\n this.setupGuacKeyboard();\n }\n if (opts.touch) {\n this.setupGuacTouch();\n }\n if (opts.onScreenKeyboard) {\n this.setupOnScreenKeyboardLayout();\n }\n };\n\n onGuacMouseDownEvent = mouseState => {\n if (mouseState.left) {\n this.mouseLeftKeyDownState = {\n ...mouseState,\n x: mouseState.x + this.scrollLeft,\n y: mouseState.y + this.scrollTop\n };\n }\n if (mouseState.right) {\n this.mouseRightKeyDownState = {\n ...mouseState,\n x: mouseState.x + this.scrollLeft,\n y: mouseState.y + this.scrollTop\n };\n }\n this.guac.sendMouseState({\n ...mouseState,\n x: mouseState.x + this.scrollLeft,\n y: mouseState.y + this.scrollTop\n });\n };\n\n onGuacMouseMoveEvent = origMoveState => {\n if (navigator.clipboard) {\n this.guac.sendMouseState({\n ...origMoveState,\n x: origMoveState.x + this.scrollLeft,\n y: origMoveState.y + this.scrollTop\n });\n } else if (this.mouseLeftKeyDownState) {\n const upState = {\n ...origMoveState,\n x: origMoveState.x + this.scrollLeft,\n y: origMoveState.y + this.scrollTop,\n left: false\n };\n this.guac.sendMouseState(upState);\n // Magic here, don't DELETE these two calls, it don't work with one :)\n this.guac.sendMouseState(this.mouseLeftKeyDownState);\n this.guac.sendMouseState(this.mouseLeftKeyDownState);\n this.guac.sendMouseState({\n ...origMoveState,\n x: origMoveState.x + this.scrollLeft,\n y: origMoveState.y + this.scrollTop,\n left: true\n });\n } else {\n this.guac.sendMouseState({\n ...origMoveState,\n x: origMoveState.x + this.scrollLeft,\n y: origMoveState.y + this.scrollTop\n });\n }\n };\n\n onGuacMouseUpEvent = mouseState => {\n this.guac.sendMouseState({\n ...mouseState,\n x: mouseState.x + this.scrollLeft,\n y: mouseState.y + this.scrollTop\n });\n };\n\n onGuacTouchDownEvent = mouseState => {\n this.guac.sendMouseState(mouseState);\n };\n\n onGuacTouchMoveEvent = origMoveState => {\n this.guac.sendMouseState(origMoveState);\n };\n\n onGuacTouchUpEvent = mouseState => {\n this.guac.sendMouseState(mouseState);\n };\n\n onGuacKeyDown = keysym => {\n this.guac.sendKeyEvent(1, keysym);\n };\n\n onGuacKeyUp = keysym => {\n this.guac.sendKeyEvent(0, keysym);\n };\n\n onGuacClipboardChange = (stream, mimeType) => {\n if (mimeType === 'text/plain') {\n const reader = new StringReader(stream);\n reader.ontext = this.onGuacClipboardTextChange;\n }\n };\n\n onGuacClipboardTextChange = (text: string) => {\n this.clipboardText = text;\n this.guacClipboard = text;\n if (!navigator.clipboard) {\n copyTextToClipboard(text);\n } else {\n navigator.clipboard.writeText(text);\n }\n this.clipboard = text;\n };\n\n onCanvasScroll = (scrollTop, scrollLeft) => {\n if (this.guacTouch && this.guacTouch.updateClientScroll) {\n this.guacTouch.updateClientScroll(scrollLeft, scrollTop);\n }\n this.scrollTop = scrollTop;\n this.scrollLeft = scrollLeft;\n };\n\n scrollTop = 0;\n\n scrollLeft = 0;\n\n onScreenKeyboardDiv = null;\n\n terminalInstance = null;\n\n rootDiv = null;\n\n guac = null;\n\n guacMouse = null;\n\n guacTouch = null;\n\n guacKeyboard = null;\n\n guacOnScreenKeyboard = null;\n\n guacClipboard = '';\n\n clipboard = '';\n\n mouseLeftKeyDownState = null;\n\n mouseRightKeyDownState = null;\n\n clipboardText = '';\n\n setupGuacListeners() {\n this.guac.onclipboard = this.onGuacClipboardChange;\n }\n\n setupGuacMouse() {\n const element = this.guac.getDisplay().getElement();\n\n this.guacMouse = new GuacMouse(element);\n\n this.guacMouse.onmousedown = this.onGuacMouseDownEvent;\n this.guacMouse.onmouseup = this.onGuacMouseUpEvent;\n this.guacMouse.onmousemove = this.onGuacMouseMoveEvent;\n }\n\n setupGuacKeyboard() {\n this.guacKeyboard = new GuacKeyboard(document);\n this.guacKeyboard.onkeydown = this.onGuacKeyDown;\n this.guacKeyboard.onkeyup = this.onGuacKeyUp;\n }\n\n setupGuacTouch() {\n const element = this.guac.getDisplay().getElement();\n // eslint-disable-next-line\n this.guacTouch = new GuacMouse.Touchscreen(element);\n\n this.guacTouch.onmousedown = this.onGuacTouchDownEvent;\n this.guacTouch.onmouseup = this.onGuacTouchUpEvent;\n this.guacTouch.onmousemove = this.onGuacTouchMoveEvent;\n }\n\n setupOnScreenKeyboardLayout() {\n // eslint-disable-next-line\n this.guacOnScreenKeyboard = new OnScreenKeyboard(\n onScreenKeyboardLayout\n );\n this.guacOnScreenKeyboard.onkeydown = this.onGuacKeyDown;\n this.guacOnScreenKeyboard.onkeyup = this.onGuacKeyUp;\n }\n\n handleOnScreenKeyboardClick = () => {\n const { keyboardOpened } = this.state;\n this.setState({ keyboardOpened: !keyboardOpened });\n };\n\n handleSettingsIconClick = () => {\n const { onSettingsIconClick } = this.props;\n if (onSettingsIconClick) {\n onSettingsIconClick();\n }\n };\n\n handleKeyboardRef = onScreenKeyboardDiv => {\n this.onScreenKeyboardDiv = onScreenKeyboardDiv;\n if (onScreenKeyboardDiv) {\n onScreenKeyboardDiv.appendChild(\n this.guacOnScreenKeyboard.getElement()\n );\n this.guacOnScreenKeyboard.resize(400);\n }\n };\n\n render() {\n const {\n classes: {\n root,\n keyboardIcon,\n settingsIcon,\n keyboard,\n canvasWrapper\n },\n // eslint-disable-next-line\n onSettingsIconClick,\n ...rest\n } = this.props;\n const { keyboardOpened } = this.state;\n\n return (\n
\n
\n \n {({ width, height }) => (\n \n )}\n \n
\n\n {opts.onScreenKeyboard && keyboardOpened && (\n \n )}\n {opts.onScreenKeyboard && (\n \n {keyboardOpened ? (\n \n ) : (\n \n )}\n \n )}\n {opts.settingsIcon && (\n \n \n \n )}\n
\n );\n }\n }\n\n WithOptions.displayName = `WithOptions(${WrappedComponent.displayName ||\n WrappedComponent.name})`;\n WithOptions.WrappedComponent = WrappedComponent;\n return withStyles(styles)(WithOptions);\n};\n","import Canvas from './Canvas';\nimport withOptions from './withOptions';\n\nexport default withOptions()(Canvas);\n","export default function copyTextToClipboard(text) {\n const textArea = document.createElement('textarea');\n\n //\n // *** This styling is an extra step which is likely not required. ***\n //\n // Why is it here? To ensure:\n // 1. the element is able to have focus and selection.\n // 2. if element was to flash render it has minimal visual impact.\n // 3. less flakyness with selection and copying which **might** occur if\n // the textarea element is not visible.\n //\n // The likelihood is the element won't even render, not even a flash,\n // so some of these are just precautions. However in IE the element\n // is visible whilst the popup box asking the user for permission for\n // the web page to copy to the clipboard.\n //\n\n // Place in top-left corner of screen regardless of scroll position.\n textArea.style.position = 'fixed';\n textArea.style.top = 0;\n textArea.style.left = 0;\n\n // Ensure it has a small width and height. Setting to 1px / 1em\n // doesn't work as this gives a negative w/h on some browsers.\n textArea.style.width = '2em';\n textArea.style.height = '2em';\n\n // We don't need padding, reducing the size if it does flash render.\n textArea.style.padding = 0;\n\n // Clean up any borders.\n textArea.style.border = 'none';\n textArea.style.outline = 'none';\n textArea.style.boxShadow = 'none';\n\n // Avoid flash of white box if rendered for any reason.\n textArea.style.background = 'transparent';\n\n textArea.value = text;\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n let successful = false;\n\n try {\n successful = document.execCommand('copy');\n } catch (err) {\n successful = false;\n }\n\n document.body.removeChild(textArea);\n return successful;\n}\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nimport styles from './styles';\n\nclass PasswordField extends Component<\n {\n classes: {\n formControl: string\n },\n password: string,\n error: string,\n type: string,\n autoComplete: string,\n isPasswordRequired: boolean,\n disabled: boolean,\n label: any,\n onChange: (value: string) => void,\n onEnter: () => void\n },\n {\n showPassword: boolean,\n password: string\n }\n> {\n static propTypes = {\n classes: PropTypes.shape({\n formControl: PropTypes.string.isRequired\n }).isRequired,\n password: PropTypes.string,\n error: PropTypes.string,\n isPasswordRequired: PropTypes.bool,\n disabled: PropTypes.bool,\n type: PropTypes.string.isRequired,\n autoComplete: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n onEnter: PropTypes.func,\n label: PropTypes.node,\n showPassword: PropTypes.bool\n };\n\n static defaultProps = {\n isPasswordRequired: true,\n label: 'Password',\n disabled: false\n };\n\n constructor(props) {\n super(props);\n this.state = {\n password: props.password,\n showPassword: props.showPassword\n };\n }\n\n componentDidUpdate(prevProps) {\n const { password: oldPassword } = prevProps;\n const { password } = this.props;\n if (password !== oldPassword) {\n this.setState({ password });\n }\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n const { onEnter } = this.props;\n if (typeof onEnter === 'function') {\n onEnter();\n }\n break;\n }\n default:\n break;\n }\n };\n\n handleChange = e => {\n this.setState(\n {\n password: e.target.value\n },\n () => {\n const { password } = this.state;\n const { onChange } = this.props;\n if (typeof onChange === 'function') {\n onChange(password);\n }\n }\n );\n };\n\n handleClickShowPassword = () => {\n this.setState({ showPassword: !this.state.showPassword });\n };\n\n handleMouseDownPassword = event => {\n event.preventDefault();\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const { autoComplete, isPasswordRequired, label, type, error, classes, disabled } = this.props;\n const { showPassword, password } = this.state;\n\n return (\n \n {label}\n \n \n {showPassword ? : }\n \n \n }\n />\n {error && {error}}\n \n );\n }\n}\n\nexport default withStyles(styles)(PasswordField);\n","// @flow\n\nexport default (theme: any) => ({\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n }\n});\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\n\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport PasswordField from '../../../components/PasswordField';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100vw',\n height: '100vh'\n },\n card: {\n maxWidth: 345\n },\n formControl: {\n margin: theme.spacing.unit\n },\n fontSizeH1: {\n fontSize: '2rem'\n }\n});\n\nclass VNCSettings extends React.Component<\n {\n classes: {\n card: string,\n formControl: string,\n root: string\n },\n onDataReady: (password: string) => void\n },\n {\n password: string,\n saveConfig: boolean\n }\n> {\n static propTypes = {\n classes: PropTypes.shape({\n card: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired,\n root: PropTypes.string.isRequired\n }).isRequired,\n onDataReady: PropTypes.func.isRequired,\n onCloseClick: PropTypes.func,\n closable: PropTypes.bool\n };\n\n state = {\n password: '',\n saveConfig: false\n };\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleOKClick();\n break;\n }\n default:\n break;\n }\n };\n\n handleChange = (password: string) => {\n this.setState({ password });\n };\n\n handleOKClick = () => {\n const { password, saveConfig } = this.state;\n const { onDataReady } = this.props;\n onDataReady({ password, saveConfig });\n };\n\n handleSaveConfigChange = event => {\n this.setState({ saveConfig: event.target.checked });\n };\n\n handleCloseClick = () => {\n const { onCloseClick } = this.props;\n if (onCloseClick) {\n onCloseClick();\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes: { card, formControl, root, fontSizeH1 },\n closable\n } = this.props;\n const { password, saveConfig } = this.state;\n return (\n
\n \n \n \n VNC setting\n \n \n \n }\n label=\"Save Configuration (all configs will be encrypted)\"\n />\n \n \n \n OK\n \n {closable && (\n \n Close\n \n )}\n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(VNCSettings);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { GUAC_CLIENT_STATE_DISCONNECTED } from '../../../constants/guac-constants';\nimport GuacClient from '../GuacClient';\nimport Settings from './Settings';\nimport clientWrapper from './clientWrapper';\n\n// type VNCTerminalPropTypes = {\n// deviceName: string,\n// token: string,\n// onSettingsDataReady: (data: any) => void\n// };\n\nconst Client = clientWrapper(GuacClient);\n\nclass VNCTerminal extends React.Component {\n static propTypes = {\n deviceName: PropTypes.string.isRequired,\n token: PropTypes.string.isRequired,\n onSettingsDataReady: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n showSettings: props.token === ''\n };\n }\n\n componentDidUpdate(prevProps) {\n const { token: oldToken } = prevProps;\n const { token: newToken } = this.props;\n if (oldToken !== newToken) {\n this.setState({ showSettings: newToken === '' });\n }\n }\n\n onSettingsIconClick = () => {\n this.setState({ showSettings: true });\n };\n\n onSettingCloseClick = () => {\n this.setState({ showSettings: false });\n };\n\n onGuacClientError = () => {\n this.setState({ showSettings: true });\n };\n\n onGuacClientStateChange = state => {\n const { showSettings } = this.state;\n if (state === GUAC_CLIENT_STATE_DISCONNECTED) {\n if (!showSettings) {\n window.close();\n }\n }\n };\n\n render() {\n const { token, onSettingsDataReady } = this.props;\n const { showSettings } = this.state;\n if (showSettings) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n}\n\nexport default VNCTerminal;\n","import React from 'react';\n\nexport default (WrappedComponent: any) => {\n class ClientWrapper extends React.Component<{}, {}> {\n onGuacClientReady = guac => {\n this.guac = guac;\n // this.setupGuacMouse();\n this.clipboardSyncInterval = setInterval(\n this.onClipboardSync,\n 2000\n );\n };\n\n onClipboardSync = () => {\n if (navigator.clipboard) {\n navigator.clipboard\n .readText()\n .then(text => {\n const oldClipboard = this.guac._getClipboard();\n if (text && text !== oldClipboard) {\n this.guac._setClipboard(text);\n this.guac._setGuacClipboard(text);\n this.guac.setClipboard(text);\n }\n })\n .catch(err => {});\n }\n };\n\n onUnMount = () => {\n if (this.clipboardSyncInterval) {\n clearInterval(this.clipboardSyncInterval);\n }\n };\n\n render() {\n return (\n \n );\n }\n }\n\n ClientWrapper.WrappedComponent = WrappedComponent;\n return ClientWrapper;\n};\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Select from '@material-ui/core/Select';\nimport Button from '@material-ui/core/Button';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport PasswordField from '../../../components/PasswordField';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100vw',\n height: '100vh'\n },\n card: {\n maxWidth: 345\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n fontSizeH1: {\n fontSize: '2rem'\n },\n settingsTabs: {\n margin: '25px 0 15px 0'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'start',\n height: '310px',\n paddingTop: '20px'\n },\n subHeader: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n marginTop: '10px',\n alignItems: 'center'\n },\n authenticationMethodWrapper: {\n display: 'flex',\n justifyContent: 'space-around',\n padding: '0 15px',\n marginTop: '8px',\n marginBottom: '8px'\n },\n authenticationMethodLabel: {\n padding: '10px',\n flex: '2'\n },\n authenticationMethodSelect: {\n flex: '3'\n }\n});\n\nclass SSHSettings extends React.Component<\n {\n classes: {\n card: string,\n formControl: string,\n root: string,\n settingsTabs: string,\n contentBody: string,\n subHeader: string,\n authenticationMethodWrapper: string,\n authenticationMethodLabel: string,\n authenticationMethodSelect: string\n },\n closable: boolean,\n hasConfig: boolean,\n onDataReady: (data: any) => void,\n onCloseClick: () => void\n },\n {\n authentication: {\n username: string,\n password: string,\n privateKey: string,\n passphrase: string\n },\n settingsActiveTab: string,\n authenticationMethod: string,\n display: {\n colorScheme: string,\n fontName: string,\n fontSize: string\n },\n saveConfig: boolean\n }\n> {\n static propTypes = {\n classes: PropTypes.shape({\n card: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired,\n root: PropTypes.string.isRequired,\n settingsTabs: PropTypes.string.isRequired,\n contentBody: PropTypes.string.isRequired,\n subHeader: PropTypes.string.isRequired,\n authenticationMethodWrapper: PropTypes.string.isRequired,\n authenticationMethodLabel: PropTypes.string.isRequired,\n authenticationMethodSelect: PropTypes.string.isRequired\n }).isRequired,\n onDataReady: PropTypes.func.isRequired,\n onCloseClick: PropTypes.func,\n closable: PropTypes.bool,\n hasConfig: PropTypes.bool\n };\n\n constructor(props) {\n super(props);\n this.state = {\n authentication: {\n username: '',\n password: '',\n privateKey: '',\n passphrase: ''\n },\n settingsActiveTab: 'authentication',\n authenticationMethod: 'password',\n display: {\n colorScheme: 'gray-black',\n fontName: '',\n fontSize: 12\n },\n saveConfig: !!props.hasConfig\n };\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleOKClick();\n break;\n }\n default:\n break;\n }\n };\n\n handleSettingsActiveTabChange = (event, value) => {\n this.setState({\n settingsActiveTab:\n value === 0 ? 'authentication' : 'displaySettings'\n });\n };\n\n handleAuthenticationMethodChange = event => {\n this.setState({\n authenticationMethod: event.target.value\n });\n };\n\n handleUsernameChange = (event: any) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n username: event.target.value\n }\n });\n };\n\n handlePasswordChange = (value: string) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n password: value,\n privateKey: '',\n passphrase: ''\n }\n });\n };\n\n handlePrivateKeyChange = (event: any) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n privateKey: event.target.value,\n password: ''\n }\n });\n };\n\n handlePassphraseChange = (value: string) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n passphrase: value,\n password: ''\n }\n });\n };\n\n handleColorSchemeChange = (event: any) => {\n const { display } = this.state;\n this.setState({\n display: {\n ...display,\n colorScheme: event.target.value\n }\n });\n };\n\n handleFontNameChange = (event: any) => {\n const { display } = this.state;\n this.setState({\n display: {\n ...display,\n fontName: event.target.value\n }\n });\n };\n\n handleFontSizeChange = (event: any) => {\n const { display } = this.state;\n this.setState({\n display: {\n ...display,\n fontSize: event.target.value\n }\n });\n };\n\n handleSaveConfigChange = event => {\n this.setState({ saveConfig: event.target.checked });\n };\n\n handleOKClick = () => {\n const {\n authentication: { password, username, privateKey, passphrase },\n display: { colorScheme, fontName, fontSize },\n saveConfig,\n authenticationMethod\n } = this.state;\n\n const { onDataReady } = this.props;\n\n let args = {\n saveConfig\n };\n if (username.trim() !== '') {\n args = {\n ...args,\n username\n };\n }\n if (authenticationMethod === 'password') {\n args = {\n ...args,\n password\n };\n } else {\n args = {\n ...args,\n 'private-key': privateKey,\n passphrase\n };\n }\n if (colorScheme.trim() !== '') {\n args = {\n ...args,\n 'color-scheme': colorScheme\n };\n }\n if (fontName.trim() !== '') {\n args = {\n ...args,\n 'font-name': fontName\n };\n }\n if (fontSize) {\n args = {\n ...args,\n 'font-size': fontSize\n };\n }\n onDataReady(args);\n };\n\n handleCloseClick = () => {\n const { onCloseClick } = this.props;\n if (onCloseClick) {\n onCloseClick();\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n colorSchemeInputProps = {\n id: 'ssh-terminal-settings-color-scheme'\n };\n\n fontSizeInputProps = {\n onKeyDown: this.onKeyDown,\n min: 1\n };\n\n render() {\n const {\n classes: {\n card,\n root,\n settingsTabs,\n contentBody,\n formControl,\n authenticationMethodWrapper,\n authenticationMethodLabel,\n authenticationMethodSelect,\n fontSizeH1\n },\n closable\n } = this.props;\n\n const {\n authentication: { username, password, privateKey, passphrase },\n settingsActiveTab,\n authenticationMethod,\n display: { colorScheme, fontName, fontSize },\n saveConfig\n } = this.state;\n\n return (\n
\n \n \n \n SSH settings\n \n \n \n \n \n {settingsActiveTab === 'authentication' && (\n
\n
\n
\n Method\n
\n \n \n Password\n \n \n Private Key\n \n \n
\n \n \n Username\n \n \n \n {authenticationMethod === 'password' && (\n \n )}\n {authenticationMethod === 'privateKey' && (\n \n \n Private key\n \n \n \n )}\n {authenticationMethod === 'privateKey' && (\n \n )}\n
\n )}\n {settingsActiveTab === 'displaySettings' && (\n
\n \n \n Color scheme\n \n \n \n None\n \n \n black-white\n \n \n gray-black\n \n \n green-black\n \n \n white-black\n \n \n \n \n \n Font name\n \n \n \n \n \n Font size\n \n \n \n
\n )}\n \n }\n label=\"Save Configuration (all configs will be encrypted)\"\n />\n
\n \n \n OK\n \n {closable && (\n \n Close\n \n )}\n \n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(SSHSettings);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport GuacClient from '../GuacClient';\nimport Settings from './Settings';\nimport clientWrapper from './clientWrapper';\nimport { GUAC_CLIENT_STATE_DISCONNECTED } from '../../../constants/guac-constants';\n\n// type SSHTerminalPropTypes = {\n// deviceName: string,\n// token: string,\n// hasConfig: boolean,\n// onSettingsDataReady: (data: any) => void\n// };\n\nconst Client = clientWrapper(GuacClient);\n\nclass SSHTerminal extends React.Component {\n static propTypes = {\n token: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired,\n onSettingsDataReady: PropTypes.func.isRequired,\n hasConfig: PropTypes.bool\n };\n\n constructor(props) {\n super(props);\n this.state = {\n showSettings: props.token === ''\n };\n }\n\n componentDidUpdate(prevProps) {\n const { token: oldToken } = prevProps;\n const { token: newToken } = this.props;\n if (oldToken !== newToken) {\n this.setState({ showSettings: newToken === '' });\n }\n }\n\n onSettingsIconClick = () => {\n this.setState({ showSettings: true });\n };\n\n onSettingCloseClick = () => {\n this.setState({ showSettings: false });\n };\n\n onGuacClientError = () => {\n this.setState({ showSettings: true });\n };\n\n onGuacClientStateChange = state => {\n const { showSettings } = this.state;\n if (state === GUAC_CLIENT_STATE_DISCONNECTED) {\n if (!showSettings) {\n window.close();\n }\n }\n };\n\n render() {\n const { token, onSettingsDataReady, hasConfig } = this.props;\n const { showSettings } = this.state;\n\n if (showSettings) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n}\n\nexport default SSHTerminal;\n","import React from 'react';\n\nimport { Mouse as GuacMouse } from 'apache-guacamole-common-js';\n\nexport default (WrappedComponent: any) => {\n class ClientWrapper extends React.Component<{}, {}> {\n onGuacMouseDownEvent = mouseState => {\n if (mouseState.left) {\n this.mouseLeftKeyDownState = { ...mouseState };\n }\n if (mouseState.right) {\n this.mouseRightKeyDownState = { ...mouseState };\n }\n this.guac.sendMouseState(mouseState);\n };\n\n onGuacMouseUpEvent = mouseState => {\n if (this.mouseLeftKeyDownState) {\n this.mouseLeftKeyDownState = null;\n }\n if (this.mouseRightKeyDownState) {\n if (navigator.clipboard) {\n navigator.clipboard\n .readText()\n .then(text => {\n this.guac.setClipboard(text);\n this.guac.sendMouseState(mouseState);\n })\n .catch(err => {});\n } else {\n this.guac.sendMouseState(mouseState);\n }\n this.mouseRightKeyDownState = null;\n } else {\n this.guac.sendMouseState(mouseState);\n }\n // this.guac.sendMouseState(mouseState);\n };\n\n onGuacMouseMoveEvent = origMoveState => {\n if (navigator.clipboard) {\n this.guac.sendMouseState(origMoveState);\n } else if (this.mouseLeftKeyDownState) {\n const upState = {\n ...origMoveState,\n left: false\n };\n this.guac.sendMouseState(upState);\n // Magic here, don't DELETE these two calls, it don't work with one :)\n this.guac.sendMouseState(this.mouseLeftKeyDownState);\n this.guac.sendMouseState(this.mouseLeftKeyDownState);\n this.guac.sendMouseState({ ...origMoveState, left: true });\n } else {\n this.guac.sendMouseState(origMoveState);\n }\n };\n\n setupGuacMouse() {\n const element = this.guac.getDisplay().getElement();\n\n this.guacMouse = new GuacMouse(element);\n\n this.guacMouse.onmousedown = this.onGuacMouseDownEvent;\n this.guacMouse.onmouseup = this.onGuacMouseUpEvent;\n this.guacMouse.onmousemove = this.onGuacMouseMoveEvent;\n }\n\n onGuacClientReady = guac => {\n this.guac = guac;\n this.setupGuacMouse();\n };\n\n render() {\n return (\n \n );\n }\n }\n\n ClientWrapper.WrappedComponent = WrappedComponent;\n return ClientWrapper;\n};\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\n\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport PasswordField from '../../../components/PasswordField';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100vw',\n height: '100vh'\n },\n card: {\n width: 550,\n maxWidth: 600\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n formControlCheckbox: {\n display: 'block',\n flexDirection: 'column',\n alignItems: 'stretch'\n },\n fontSizeH1: {\n fontSize: '2rem'\n },\n formControlCheckboxHelperText: {\n marginTop: 0,\n marginBottom: 0\n },\n settingsTabs: {\n margin: '25px 0 15px 0'\n },\n contentBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'start',\n height: '270px',\n // paddingTop: '20px',\n overflowY: 'auto',\n marginLeft: -14,\n paddingLeft: 14,\n marginRight: -14,\n paddingRight: 14,\n maxWidth: 534\n },\n subHeader: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n marginTop: '10px',\n alignItems: 'center'\n }\n});\n\nconst performanceFlagsCmps = [\n {\n name: 'enableWallpaper',\n label: 'Enable Wallpaper',\n description:\n 'If checked, enables rendering of the desktop wallpaper. By default, wallpaper will be disabled, such that unnecessary bandwidth need not be spent redrawing the desktop.'\n },\n {\n name: 'enableTheming',\n label: 'Enable Theming',\n description:\n 'If checked, enables use of theming of windows and controls. By default, theming within RDP sessions is disabled.'\n },\n {\n name: 'enableFontSmoothing',\n label: 'Enable Font Smoothing',\n description:\n 'If checked, text will be rendered with smooth edges. Text over RDP is rendered with rough edges by default, as this reduces the number of colors used by text, and thus reduces the bandwidth required for the connection.'\n },\n {\n name: 'enableFullWindowDrag',\n label: 'Enable full window drag',\n description:\n 'If checked, the contents of windows will be displayed as windows are moved. By default, the RDP server will only draw the window border while windows are being dragged.'\n },\n {\n name: 'enableDesktopComposition',\n label: 'Enable desktop composition',\n description:\n 'If checked, graphical effects such as transparent windows and shadows will be allowed. By default, such effects, if available, are disabled.'\n },\n {\n name: 'enableMenuAnimations',\n label: 'Enable menu animations',\n description:\n 'If checked, menu open and close animations will be allowed. Menu animations are disabled by default.'\n }\n];\n\nclass RDPSettings extends React.Component<\n {\n classes: {\n card: string,\n formControl: string,\n root: string,\n contentBody: string,\n settingsTabs: string,\n formControlCheckbox: string,\n formControlCheckboxHelperText: string,\n subHeader: string\n },\n closable: boolean,\n hasConfig: boolean,\n onDataReady: (data: any) => void,\n onCloseClick: () => void\n },\n {\n authentication: {\n username: string,\n password: string,\n privateKey: string,\n passphrase: string\n },\n settingsActiveTab: 'authentication' | 'performanceFlags',\n display: {\n colorScheme: string,\n fontName: string,\n fontSize: string\n },\n performanceFlags: {\n enableWallpaper: boolean,\n enableTheming: boolean,\n enableFontSmoothing: boolean,\n enableFullWindowDrag: boolean,\n enableDesktopComposition: boolean,\n enableMenuAnimations: boolean\n },\n saveConfig: boolean\n }\n> {\n static propTypes = {\n classes: PropTypes.shape({\n card: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired,\n root: PropTypes.string.isRequired,\n contentBody: PropTypes.string.isRequired,\n formControlCheckbox: PropTypes.string.isRequired,\n formControlCheckboxHelperText: PropTypes.string.isRequired,\n settingsTabs: PropTypes.string.isRequired,\n subHeader: PropTypes.string.isRequired\n }).isRequired,\n onDataReady: PropTypes.func.isRequired,\n onCloseClick: PropTypes.func,\n closable: PropTypes.bool,\n hasConfig: PropTypes.bool\n };\n\n constructor(props) {\n super(props);\n this.state = {\n authentication: {\n username: '',\n password: ''\n },\n settingsActiveTab: 'authentication',\n performanceFlags: {\n enableWallpaper: true,\n enableTheming: true,\n enableFontSmoothing: true,\n enableFullWindowDrag: true,\n enableDesktopComposition: true,\n enableMenuAnimations: true\n },\n saveConfig: !!props.hasConfig\n };\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleOKClick();\n break;\n }\n default:\n break;\n }\n };\n\n handleSettingsActiveTabChange = (event, value) => {\n this.setState({\n settingsActiveTab:\n value === 0 ? 'authentication' : 'performanceFlags'\n });\n };\n\n handleUsernameChange = (event: any) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n username: event.target.value\n }\n });\n };\n\n handlePasswordChange = (value: string) => {\n const { authentication } = this.state;\n this.setState({\n authentication: {\n ...authentication,\n password: value\n }\n });\n };\n\n handleSaveConfigChange = event => {\n this.setState({ saveConfig: event.target.checked });\n };\n\n handleOKClick = () => {\n const {\n authentication: { password, username },\n performanceFlags: {\n enableTheming,\n enableMenuAnimations,\n enableFullWindowDrag,\n enableFontSmoothing,\n enableDesktopComposition,\n enableWallpaper\n },\n saveConfig\n } = this.state;\n const { onDataReady } = this.props;\n let args = {\n saveConfig,\n 'enable-wallpaper': enableWallpaper,\n 'enable-theming': enableTheming,\n 'enable-font-smoothing': enableFontSmoothing,\n 'enable-full-window-drag': enableFullWindowDrag,\n 'enable-desktop-composition': enableDesktopComposition,\n 'enable-menu-animations': enableMenuAnimations\n };\n if (username.trim() !== '') {\n args = {\n ...args,\n username\n };\n }\n if (password.trim() !== '') {\n args = {\n ...args,\n password\n };\n }\n\n onDataReady(args);\n };\n\n handleCloseClick = () => {\n const { onCloseClick } = this.props;\n if (onCloseClick) {\n onCloseClick();\n }\n };\n\n handlePerformanceFlagChange = name => event => {\n const { performanceFlags } = this.state;\n this.setState({\n performanceFlags: {\n ...performanceFlags,\n [name]: event.target.checked\n }\n });\n };\n\n renderPerformanceFlagCmp = (performanceFlagCmp, index) => {\n const {\n classes: {\n formControl,\n formControlCheckbox,\n formControlCheckboxHelperText\n }\n } = this.props;\n\n const { performanceFlags } = this.state;\n return (\n \n \n }\n label={performanceFlagCmp.label}\n />\n \n {performanceFlagCmp.description}\n \n \n );\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n colorSchemeInputProps = {\n id: 'rdp-terminal-settings-color-scheme'\n };\n\n fontSizeInputProps = {\n onKeyDown: this.onKeyDown,\n min: 1\n };\n\n render() {\n const {\n classes: { card, root, settingsTabs, contentBody, formControl, fontSizeH1 },\n closable\n } = this.props;\n\n const {\n authentication: { username, password },\n settingsActiveTab,\n saveConfig\n } = this.state;\n\n return (\n
\n \n \n \n RDP settings\n \n \n \n {/* */}\n \n \n {settingsActiveTab === 'authentication' && (\n
\n \n \n Username\n \n \n \n \n
\n )}\n {settingsActiveTab === 'performanceFlags' && (\n
\n {performanceFlagsCmps.map(\n (performanceFlagCmp, index) =>\n this.renderPerformanceFlagCmp(\n performanceFlagCmp,\n index\n )\n )}\n
\n )}\n \n }\n label=\"Save Configuration (all configs will be encrypted)\"\n />\n
\n \n \n OK\n \n {closable && (\n \n Close\n \n )}\n \n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(RDPSettings);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport GuacClient from '../GuacClient';\nimport Settings from './Settings';\n\ntype RDPTerminalPropTypes = {\n deviceName: string,\n token: string,\n onSettingsDataReady: (data: any) => void\n};\n\nclass RDPTerminal extends React.Component<\n RDPTerminalPropTypes,\n {\n showSettings: boolean\n }\n> {\n static propTypes = {\n deviceName: PropTypes.string.isRequired,\n token: PropTypes.string.isRequired,\n onSettingsDataReady: PropTypes.func.isRequired\n };\n\n constructor(props: RDPTerminalPropTypes) {\n super(props);\n this.state = {\n showSettings: props.token === ''\n };\n }\n\n componentDidUpdate(prevProps: RDPTerminalPropTypes) {\n const { token: newToken } = this.props;\n const { token: oldToken } = prevProps;\n if (oldToken !== newToken) {\n this.setState({ showSettings: newToken === '' });\n }\n }\n\n onSettingsIconClick = () => {\n this.setState({ showSettings: true });\n };\n\n onSettingCloseClick = () => {\n this.setState({ showSettings: false });\n };\n\n onGuacClienError = () => {\n this.setState({ showSettings: true });\n };\n\n render() {\n const { token, onSettingsDataReady } = this.props;\n const { showSettings } = this.state;\n if (showSettings) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n}\n\nexport default RDPTerminal;\n","// @flow\nimport React from 'react';\nimport { Route, Switch, withRouter } from 'react-router-dom';\n\nimport WithHelmet from '../WithHelmet';\nimport withToken from './withToken';\nimport withTunnel from './withTunnel';\nimport VNCTerminal from './VNCTerminal';\nimport SSHTerminal from './SSHTerminal';\nimport RDPTerminal from './RDPTerminal';\nimport { MAIN_TITLE } from '../../constants/api-constants';\n\nimport tunnelinVNCTerminalImage from '../../assets/images/tunnelin_vnc.jpg';\nimport tunnelinSSHTerminalImage from '../../assets/images/tunnelin_ssh.jpg';\nimport tunnelinRDPTerminalImage from '../../assets/images/tunnelin_rdp.jpg';\n\nconst VNCTerminalHOC = withTunnel()(\n withToken({\n type: 'vnc',\n defaultSettings: { autoretry: 5 }\n })(VNCTerminal)\n);\nconst SSHTerminalHOC = withTunnel()(withToken({ type: 'ssh' })(SSHTerminal));\n\nconst RDPTerminalHOC = withTunnel()(withToken({ type: 'rdp' })(RDPTerminal));\n\nconst Terminal = () => (\n \n {\n const VNCTerminalWithHelmet = WithHelmet({\n title: `${MAIN_TITLE} VNC to ${deviceName}`,\n applyTitlePrefix: false,\n meta: [\n { name: 'og:url', content: `/terminal/vnc/${deviceId}/${deviceName}` },\n ],\n image: {\n src: tunnelinVNCTerminalImage,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - VNC terminal into ${deviceName}. Our terminals not require any plugins to be installed and they work across all the browsers, giving the best experience.`\n })(VNCTerminalHOC);\n return \n }}\n />\n {\n const SSHTerminalWithHelmet = WithHelmet({\n title: `${MAIN_TITLE} SSH to ${deviceName}`,\n applyTitlePrefix: false,\n meta: [\n { name: 'og:url', content: `/terminal/ssh/${deviceId}/${deviceName}` },\n ],\n image: {\n src: tunnelinSSHTerminalImage,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - SSH terminal into ${deviceName}. Our terminals not require any plugins to be installed and they work across all the browsers, giving the best experience.`\n })(SSHTerminalHOC);\n return \n }}\n />\n {\n const RDPTerminalWithHelmet = WithHelmet({\n title: `${MAIN_TITLE} RDP to ${deviceName}`,\n applyTitlePrefix: false,\n meta: [\n { name: 'og:url', content: `/terminal/rdp/${deviceId}/${deviceName}` },\n ],\n image: {\n src: tunnelinRDPTerminalImage,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - RDP terminal into ${deviceName}. Our terminals not require any plugins to be installed and they work across all the browsers, giving the best experience.`\n })(RDPTerminalHOC);\n return \n }}\n />\n \n);\n\nexport default withRouter(Terminal);\n","// @flow\nimport { api, makePost } from '../utils/http-util';\n\nconst API_URL = {\n HAS_GRAVATAR: () => api`v1/general/has-gravatar`\n};\n\n// eslint-disable-next-line\nexport function hasGravatar(email: string) {\n return makePost(API_URL.HAS_GRAVATAR(), { email }).toPromise();\n}\n","export default (theme: any) => ({\n contentWrap: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n width: '100%'\n },\n avatarWrap: {\n width: '100px'\n },\n infoWrap: {\n flex: '1 1 0%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'space-between'\n },\n column33: {\n flexBasis: '33.33%'\n },\n heading: {\n fontSize: theme.typography.pxToRem(15)\n },\n details: {\n alignItems: 'center'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n }\n});\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Avatar from '@material-ui/core/Avatar';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Divider from '@material-ui/core/Divider';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport { validateUsername } from '../../../utils/validations';\n\nimport { getGravatarUrl } from '../../../utils/user-utils';\nimport { hasGravatar } from '../../../api/general-api';\n\nimport styles from './styles';\n\nimport type { User } from '../../../types/user';\n\nclass GeneralOptions extends Component<\n {\n actions: {\n updateCurrentUser: (data: any) => void\n },\n onCancel: () => void,\n expanded: boolean,\n onExpansionPanelChange: () => void,\n classes: any,\n loggedInUser: User,\n updateLoading: boolean\n },\n {\n profilePic: string,\n user: User,\n error: {\n fullName: string,\n username: string\n }\n }\n> {\n static propTypes = {\n actions: PropTypes.shape({\n updateCurrentUser: PropTypes.func.isRequired\n }).isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n updateLoading: PropTypes.bool.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n profilePic: '',\n error: {\n fullName: '',\n username: ''\n },\n user: {\n ...props.loggedInUser\n }\n };\n }\n\n componentDidMount() {\n this.determineProfilePic();\n }\n\n componentDidUpdate(prevProps) {\n const { loggedInUser } = this.props;\n if (loggedInUser !== prevProps.loggedInUser) {\n this.setState(\n {\n user: loggedInUser,\n error: {\n fullName: '',\n username: ''\n }\n },\n () => {\n this.determineProfilePic();\n }\n );\n }\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSaveButtonClick();\n break;\n }\n default:\n break;\n }\n };\n\n determineProfilePic() {\n const { user } = this.state;\n const { profilePic } = user;\n if (!profilePic) {\n this.setState({ profilePic: '' });\n } else {\n const { type, url } = profilePic;\n if (type === 'gravatar') {\n const { email } = user;\n hasGravatar(email)\n .then(() => {\n this.setState({\n profilePic: getGravatarUrl(email, 200)\n });\n })\n .catch(() => {\n this.setState({ profilePic: '' });\n });\n } else if (url) {\n this.setState({ profilePic: url });\n } else {\n this.setState({ profilePic: '' });\n }\n }\n }\n\n handleFullNameChange = e => {\n const { user } = this.state;\n this.setState({\n user: {\n ...user,\n fullName: e.target.value\n }\n });\n };\n\n handleUsernameChange = e => {\n const { user } = this.state;\n this.setState({\n user: {\n ...user,\n username: e.target.value\n }\n });\n };\n\n validateFields(setToState: boolean = true) {\n const { user } = this.state;\n const { fullName } = user;\n const { username } = user;\n let errors = {\n fullName: '',\n username: ''\n };\n let isValid = true;\n if (fullName.trim() === '') {\n isValid = false;\n errors.fullName = 'Please enter your full name';\n }\n\n const {\n isValid: isValidUserName,\n errors: userNameErrors\n } = validateUsername(username);\n isValid = isValid && isValidUserName;\n errors = {\n ...errors,\n ...userNameErrors\n };\n\n if (setToState && Object.keys(errors).length) {\n this.setState(errors);\n }\n\n return isValid;\n }\n\n handleSaveButtonClick = () => {\n const {\n user: { fullName, username }\n } = this.state;\n const {\n loggedInUser: { fullName: oldFullName, username: oldUsername },\n actions: { updateCurrentUser }\n } = this.props;\n if (this.validateFields()) {\n const data = {};\n if (fullName.trim() !== oldFullName.trim()) {\n data.fullName = fullName.trim();\n }\n if (username.trim() !== oldUsername.trim()) {\n data.username = username.trim();\n }\n if (Object.entries(data).length !== 0) {\n updateCurrentUser(data);\n }\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes,\n updateLoading,\n onCancel,\n expanded,\n onExpansionPanelChange\n } = this.props;\n const { user, profilePic, error } = this.state;\n\n return (\n \n }>\n
\n \n General Options\n \n
\n
\n \n
\n
\n {profilePic ? (\n \n ) : (\n {user.fullName.charAt(0)}\n )}\n
\n
\n \n \n Full Name\n \n \n {error.fullName && (\n \n {error.fullName}\n \n )}\n \n \n \n Username\n \n \n {error.username && (\n \n {error.username}\n \n )}\n \n
\n
\n
\n \n \n \n \n Save\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(GeneralOptions);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport GeneralOptions from '../../../components/Profile/GeneralOptions';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nimport { updateCurrentUser } from '../../../actions/authentication-actions';\n\nimport {\n getLoggedInUser,\n selectUpdateCurrentUserLoading\n} from '../../../selectors/app-selectors';\n\nconst GeneralOptionsHOC = props => ;\n\nGeneralOptionsHOC.propTypes = {\n actions: PropTypes.shape({\n updateCurrentUser: PropTypes.func.isRequired\n }).isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n updateLoading: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser(),\n updateLoading: selectUpdateCurrentUserLoading()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateCurrentUser\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(GeneralOptionsHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { validate as validateEmail } from 'email-validator';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Divider from '@material-ui/core/Divider';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport styles from './styles';\n\nimport type { User } from '../../../types/user';\n\nclass EmailOptions extends Component<\n {\n actions: {\n updateCurrentUser: (data: any) => void\n },\n expanded: boolean,\n onExpansionPanelChange: () => void,\n onCancel: () => void,\n classes: any,\n loggedInUser: User,\n updateLoading: boolean\n },\n {\n user: User,\n error: {\n email: string\n }\n }\n> {\n static propTypes = {\n actions: PropTypes.shape({\n updateCurrentUser: PropTypes.func.isRequired\n }).isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n updateLoading: PropTypes.bool.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n error: {\n email: ''\n },\n user: {\n ...props.loggedInUser\n }\n };\n }\n\n componentDidUpdate(prevProps) {\n const { loggedInUser } = this.props;\n const { loggedInUser: oldLoggedInUser } = prevProps;\n if (loggedInUser !== oldLoggedInUser) {\n this.setState({\n user: loggedInUser,\n error: {\n email: ''\n }\n });\n }\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSaveButtonClick();\n break;\n }\n default:\n break;\n }\n };\n\n handleEmailChange = e => {\n const { user } = this.state;\n this.setState({\n user: {\n ...user,\n email: e.target.value\n }\n });\n };\n\n validateFields(setToState: boolean = true) {\n const { user } = this.state;\n const { email } = user;\n const error = {\n email: ''\n };\n let isValid = true;\n\n if (email.trim() === '') {\n isValid = false;\n error.email = 'Please enter your email';\n } else if (!validateEmail(email)) {\n isValid = false;\n error.email = 'Invalid Email';\n }\n\n if (setToState && Object.keys(error).length) {\n this.setState({ error });\n }\n\n return isValid;\n }\n\n handleSaveButtonClick = () => {\n const {\n user: { email }\n } = this.state;\n const {\n loggedInUser: { email: oldEmail },\n actions: { updateCurrentUser }\n } = this.props;\n if (this.validateFields()) {\n const data = {};\n if (email.trim() !== oldEmail.trim()) {\n data.email = email.trim();\n }\n if (Object.entries(data).length !== 0) {\n updateCurrentUser(data);\n }\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes,\n onCancel,\n updateLoading,\n expanded,\n onExpansionPanelChange\n } = this.props;\n const { user, error } = this.state;\n\n return (\n \n }>\n
\n \n Emails\n \n
\n
\n \n \n \n Primary Email\n \n \n {error.email && (\n {error.email}\n )}\n \n \n \n \n \n \n Save\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(EmailOptions);\n","export default (theme: any) => ({\n paper: {\n width: '600px'\n },\n contentWrap: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch'\n },\n avatarWrap: {\n width: '100px'\n },\n infoWrap: {\n flex: '1 1 0%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'space-between'\n },\n column33: {\n flexBasis: '33.33%'\n },\n heading: {\n fontSize: theme.typography.pxToRem(15)\n },\n secondaryHeading: {\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary\n },\n details: {\n alignItems: 'center'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport EmailOptions from '../../../components/Profile/EmailOptions';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nimport { updateCurrentUser } from '../../../actions/authentication-actions';\n\nimport {\n getLoggedInUser,\n selectUpdateCurrentUserLoading\n} from '../../../selectors/app-selectors';\n\nconst EmailOptionsHOC = props => ;\n\nEmailOptionsHOC.propTypes = {\n actions: PropTypes.shape({\n updateCurrentUser: PropTypes.func.isRequired\n }).isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n updateLoading: PropTypes.bool.isRequired,\n panelProps: PropTypes.object\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser(),\n updateLoading: selectUpdateCurrentUserLoading()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateCurrentUser\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(EmailOptions);\n","// @flow\nimport React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\n\nimport PasswordField from '../PasswordField';\n\nexport default class ChangePasswordForm extends Component<\n {\n onEnter: () => void,\n onChange: ({\n oldPassword: string,\n newPassword: string,\n confirmNewPassword: string\n }) => void,\n type: string,\n isPasswordRequired: boolean\n },\n {\n error: {\n oldPassword: string,\n newPassword: string,\n confirmNewPassword: string\n },\n oldPassword: string,\n newPassword: string,\n confirmNewPassword: string\n }\n> {\n static propTypes = {\n type: PropTypes.string.isRequired,\n isPasswordRequired: PropTypes.bool,\n onEnter: PropTypes.func,\n onChange: PropTypes.func\n };\n\n static defaultProps = {\n isPasswordRequired: true\n };\n\n state = {\n oldPassword: '',\n newPassword: '',\n confirmNewPassword: '',\n error: {\n oldPassword: '',\n newPassword: '',\n confirmNewPassword: ''\n }\n };\n\n handleOldPasswordChange = (value: string) => {\n const { onChange } = this.props;\n this.setState({\n oldPassword: value\n });\n if (onChange) {\n onChange({\n oldPassword: value,\n newPassword: this.state.newPassword,\n confirmNewPassword: this.state.confirmNewPassword\n });\n }\n };\n\n handleNewPasswordChange = (value: string) => {\n const { onChange } = this.props;\n this.setState({\n newPassword: value\n });\n if (onChange) {\n onChange({\n newPassword: value,\n oldPassword: this.state.oldPassword,\n confirmNewPassword: this.state.confirmNewPassword\n });\n }\n };\n\n handleConfirmNewPasswordChange = (value: string) => {\n const { onChange } = this.props;\n this.setState({\n confirmNewPassword: value\n });\n if (onChange) {\n onChange({\n confirmNewPassword: value,\n oldPassword: this.state.oldPassword,\n newPassword: this.state.newPassword\n });\n }\n };\n\n validate = (setToState: boolean = true) => {\n const { oldPassword, newPassword, confirmNewPassword } = this.state;\n const { isPasswordRequired } = this.props;\n const error = {\n oldPassword: '',\n newPassword: '',\n confirmNewPassword: ''\n };\n let isValid = true;\n\n if (isPasswordRequired && oldPassword.trim() === '') {\n isValid = false;\n error.oldPassword = 'Please enter password';\n } else if (isPasswordRequired && oldPassword.length < 8) {\n isValid = false;\n error.oldPassword = 'Passwords should be at least 8 chars';\n }\n\n if (isPasswordRequired && newPassword.trim() === '') {\n isValid = false;\n error.newPassword = 'Please enter password';\n } else if (isPasswordRequired && newPassword.length < 8) {\n isValid = false;\n error.newPassword = 'Passwords should be at least 8 chars';\n }\n\n if (confirmNewPassword !== newPassword) {\n isValid = false;\n error.confirmNewPassword =\n \"Password and confirm password don't match\";\n }\n\n if (setToState && Object.keys(error).length) {\n this.setState({ error });\n }\n return isValid;\n };\n\n render() {\n const { isPasswordRequired, onEnter, type } = this.props;\n const {\n oldPassword,\n newPassword,\n confirmNewPassword,\n error\n } = this.state;\n\n return (\n \n \n \n \n \n );\n }\n}\n","export default (theme: any) => ({\n contentWrap: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'space-between'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n }\n});\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Divider from '@material-ui/core/Divider';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport ChangePasswordForm from '../../ChangePasswordForm';\n\nimport styles from './styles';\n\nclass PasswordOptions extends Component<\n {\n actions: {\n changePassword: ({\n oldPassword: string,\n newPassword: string\n }) => void\n },\n isPasswordRequired: boolean,\n type: string,\n title: string,\n expanded: boolean,\n onExpansionPanelChange: () => void,\n classes: any,\n onCancel: () => void,\n changePasswordLoading: boolean\n },\n {\n password: {\n old: string,\n new: string,\n confirmNew: string\n }\n }\n> {\n static propTypes = {\n actions: PropTypes.shape({\n changePassword: PropTypes.func.isRequired\n }).isRequired,\n isPasswordRequired: PropTypes.bool,\n expanded: PropTypes.bool,\n title: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n changePasswordLoading: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n isPasswordRequired: true\n };\n\n constructor(props) {\n super(props);\n this.state = {\n password: {\n old: '',\n new: '',\n confirmNew: ''\n }\n };\n }\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSaveButtonClick();\n break;\n }\n default:\n break;\n }\n };\n\n validateFields = (setToState: boolean = true) => {\n let isValid = true;\n if (\n this.changePasswordForm &&\n !this.changePasswordForm.validate(setToState)\n ) {\n isValid = false;\n }\n return isValid;\n };\n\n handleSaveButtonClick = () => {\n const { password } = this.state;\n const {\n actions: { changePassword }\n } = this.props;\n if (this.validateFields()) {\n if (password.old !== password.new)\n changePassword({\n oldPassword: password.old,\n newPassword: password.new\n });\n }\n };\n\n changePasswordForm = null;\n\n handleChangePasswordRef = ref => {\n this.changePasswordForm = ref;\n };\n\n handleChangePasswordFormFieldsChange = ({\n oldPassword,\n newPassword,\n confirmNewPassword\n }) => {\n this.setState({\n password: {\n old: oldPassword,\n new: newPassword,\n confirmNew: confirmNewPassword\n }\n });\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const {\n classes,\n onCancel,\n changePasswordLoading,\n expanded,\n onExpansionPanelChange,\n title,\n type,\n isPasswordRequired\n } = this.props;\n\n return (\n \n }>\n
\n \n {title}\n \n
\n
\n \n \n \n \n \n \n \n Save\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(PasswordOptions);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport PasswordOptions from '../../../components/Profile/PasswordOptions';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nimport { changeCurrentUserPassword as changePassword } from '../../../actions/authentication-actions';\n\nimport { selectChangeCurrentUserPasswordLoading } from '../../../selectors/app-selectors';\n\nconst PasswordOptionsHOC = props => ;\n\nPasswordOptionsHOC.propTypes = {\n actions: PropTypes.shape({\n changePassword: PropTypes.func.isRequired\n }).isRequired,\n title: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n changePasswordLoading: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n changePasswordLoading: selectChangeCurrentUserPasswordLoading()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n changePassword\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PasswordOptionsHOC);\n","// @flow\nimport React, { Component } from 'react';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Divider from '@material-ui/core/Divider';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport type { User } from '../../../types/user';\n\nimport styles from './styles';\nclass TwoFactorAuthenticationOptions extends Component<\n {\n actions: {\n toggleTwoFactorAuth: (enabled: boolean) => void,\n regenerateTwoFactorAuthQR: () => void\n },\n loggedInUser: User,\n onCancel: () => void,\n expanded: boolean,\n onExpansionPanelChange: () => void,\n classes: any,\n toggleTwoFactorAuthLoading: boolean,\n regenerateTwoFactorAuthQRLoading: boolean\n },\n {\n enabled: boolean\n }\n> {\n constructor(props) {\n super(props);\n this.state = {\n enabled:\n props.loggedInUser.twoFactorAuth &&\n props.loggedInUser.twoFactorAuth.enabled\n };\n }\n\n render() {\n const {\n classes,\n onCancel,\n expanded,\n onExpansionPanelChange,\n actions: { toggleTwoFactorAuth, regenerateTwoFactorAuthQR },\n loggedInUser,\n toggleTwoFactorAuthLoading,\n regenerateTwoFactorAuthQRLoading\n } = this.props;\n const { enabled } = this.state;\n return (\n \n }>\n
\n \n Two Factor Authentication Options\n \n
\n
\n \n
\n {\n this.setState({\n enabled: e.target.checked\n });\n toggleTwoFactorAuth(e.target.checked);\n }}\n color=\"primary\"\n inputProps={{\n 'aria-label': 'primary checkbox'\n }}\n />\n }\n label={enabled ? 'Disable' : 'Enable'}\n labelPlacement=\"start\"\n />\n {loggedInUser.twoFactorAuth &&\n loggedInUser.twoFactorAuth.qrUrl && (\n <>\n \n \n regenerateTwoFactorAuthQR()\n }\n >\n ReGenerate QR\n \n \n )}\n
\n
\n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(TwoFactorAuthenticationOptions);\n","export default (theme: any) => ({\n twoFactorAuthPanelDetails: {\n display: 'flex',\n flexDirection: 'column',\n margin: '0 auto',\n alignItems: 'center',\n position: 'relative'\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport TwoFactorAuthenticationOptions from '../../../components/Profile/TwoFactorAuthenticationOptions';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nimport {\n regenerateTwoFactorAuthQR,\n toggleTwoFactorAuth\n} from '../../../actions/authentication-actions';\n\nimport {\n selectToggleTwoFactorAuthLoading,\n selectRegenerateTwoFactorAuthQRLoading,\n getLoggedInUser\n} from '../../../selectors/app-selectors';\n\nconst TwoFactorAuthenticationOptionsHOC = props => (\n \n);\n\nTwoFactorAuthenticationOptionsHOC.propTypes = {\n actions: PropTypes.shape({\n toggleTwoFactorAuth: PropTypes.func.isRequired,\n regenerateTwoFactorAuthQR: PropTypes.func.isRequired\n }).isRequired,\n title: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired,\n toggleTwoFactorAuthLoading: PropTypes.bool.isRequired,\n regenerateTwoFactorAuthQRLoading: PropTypes.bool.isRequired,\n loggedInUser: PropTypes.object.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n toggleTwoFactorAuthLoading: selectToggleTwoFactorAuthLoading(),\n regenerateTwoFactorAuthQRLoading: selectRegenerateTwoFactorAuthQRLoading(),\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n toggleTwoFactorAuth,\n regenerateTwoFactorAuthQR\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(TwoFactorAuthenticationOptionsHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport GeneralOptions from '../../containers/Profile/GeneralOptions';\nimport EmailOptions from '../../containers/Profile/EmailOptions';\nimport PasswordOptions from '../../containers/Profile/PasswordOptions';\n\nimport styles from './styles';\nimport TwoFactorAuthenticationOptions from '../../containers/Profile/TwoFactorAuthenticationOptions';\n\nclass Profile extends Component<\n {\n classes: any,\n fullScreen: boolean,\n close: () => void\n },\n {\n expanded:\n | ''\n | 'general'\n | 'email'\n | 'password'\n | 'twoFactorAuthentication'\n }\n> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired\n };\n\n state = {\n expanded: 'general'\n };\n\n onGeneralExpansionPanelChange = (event, expanded) => {\n this.setState({\n expanded: expanded ? 'general' : ''\n });\n };\n\n onEmailExpansionPanelChange = (event, expanded) => {\n this.setState({\n expanded: expanded ? 'email' : ''\n });\n };\n\n onPasswordExpansionPanelChange = (event, expanded) => {\n this.setState({\n expanded: expanded ? 'password' : ''\n });\n };\n\n onTwoFactorAuthenticationChange = (event, expanded) => {\n this.setState({\n expanded: expanded ? `twoFactorAuthentication` : ''\n });\n };\n\n render() {\n const { fullScreen, close, classes } = this.props;\n\n const { expanded } = this.state;\n\n return (\n \n Profile\n \n
\n \n \n \n \n
\n
\n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(Profile));\n","export default () => ({\n paper: {\n width: '600px'\n },\n contentWrap: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n paddingTop: 5\n }\n});\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Divider from '@material-ui/core/Divider';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport styles from './styles';\n\nclass ProxyOptions extends Component<\n {\n updateFixedProxyConfig: (checked: boolean) => any,\n getFixedProxyConfig: () => any,\n expanded: boolean,\n onExpansionPanelChange: () => void,\n classes: any,\n onCancel: () => void\n },\n {\n fixedProxyConfig: boolean,\n updateProxyLoading: boolean\n }\n> {\n static propTypes = {\n updateFixedProxyConfig: PropTypes.func.isRequired,\n getFixedProxyConfig: PropTypes.func.isRequired,\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func,\n onCancel: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n fixedProxyConfig: false,\n updateProxyLoading: false\n };\n props.getFixedProxyConfig().subscribe(option => {\n if (option && option.data && option.data.profileConfigs) {\n this.setState({\n fixedProxyConfig: option.data.profileConfigs.fixedProxy\n });\n }\n });\n }\n\n handleSaveButtonClick = () => {\n const { fixedProxyConfig } = this.state;\n const { updateFixedProxyConfig, onCancel } = this.props;\n this.setState({ updateProxyLoading: true });\n updateFixedProxyConfig(fixedProxyConfig).subscribe(() => {\n this.setState({ updateProxyLoading: false });\n onCancel();\n });\n };\n\n changePasswordForm = null;\n\n handleFixedProxyConfigChange = event => {\n this.setState({ fixedProxyConfig: event.target.checked });\n };\n\n render() {\n const {\n classes,\n onCancel,\n expanded,\n onExpansionPanelChange\n } = this.props;\n const { fixedProxyConfig, updateProxyLoading } = this.state;\n\n return (\n \n }>\n
\n \n Proxy Options\n \n
\n
\n \n \n }\n label=\"Fixed Proxy\"\n />\n \n \n \n \n \n Save\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(ProxyOptions);\n","export default (theme: any) => ({\n contentWrap: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'space-between'\n },\n formControl: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n }\n});\n","// @flow\nimport { api, makeGet, makePatch } from '../utils/http-util';\n\nconst API_URL = {\n UPDATE_FIXED_PROXY_CONFIG: () => api`v1/user-options`,\n GET_FIXED_PROXY_CONFIG: () => api`v1/user-options`\n};\n\n// eslint-disable-next-line\nexport function updateFixedProxyConfig(checked: boolean) {\n return makePatch(API_URL.UPDATE_FIXED_PROXY_CONFIG(), {\n fixedProxy: checked\n });\n}\n\nexport function getFixedProxyConfig() {\n return makeGet(API_URL.GET_FIXED_PROXY_CONFIG());\n}\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ProxyOptions from '../../../components/Settings/ProxyOptions';\n\nimport {\n getFixedProxyConfig,\n updateFixedProxyConfig\n} from '../../../api/user-options-api';\n\nconst ProxyOptionsHOC = (props: any) => (\n \n);\n\nProxyOptionsHOC.propTypes = {\n expanded: PropTypes.bool,\n onExpansionPanelChange: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired\n};\n\nexport default ProxyOptionsHOC;\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport ProxyOptions from '../../containers/Settings/ProxyOptions';\n\nimport styles from './styles';\n\nclass Settings extends Component<\n {\n classes: any,\n fullScreen: boolean,\n close: () => void\n },\n {\n expanded: '' | 'proxy'\n }\n> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired\n };\n\n state = {\n expanded: 'proxy'\n };\n\n onProxyOptionsPanelChange = (event, expanded) => {\n this.setState({\n expanded: expanded ? 'proxy' : ''\n });\n };\n\n render() {\n const { fullScreen, close, classes } = this.props;\n\n const { expanded } = this.state;\n\n return (\n \n Settings\n \n
\n \n
\n
\n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(Settings));\n","export default () => ({\n paper: {\n width: '600px'\n },\n contentWrap: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n paddingTop: 5\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\n\nconst styles = () => ({});\n\nclass About extends React.Component<{\n classes: any,\n fullScreen: boolean,\n close: () => void\n}> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired\n };\n\n onClose = () => {\n const { close } = this.props;\n close();\n };\n\n render() {\n const { fullScreen, close, classes } = this.props;\n return (\n \n About\n \n \n App Version: {process.env.REACT_APP_VERSION}\n \n \n \n \n Close\n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(About));\n","// @flow\nimport { api, makeGet, makePost } from '../utils/http-util';\n\nconst API_URL = {\n GET_ORG: () => api`v1/organizations`,\n ADD_ORG: () => api`v1/admin/organization`,\n UPDATE_ORG_USERS_ACCESS: () => api`v1/organization/access`\n};\n\nexport function getOrganizations() {\n return makeGet(API_URL.GET_ORG());\n}\nexport function createOrganization(data) {\n return makePost(API_URL.ADD_ORG(), data);\n}\nexport function updateOrgUserAccess(data) {\n return makePost(API_URL.UPDATE_ORG_USERS_ACCESS(), data);\n}\n","// @flow\nimport React, { useState } from 'react';\n\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport TextField from '@material-ui/core/es/TextField/TextField';\nimport DialogActions from '@material-ui/core/es/DialogActions/DialogActions';\nimport Button from '@material-ui/core/es/Button/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport PropTypes from 'prop-types';\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap'\n },\n textField: {\n marginLeft: 5,\n marginRight: 5\n },\n dialogActions: {\n padding: '13px 20px',\n margin: 0\n },\n menu: {\n width: 200\n }\n};\nconst AddOrganization = ({ classes, close, onSave }) => {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n\n const handleNameChange = event => {\n setName(event.target.value);\n };\n const handleDescriptionChange = event => {\n setDescription(event.target.value);\n };\n const handleSave = () => {\n close();\n onSave(name, description);\n };\n return (\n \n \n Add Organization\n \n \n
\n \n \n \n \n
\n
\n \n \n \n \n \n );\n};\nAddOrganization.propTypes = {\n classes: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired\n};\nexport default withMobileDialog()(withStyles(styles)(AddOrganization));\n","// eslint-disable-next-line no-unused-vars\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { getLoggedInUser } from '../selectors/app-selectors';\n\nconst Authorities = props => {\n const { children, failback, loggedInUser } = props;\n const authKey = children.props['data-cmpauthkey'];\n const include =\n (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.includes) ||\n [];\n const exclude = (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.excludes) || ['*'];\n const renderComponent =\n (include.includes(authKey) || include.includes('*')) &&\n !(exclude.includes(authKey) || exclude.includes('*'));\n if (renderComponent) {\n return children;\n }\n return failback || null;\n};\n\nAuthorities.propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n failback: PropTypes.node\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nexport const getDefaultRoute = loggedInUser => {\n const possibleRoutes = ['devices', 'tunnels', 'users', 'usage'];\n const include =\n (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.includes) ||\n [];\n const exclude = (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.excludes) || ['*'];\n for (let i = 0; i < possibleRoutes.length; i += 1) {\n // must be synced with constants\n const isRouteAllowed =\n (include.includes(`routes_${possibleRoutes[i]}`) ||\n include.includes('*')) &&\n !(\n exclude.includes(`routes_${possibleRoutes[i]}`) ||\n exclude.includes('*')\n );\n if (isRouteAllowed) {\n return possibleRoutes[i];\n }\n }\n return '';\n};\n\nexport const isComponentAllowed = (key, loggedInUser) => {\n const include =\n (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.includes) ||\n [];\n const exclude = (loggedInUser &&\n loggedInUser.uiConfig &&\n loggedInUser.uiConfig.excludes) || ['*'];\n const isRouteAllowed =\n (include.includes(`${key}`) || include.includes('*')) &&\n !(exclude.includes(`${key}`) || exclude.includes('*'));\n\n if (isRouteAllowed) {\n return true;\n }\n return false;\n};\n\nexport default withRouter(\n connect(\n mapStateToProps,\n null\n )(Authorities)\n);\n","export const DELETE_TUNNEL_ACTION_AUTH = 'delete_tunnel_action';\nexport const EDIT_TUNNEL_ACTION_AUTH = 'edit_tunnel_action';\nexport const ADD_TUNNEL_ACTION_AUTH = 'add_tunnel_action';\nexport const ROUTES_DEVICES_AUTH = 'routes_devices';\nexport const ROUTES_TUNNELS_AUTH = 'routes_tunnels';\nexport const ROUTES_CHANGEDEVICEOWNER_AUTH = 'routes_changedeviceowner';\nexport const ROUTES_USERS_AUTH = 'routes_users';\nexport const ROUTES_USAGE_AUTH = 'routes_usage';\n","// @flow\nimport { api, makeGet, makePost } from '../utils/http-util';\n\nconst API_URL = {\n GET_COUPON: code => api`v1/coupon/${code}`,\n APPLY_COUPON: code => api`v1/coupon/activate/${code}`\n};\n\nexport function getCouponCode(code) {\n return makeGet(API_URL.GET_COUPON(code));\n}\n\nexport function applyCouponCode(code) {\n return makePost(API_URL.APPLY_COUPON(code));\n}\n","// @flow\nimport React, { useState } from 'react';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport PropTypes from 'prop-types';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport { TextField, FormHelperText } from '@material-ui/core';\n\nimport { duration } from 'moment';\nimport { getCouponCode, applyCouponCode } from '../../api/coupon-code';\n\nconst styles = () => ({\n dialogContent: {\n minWidth: 300,\n minHeight: 550\n }\n});\n\nconst CouponCode = ({ classes, fullScreen, close, loggedInUser, actions }) => {\n const codeInfo = (loggedInUser.couponCode || [])[0];\n\n const expiredDate = codeInfo\n ? new Date(new Date() - codeInfo.duration).toLocaleDateString()\n : null;\n const [code, setCode] = useState(codeInfo ? codeInfo.code : '');\n const [durationString, setDurationString] = useState('');\n const [description, setDescription] = useState(\n codeInfo ? codeInfo.description : ''\n );\n const [error, setError] = useState('');\n const disableFields = !!codeInfo;\n\n const onApply = () => {\n applyCouponCode(code).subscribe(\n () => {\n actions.getLoggedInUserAction();\n close();\n },\n () => {\n setError('Invalid Coupon code');\n }\n );\n };\n const validate = async () => {\n getCouponCode(code).subscribe(\n res => {\n setDescription(res.data.description);\n setDurationString(\n duration(res.data.duration, 'milliseconds').humanize()\n );\n setError('');\n },\n () => {\n setError('Invalid Coupon code');\n }\n );\n };\n return (\n \n Add Coupon Code\n {!!error && (\n \n {error}\n \n )}\n \n \n
\n {\n setCode(e.target.value);\n }}\n />\n
\n
\n
\n {!disableFields && (\n \n Validate\n \n )}\n
\n {expiredDate && (\n
\n

Expired date {expiredDate}

\n
\n )}\n {!expiredDate && durationString && (\n
\n

\n After activation code will be valid{' '}\n {durationString}\n

\n
\n )}\n \n
\n

{description}

\n
\n
\n
\n \n \n close()}\n >\n Close\n \n {!disableFields && (\n \n Apply\n \n )}\n \n \n );\n};\nCouponCode.propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n fullScreen: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired\n};\nexport default withMobileDialog()(withStyles(styles)(CouponCode));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Drawer from '@material-ui/core/Drawer';\nimport { withStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport Avatar from '@material-ui/core/Avatar';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport Divider from '@material-ui/core/Divider';\nimport DoneSharpIcon from '@material-ui/icons/DoneSharp';\nimport FormControl from '@material-ui/core/es/FormControl';\nimport InputLabel from '@material-ui/core/es/InputLabel';\nimport Select from '@material-ui/core/es/Select';\nimport Input from '@material-ui/core/es/Input';\nimport { withRouter } from 'react-router';\nimport { Tooltip } from '@material-ui/core';\nimport Profile from '../../Profile';\n\nimport Settings from '../../Settings';\nimport About from '../../About';\n\nimport { getGravatarUrl } from '../../../utils/user-utils';\nimport { hasGravatar } from '../../../api/general-api';\n\nimport styles from './styles';\n\nimport type { User } from '../../../types/user';\nimport { createOrganization } from '../../../api/organization-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport AddOrganization from '../../OrganizationUsers/AddOrganization';\nimport Authorities from '../../../containers/Authorities';\nimport {\n ROUTES_DEVICES_AUTH,\n ROUTES_USERS_AUTH,\n ROUTES_TUNNELS_AUTH,\n ROUTES_USAGE_AUTH\n} from '../../../constants/authorities';\nimport CouponCode from '../../CouponCode';\n\ntype HeaderProps = {\n classes: {\n root: string,\n flexGrow: string,\n selectedList: string,\n toolbar: string,\n purpleAvatar: string,\n avatarButton: string,\n drawerPaper: string,\n drawerHeader: string,\n flex1: string,\n menuButton: string\n },\n loggedInUser: User,\n actions: {\n logout: () => void\n }\n};\nclass OptimizedHeader extends React.Component<\n HeaderProps,\n {\n anchorEl: any,\n profilePic: string,\n modal: string,\n openDrawer: boolean,\n currentMenu: string\n }\n> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n logout: PropTypes.func.isRequired,\n changeOrganization: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n menuTitle: PropTypes.string.isRequired,\n history: PropTypes.shape({\n replace: PropTypes.func.isRequired\n }).isRequired\n };\n\n constructor(props) {\n super(props);\n const currentMenu = props.menuTitle;\n this.state = {\n anchorEl: null,\n profilePic: '',\n modal: '',\n openDrawer: false,\n currentMenu\n };\n }\n\n componentDidMount() {\n const { loggedInUser } = this.props;\n this.determineProfilePic(loggedInUser);\n }\n\n componentDidUpdate(prevProps: HeaderProps) {\n const { loggedInUser, menuTitle } = this.props;\n if (loggedInUser !== prevProps.loggedInUser) {\n this.determineProfilePic(loggedInUser);\n }\n if (prevProps.menuTitle !== menuTitle) {\n this.setState({ currentMenu: menuTitle });\n }\n }\n\n handleAvatarClick = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleAvatarMenuClose = () => {\n this.setState({ anchorEl: null });\n };\n\n handleProfileClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'profile' });\n };\n\n handleSettingsClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'settings' });\n };\n\n handleAddOrganizationClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'addorganization' });\n };\n\n handleUsageClick = () => {\n const { history } = this.props;\n this.handleAvatarMenuClose();\n history.replace('/usage');\n };\n\n handleManageUsersClick = () => {\n const { history } = this.props;\n this.handleAvatarMenuClose();\n history.replace('/users');\n };\n\n handleAboutClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'about' });\n };\n\n handleApplyCouponCodeClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'addCode' });\n };\n\n handleChangeOrgClick = event => {\n const { actions } = this.props;\n actions.changeOrganization({\n organizationId: event.target.value\n });\n };\n\n handleLogoutClick = () => {\n this.handleAvatarMenuClose();\n const {\n actions: { logout }\n } = this.props;\n logout();\n };\n\n handleModalClose = () => {\n this.setState({ modal: '' });\n };\n\n handleDrawerOpen = () => {\n this.setState({ openDrawer: true });\n };\n\n handleDrawerClose = () => {\n this.setState({ openDrawer: false });\n };\n\n handleMainMenuChange = currentMenu => {\n const { history } = this.props;\n if (currentMenu === 'help') {\n window.open('https://tunnelin.com/blog', '_blank');\n }\n history.replace(`/${currentMenu}`);\n this.setState({ currentMenu, openDrawer: false });\n };\n\n addOrganization = (name, description) => {\n const {\n actions: { changeOrganization, setGlobalMessageError }\n } = this.props;\n createOrganization({\n name,\n description\n }).subscribe(\n data => {\n if (data && data.data) {\n changeOrganization({\n organizationId: data.data._id\n });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n determineProfilePic(user) {\n const { profilePic } = user;\n if (!profilePic) {\n this.setState({ profilePic: '' });\n } else {\n const { type, url } = profilePic;\n if (type === 'gravatar') {\n const { email } = user;\n hasGravatar(email)\n .then(({ data }) => {\n if (data) {\n this.setState({\n profilePic: getGravatarUrl(email)\n });\n } else {\n this.setState({ profilePic: '' });\n }\n })\n .catch(() => {\n this.setState({ profilePic: '' });\n });\n } else if (url) {\n this.setState({ profilePic: url });\n } else {\n this.setState({ profilePic: '' });\n }\n }\n }\n\n render() {\n const {\n currentMenu,\n openDrawer,\n anchorEl,\n profilePic,\n modal\n } = this.state;\n const { classes, loggedInUser } = this.props;\n const { fullName, orgs } = loggedInUser;\n const codeInfo = ((loggedInUser.couponCode || [])[0] || {}).name;\n let avatarCmp;\n if (profilePic) {\n avatarCmp = (\n \n \n \n );\n } else {\n avatarCmp = (\n \n \n {fullName.charAt(0)}\n \n \n );\n }\n\n const drawer = (\n \n
\n \n TunnelIn\n \n \n  - {currentMenu}\n \n
\n \n \n \n
\n \n \n this.handleMainMenuChange('devices')}\n >\n Devices\n \n \n \n this.handleMainMenuChange('tunnels')}\n >\n Tunnels\n \n \n this.handleMainMenuChange('help')}>\n Help\n \n \n {!(!loggedInUser || !orgs || orgs.length < 2) && (\n \n \n Organization\n \n f.default)._id}\n onChange={this.handleChangeOrgClick}\n input={}\n >\n {orgs.map(r => (\n \n {r.name}\n \n ))}\n \n \n )}\n \n );\n\n return (\n
\n \n \n \n \n \n \n TunnelIn\n \n \n  - {currentMenu}\n \n
\n {avatarCmp}\n {codeInfo && (\n \n \n \n )}\n \n \n Profile\n \n \n Settings\n \n \n \n Manage users\n \n \n \n \n Add Organization\n \n \n \n \n Usage\n \n \n \n Apply Coupon Code\n {codeInfo && (\n \n \n \n )}\n \n \n About\n \n \n Logout\n \n \n \n {modal === 'profile' && (\n \n )}\n {modal === 'settings' && (\n \n )}\n {modal === 'about' && (\n \n )}\n {modal === 'addCode' && (\n \n )}\n {modal === 'addorganization' && (\n \n )}\n \n {drawer}\n
\n );\n }\n}\n\nexport default withRouter(withStyles(styles)(OptimizedHeader));\n","// @flow\n\nimport deepPurple from '@material-ui/core/colors/deepPurple';\n\nexport default (theme: any) => ({\n root: {\n width: '100vw'\n },\n flexGrow: {\n flex: 1\n // marginLeft: theme.spacing.unit,\n // marginRight: theme.spacing.unit\n },\n selectedList: {\n fontSize: '16px',\n textTransform: 'capitalize'\n },\n toolbar: {\n minHeight: '64px',\n height: '64px',\n paddingLeft: '10px',\n paddingRight: '18px'\n },\n purpleAvatar: {\n margin: 10,\n color: '#fff',\n backgroundColor: deepPurple[500]\n },\n avatarButton: {\n color: '#fff'\n },\n drawerPaper: {\n position: 'relative',\n flex: 1\n },\n drawerHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '0 8px 0 16px',\n minHeight: '64px',\n height: '64px'\n },\n flex1: {\n flex: 1\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport CouponCode from '../../components/CouponCode';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport * as allAction from '../../actions/authentication-actions';\n\nconst CouponCodeHOC = ({ loggedInUser, fullScreen, close, actions }) => (\n \n);\n\nCouponCodeHOC.propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired,\n fullScreen: PropTypes.bool\n};\nconst mapDispatchToProps = wrapActionCreators({\n getLoggedInUserAction: allAction.getLoggedInUser\n});\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(CouponCode);\n","// @flow\nimport React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Tooltip } from '@material-ui/core';\n\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Avatar from '@material-ui/core/Avatar';\nimport DevicesIcon from '@material-ui/icons/Devices';\nimport TunnelIcon from '@material-ui/icons/Looks';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport DoneSharpIcon from '@material-ui/icons/DoneSharp';\nimport FormControl from '@material-ui/core/es/FormControl';\nimport InputLabel from '@material-ui/core/es/InputLabel';\nimport Select from '@material-ui/core/es/Select';\nimport Input from '@material-ui/core/es/Input';\n\nimport Profile from '../Profile';\nimport Settings from '../Settings';\nimport About from '../About';\n\nimport { getGravatarUrl } from '../../utils/user-utils';\nimport { hasGravatar } from '../../api/general-api';\n\nimport styles from './styles';\nimport './index.css';\n\nimport type { User } from '../../types/user';\nimport AddOrganization from '../OrganizationUsers/AddOrganization';\nimport { createOrganization } from '../../api/organization-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport Authorities, { isComponentAllowed } from '../../containers/Authorities';\nimport {\n ROUTES_DEVICES_AUTH,\n ROUTES_TUNNELS_AUTH,\n ROUTES_USERS_AUTH,\n ROUTES_USAGE_AUTH\n} from '../../constants/authorities';\nimport CouponCode from '../../containers/CouponCode';\n\ntype HeaderProps = {\n classes: {\n root: string,\n tabs: string,\n tab: string,\n toolbar: string,\n purpleAvatar: string,\n avatarButton: string\n },\n loggedInUser: User,\n actions: {\n logout: () => void\n },\n handleChange: (value: string) => void,\n activeTabIndex: number | boolean,\n history: { replace: (path: string) => void }\n};\n\nclass Header extends React.Component<\n HeaderProps,\n { anchorEl: any, profilePic: string, modal: string }\n> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n logout: PropTypes.func.isRequired,\n changeOrganization: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n handleChange: PropTypes.func.isRequired,\n activeTabIndex: PropTypes.oneOfType([PropTypes.bool, PropTypes.number])\n .isRequired,\n history: PropTypes.shape({\n replace: PropTypes.func.isRequired\n }).isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n profilePic: '',\n modal: ''\n };\n }\n\n componentDidMount() {\n const { loggedInUser } = this.props;\n this.determineProfilePic(loggedInUser);\n }\n\n componentDidUpdate(prevProps: HeaderProps) {\n const { loggedInUser } = this.props;\n if (loggedInUser !== prevProps.loggedInUser) {\n this.determineProfilePic(loggedInUser);\n }\n }\n\n handleChange = (event, value) => {\n const { handleChange } = this.props;\n handleChange(value);\n };\n\n handleAvatarClick = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleAvatarMenuClose = () => {\n this.setState({ anchorEl: null });\n };\n\n handleProfileClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'profile' });\n };\n\n handleSettingsClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'settings' });\n };\n\n handleManageUsersClick = () => {\n const { history } = this.props;\n this.handleAvatarMenuClose();\n history.replace('/users');\n };\n\n handleAddOrganizationClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'addOrganization' });\n };\n\n handleUsageClick = () => {\n const { history } = this.props;\n this.handleAvatarMenuClose();\n history.replace('/usage');\n };\n\n addOrganization = (name, description) => {\n const {\n actions: { changeOrganization, setGlobalMessageError }\n } = this.props;\n createOrganization({\n name,\n description\n }).subscribe(\n data => {\n if (data && data.data) {\n changeOrganization({\n organizationId: data.data._id\n });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n handleChangeOrgClick = event => {\n const { actions } = this.props;\n actions.changeOrganization({\n organizationId: event.target.value\n });\n };\n\n handleAboutClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'about' });\n };\n\n handleApplyCouponCodeClick = () => {\n this.handleAvatarMenuClose();\n this.setState({ modal: 'addCode' });\n };\n\n handleLogoutClick = () => {\n this.handleAvatarMenuClose();\n const {\n actions: { logout }\n } = this.props;\n logout();\n };\n\n handleModalClose = () => {\n this.setState({ modal: '' });\n };\n\n determineProfilePic(user) {\n const { profilePic } = user;\n if (!profilePic) {\n this.setState({ profilePic: '' });\n } else {\n const { type, url } = profilePic;\n if (type === 'gravatar') {\n const { email } = user;\n hasGravatar(email)\n .then(({ data }) => {\n if (data) {\n this.setState({\n profilePic: getGravatarUrl(email)\n });\n } else {\n this.setState({ profilePic: '' });\n }\n })\n .catch(() => {\n this.setState({ profilePic: '' });\n });\n } else if (url) {\n this.setState({ profilePic: url });\n } else {\n this.setState({ profilePic: '' });\n }\n }\n }\n\n render() {\n const { anchorEl, profilePic, modal } = this.state;\n const { classes, loggedInUser, activeTabIndex } = this.props;\n const { fullName, orgs } = loggedInUser;\n\n const codeInfo = ((loggedInUser.couponCode || [])[0] || {}).name;\n const orgSelector =\n !loggedInUser || !orgs || orgs.length < 2 ? (\n ''\n ) : (\n \n Organization\n f.default)._id}\n onChange={this.handleChangeOrgClick}\n input={}\n >\n {orgs.map(r => (\n \n {r.name !== 'Personal' ||\n r.createdBy === loggedInUser._id\n ? r.name\n : r.description\n ? r.description.replace('Organization', '')\n : r.name}\n \n ))}\n \n \n );\n let avatarCmp;\n if (profilePic) {\n avatarCmp = (\n \n \n \n );\n } else {\n avatarCmp = (\n \n \n {fullName.charAt(0)}\n \n \n );\n }\n\n return (\n \n \n \n TunnelIn\n \n \n {isComponentAllowed(\n ROUTES_DEVICES_AUTH,\n loggedInUser\n ) && (\n \n }\n className={classNames(classes.tab, {\n headerNavTab: true\n })}\n label=\"Devices\"\n />\n )}\n {isComponentAllowed(\n ROUTES_TUNNELS_AUTH,\n loggedInUser\n ) && (\n }\n className={classNames(classes.tab, {\n headerNavTab: true\n })}\n label=\"Tunnels\"\n />\n )}\n\n }\n className={classNames(classes.tab, {\n headerNavTab: true\n })}\n label=\"Help\"\n />\n \n {orgSelector}\n {avatarCmp}\n {codeInfo && (\n \n \n \n )}\n \n \n Profile\n \n \n Settings\n \n \n \n Manage users\n \n \n \n \n Add Organization\n \n \n \n \n Usage\n \n \n \n Apply Coupon Code\n {codeInfo && (\n \n \n \n )}\n \n \n About\n \n \n Logout\n \n \n \n {modal === 'profile' && (\n \n )}\n {modal === 'settings' && (\n \n )}\n {modal === 'about' && }\n {modal === 'addCode' && (\n \n )}\n {modal === 'addOrganization' && (\n \n )}\n \n );\n }\n}\n\nexport default withRouter(withStyles(styles)(Header));\n","// @flow\n\nimport deepPurple from '@material-ui/core/colors/deepPurple';\n\nexport default (theme: any) => ({\n root: {\n width: '100vw'\n },\n tabs: {\n // display: 'flex',\n flex: 1,\n overflowX: 'overlay',\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit\n },\n toolbar: {\n minHeight: '64px',\n height: '64px'\n },\n tab: {\n // '@media (min-width: 600px)': {\n // height: '64px',\n // minHeight: '64px'\n // },\n height: '64px',\n minHeight: '64px',\n minWidth: '130px',\n paddingTop: 0\n },\n purpleAvatar: {\n margin: 10,\n color: '#fff',\n backgroundColor: deepPurple[500]\n },\n avatarButton: {\n color: '#fff'\n }\n});\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport Hidden from '@material-ui/core/Hidden';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport {\n logout,\n changeOrganization\n} from '../../actions/authentication-actions';\nimport OptimizedHeader from '../../components/Header/Optimized';\nimport Header from '../../components/Header';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport type { User } from '../../types/user';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport { isComponentAllowed } from '../Authorities';\nimport {\n ROUTES_DEVICES_AUTH,\n ROUTES_TUNNELS_AUTH\n} from '../../constants/authorities';\n\nclass HeaderHOC extends React.Component<\n {\n loggedInUser: User,\n actions: {\n logout: () => void,\n changeOrganization: () => void,\n setGlobalMessageError: (message: any) => void\n },\n history: { replace: (path: string) => void }\n },\n {}\n> {\n static propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n logout: PropTypes.func.isRequired,\n changeOrganization: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n }),\n history: PropTypes.shape({\n replace: PropTypes.func.isRequired\n }).isRequired\n };\n\n constructor(props) {\n super(props);\n const locationMap = [];\n if (isComponentAllowed(ROUTES_DEVICES_AUTH, props.loggedInUser)) {\n locationMap.push('/devices');\n }\n if (isComponentAllowed(ROUTES_TUNNELS_AUTH, props.loggedInUser)) {\n locationMap.push('/tunnels');\n }\n this.state = {\n locationMap\n };\n }\n\n handleChange = value => {\n const { history } = this.props;\n const { locationMap } = this.state;\n // This is help page\n if (value === 2) {\n window.open('https://tunnelin.com/blog', '_blank');\n }\n\n history.replace(locationMap[value]);\n };\n\n render() {\n const { loggedInUser, actions, history } = this.props;\n const { locationMap } = this.state;\n let activeTabIndex = false;\n let menuTitle = '';\n locationMap.forEach((lc, index) => {\n if (history.location.pathname.indexOf(lc) === 0) {\n activeTabIndex = index;\n menuTitle = lc.substring(1);\n }\n return activeTabIndex !== false;\n });\n if (activeTabIndex === false) {\n if (history.location.pathname.includes('users')) {\n menuTitle = 'Users';\n } else if (history.location.pathname.includes('usage')) {\n menuTitle = 'Usage';\n }\n }\n return (\n
\n \n \n \n \n \n \n
\n );\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n logout,\n changeOrganization,\n setGlobalMessageError\n});\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(HeaderHOC)\n);\n","import { createSelector } from 'reselect';\nimport { find } from 'lodash';\n\nexport const selectLocalState = () => state => state.devices;\n\nexport const selectDevicesStatuses = () =>\n createSelector(\n selectLocalState(),\n ({ statuses }) => statuses\n );\n\nexport const selectDevicesStatusesData = () =>\n createSelector(\n selectDevicesStatuses(),\n ({ data }) => data\n );\n\nexport const selectDevicesStatusesLoading = () =>\n createSelector(\n selectDevicesStatuses(),\n ({ loading }) => loading\n );\n\nexport const selectLoading = () =>\n createSelector(\n selectLocalState(),\n ({ loading }) => loading\n );\n\nexport const getDevicesLoading = () =>\n createSelector(\n selectLoading(),\n ({ get }) => get\n );\n\nexport const addDeviceLoading = () =>\n createSelector(\n selectLoading(),\n ({ add }) => add\n );\n\nexport const updateDeviceLoading = () =>\n createSelector(\n selectLoading(),\n ({ update }) => update\n );\n\nexport const selectError = () =>\n createSelector(\n selectLocalState(),\n ({ error }) => error\n );\n\nexport const getDevicesError = () =>\n createSelector(\n selectError(),\n ({ get }) => get\n );\n\nexport const selectDevices = () =>\n createSelector(\n selectLocalState(),\n selectDevicesStatusesData(),\n ({ data }, statusesData) =>\n data.map(device => {\n const id = device._id.toString();\n const msg = statusesData[id];\n if (msg) {\n let lastPingMessage;\n try {\n lastPingMessage = JSON.parse(msg);\n } catch (e) {\n // eslint-disable-next-line\n console.log(\n `Invalid ping message for device id: ${id}: message ${msg}`\n );\n }\n if (lastPingMessage) {\n return {\n ...device,\n socketData: lastPingMessage\n };\n }\n }\n return device;\n })\n );\n\nexport const getTotalCount = () =>\n createSelector(\n selectLocalState(),\n ({ count }) => count\n );\n\nexport const getLastAddedDeviceId = () =>\n createSelector(\n selectLocalState(),\n ({ lastAddedDeviceId }) => lastAddedDeviceId\n );\n\nexport const getLastAddedDevice = () =>\n createSelector(\n selectDevices(),\n getLastAddedDeviceId(),\n (data, deviceId) => find(data, { _id: deviceId })\n );\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = () => ({\n card: {\n maxWidth: 345,\n width: 345\n },\n media: {\n height: 180,\n backgroundSize: '160px 190px'\n },\n mediaVertical: {\n backgroundSize: '160px 190px'\n },\n mediaHorizontal: {\n backgroundSize: '240px 150px'\n }\n});\n\nconst EmptyLists = ({\n classes,\n messageTitle,\n message,\n buttons,\n image,\n mediaType\n}) => (\n \n \n \n {messageTitle && (\n \n {messageTitle}\n \n )}\n {message && {message}}\n \n {buttons && buttons.length > 0 && {buttons}}\n \n);\n\nEmptyLists.propTypes = {\n classes: PropTypes.object.isRequired,\n messageTitle: PropTypes.string,\n message: PropTypes.string.isRequired,\n image: PropTypes.string.isRequired, // only name of thumbnail if in assets\n buttons: PropTypes.arrayOf(PropTypes.element),\n mediaType: PropTypes.string\n};\n\nEmptyLists.defaultProps = {\n messageTitle: '',\n buttons: []\n};\n\nexport default withStyles(styles)(EmptyLists);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n// import { connect } from 'react-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport AddIcon from '@material-ui/icons/Add';\nimport EmptyLists from '../../components/EmptyLists';\n\nimport image from '../../assets/images/no_device.png';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n height: `calc(100vh - 64px)`,\n justifyContent: 'center',\n alignItems: 'center'\n },\n\n flexGrow: {\n flex: '1 1 auto'\n },\n\n addModalContent: {\n position: 'absolute',\n width: 500,\n top: '50%',\n left: '50%',\n transform: `translate(-50%, -50%)`,\n backgroundColor: '#fff'\n }\n});\n\nclass EmptyDevices extends Component {\n handleAddClick = () => {\n const { onAddDevice } = this.props;\n if (onAddDevice) {\n onAddDevice();\n }\n };\n\n render() {\n const { classes } = this.props;\n\n return (\n
\n ,\n \n \n \n ]}\n message=\"You do not seem to have any devices yet!\"\n messageTitle=\"\"\n image={image}\n />\n
\n );\n }\n}\n\nEmptyDevices.propTypes = {\n classes: PropTypes.object.isRequired,\n onAddDevice: PropTypes.func\n};\n\nexport default withStyles(styles)(EmptyDevices);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n }\n});\n\nconst DeleteModal = ({\n fullScreen,\n close,\n onDelete,\n dialogContextContent,\n yesButtonContent,\n title\n}: {\n fullScreen: boolean,\n close: () => void,\n onDelete: () => void,\n dialogContextContent: any,\n yesButtonContent: any,\n title: any\n}) => (\n \n {title}\n \n {dialogContextContent}\n \n \n \n \n \n \n);\n\nDeleteModal.propTypes = {\n dialogContextContent: PropTypes.node,\n yesButtonContent: PropTypes.node,\n title: PropTypes.node,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired\n};\n\nDeleteModal.defaultProps = {\n title: 'Delete Device',\n dialogContextContent: 'Are you sure you want to delete device?',\n yesButtonContent: 'Delete'\n};\n\nexport default withMobileDialog()(withStyles(styles)(DeleteModal));\n","import React, { useState } from 'react';\nimport { Tooltip, withStyles } from '@material-ui/core';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport PropTypes from 'prop-types';\n\nconst styles = theme => ({\n linuxCommand: {\n fontWeight: 'bold',\n cursor: 'pointer',\n color: theme.palette.primary['500']\n }\n});\nconst ClipboardCopy = ({ text, value, classes: { linuxCommand } }) => {\n const [copied, setCopied] = useState(false);\n const v = value || text;\n return (\n \n setCopied(true)}\n className={linuxCommand}\n >\n {text}\n \n \n );\n};\nClipboardCopy.prototype = {\n text: PropTypes.string.isRequired,\n value: PropTypes.string,\n mobileText: PropTypes.string,\n classes: PropTypes.object.isRequired\n};\nexport default withStyles(styles)(ClipboardCopy);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { Link } from '@material-ui/core';\nimport ClipboardCopy from '../../ClipboardCopy';\nimport { SSH_HELP_URL } from '../../../constants/api-constants';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n },\n colorRed: {\n color: 'red'\n }\n});\n\nconst SSHModal = props => {\n const {\n classes,\n fullScreen,\n close,\n sshConfig: {\n tunnel: {\n engine: { address },\n clientPort\n }\n }\n } = props;\n return (\n \n \n \n Your SSH tunnel to device will be available in few seconds.\n \n
\n \n copy paste to command line (don’t\n forget to replace your username)\n \n \n \n ssh -p {clientPort}{' '}\n \n username\n \n @{address}\n
\n }\n />\n \n
\n \n For manual configuration use following:\n \n \n Address: \n \n \n Port: \n \n
\n \n Click here for additional information about SSH\n configuration.\n \n \n \n \n \n \n );\n};\n\nSSHModal.propTypes = {\n classes: PropTypes.object.isRequired,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n sshConfig: PropTypes.object.isRequired\n};\nexport default withMobileDialog()(withStyles(styles)(SSHModal));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { Link, Tooltip } from '@material-ui/core';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport { BASE_DOMAIN, PROXY_HELP_URL } from '../../../constants/api-constants';\nimport ClipboardCopy from '../../ClipboardCopy';\n\nconst styles = () => ({});\n\nconst ProxyModal = props => {\n const {\n fullScreen,\n close,\n loggedInUser,\n proxyConfig: {\n tunnel: {\n engine: { address },\n clientPort\n }\n }\n } = props;\n return (\n \n \n \n Your proxy tunnel to device will be available in few\n seconds.\n \n
\n \n
\n Proxy auto-config URL\n \n \n \n
\n
\n \n \n \n
\n \n For manual configuration use following:\n \n\n \n Address: \n \n \n Port: \n \n
\n \n Click here for additional information about proxy\n configuration.\n \n
\n \n \n \n
\n );\n};\nProxyModal.propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired,\n proxyConfig: PropTypes.object.isRequired\n};\nexport default withMobileDialog()(withStyles(styles)(ProxyModal));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\n\nimport ProxyModal from '../../../components/Devices/Modal/ProxyModal';\n\nconst ProxyModalHOC = props => ;\nProxyModalHOC.propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n proxyConfig: PropTypes.object.isRequired\n};\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nexport default connect(\n mapStateToProps,\n undefined\n)(ProxyModalHOC);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { Link, Tooltip } from '@material-ui/core';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport ClipboardCopy from '../../ClipboardCopy';\nimport { VNC_HELP_URL } from '../../../constants/api-constants';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n },\n colorRed: {\n color: 'red'\n }\n});\n\nconst VNCModal = props => {\n const {\n fullScreen,\n close,\n vncConfig: {\n tunnel: {\n deviceName,\n engine: { address },\n clientPort\n }\n }\n } = props;\n const buildVNCFile = `Host=${address}:${clientPort}\nQuality=Low\nRelativePtr=0`;\n const href = `data:application/vnc;charset=utf-8,${encodeURIComponent(\n buildVNCFile\n )}`;\n const title = (\n
\n Contains settings for a Virtual Network Computing (VNC) connection\n from one computer to another.\n
\n \n Programs that open VNC files\n \n
\n Windows: UltraVNC,\n TightVNC, RealVNC VNC Personal/Enterprise Edition\n
\n Mac OS: RealVNC VNC\n Enterprise Edition\n
\n Linux: RealVNC VNC\n Enterprise Edition\n
\n );\n return (\n \n \n \n Your VNC tunnel to device will be available in few seconds.\n \n
\n \n
\n Virtual Network Computing Connection file\n \n \n \n
\n
\n \n \n Download settings file (.VNC )\n \n \n
\n \n For manual configuration use following:\n \n \n Address: \n \n \n Port: \n \n
\n \n Click here for additional information about VNC\n configuration.\n \n
\n \n \n \n
\n );\n};\nVNCModal.propTypes = {\n fullScreen: PropTypes.bool,\n close: PropTypes.func,\n vncConfig: PropTypes.object.isRequired\n};\n\nexport default withMobileDialog()(withStyles(styles)(VNCModal));\n","/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\nfunction arrayMatchTransform(array, increment, def) {\n const a = value => {\n let index;\n if (increment === undefined) {\n // eslint-disable-next-line no-param-reassign\n increment = 0;\n }\n if (isNumber(value)) {\n index = value - increment;\n } else {\n index = array.indexOf(value);\n }\n if (index >= 0 && index <= array.length - 1) {\n return index + increment;\n }\n if (isUndefined(def)) {\n return array.length - 1 + increment;\n }\n return def;\n };\n return a;\n}\nconst mappingStructure = {\n address: {\n def: '',\n name: 'full address:s:'\n },\n username: {\n def: ''\n },\n password: {\n def: ''\n },\n deleteCredentialsAfter: {\n def: true\n },\n safeMode: {\n def: false\n },\n autoReconnect: {\n def: true,\n name: 'autoreconnection enabled:i:',\n fn: arrayMatchTransform([false, true])\n },\n fullscreen: {\n def: true,\n name: 'screen mode id:i:',\n fn: arrayMatchTransform([false, true], 1)\n },\n colors: {\n def: 32,\n name: 'session bpp:i:'\n },\n compression: {\n def: true,\n name: 'compression:i:',\n fn: arrayMatchTransform([false, true])\n },\n connectionType: {\n def: 'auto',\n name: 'connection type:i:',\n fn: arrayMatchTransform(\n ['modem', 'low', 'satellite', 'high', 'wan', 'lan', 'auto'],\n 1\n )\n },\n networkAutoDetect: {\n def: true,\n name: 'networkautodetect:i:',\n fn: arrayMatchTransform([false, true])\n },\n bandwidthAutoDetect: {\n def: true,\n name: 'bandwidthautodetect:i:',\n fn: arrayMatchTransform([false, true])\n },\n showWallpaper: {\n def: false,\n name: 'disable wallpaper:i:',\n fn: arrayMatchTransform([true, false])\n },\n fontSmoothing: {\n def: false,\n name: 'allow font smoothing:i:',\n fn: arrayMatchTransform([false, true])\n },\n desktopComposition: {\n def: false,\n name: 'allow desktop composition:i:',\n fn: arrayMatchTransform([false, true])\n },\n showDraggedWindow: {\n def: false,\n name: 'disable full window drag:i:',\n fn: arrayMatchTransform([true, false])\n },\n showMenuAnimations: {\n def: false,\n name: 'disable menu anims:i:',\n fn: arrayMatchTransform([true, false])\n },\n showThemes: {\n def: true,\n name: 'disable themes:i:',\n fn: arrayMatchTransform([true, false])\n },\n showBlinkingCursor: {\n def: true,\n name: 'disable cursor setting:i:',\n fn: arrayMatchTransform([true, false])\n },\n audioPlayMode: {\n def: 'local',\n name: 'audiomode:i:',\n fn: arrayMatchTransform(['local', 'remote', 'none'], 0)\n },\n audioCaptureMode: {\n def: false,\n name: 'audiocapturemode:i:',\n fn: arrayMatchTransform([false, true])\n },\n enableLocalPrinters: {\n def: true,\n name: 'redirectprinters:i:',\n fn: arrayMatchTransform([false, true])\n },\n enableLocalCOMPorts: {\n def: false,\n name: 'redirectcomports:i:',\n fn: arrayMatchTransform([false, true])\n },\n enableSmartCards: {\n def: true,\n name: 'redirectsmartcards:i:',\n fn: arrayMatchTransform([false, true])\n },\n enableClipboard: {\n def: true,\n name: 'redirectclipboard:i:',\n fn: arrayMatchTransform([false, true])\n },\n enablePlugAndPlayDevices: {\n def: '',\n name: 'devicestoredirect:s:'\n },\n enableDrives: {\n def: '',\n name: 'drivestoredirect:s:'\n },\n enablePos: {\n def: false,\n name: 'redirectposdevices:i:',\n fn: arrayMatchTransform([false, true])\n },\n launch: {\n def: '',\n name: 'alternate shell:s:'\n },\n launchWorkingDirectory: {\n def: '',\n name: 'shell working directory:s:'\n }\n};\n\nconst mapping = {};\nfor (const key in mappingStructure) {\n mapping[key] = mappingStructure[key].def;\n if (!mappingStructure[key].fn) {\n mappingStructure[key].fn = value => value;\n }\n}\n\nexport function getRdpFileContent(config) {\n Object.apply(config, mapping);\n let rdpConfigText = '';\n for (const key in config) {\n if (mappingStructure[key].name) {\n rdpConfigText += `${mappingStructure[key].name +\n mappingStructure[key].fn(config[key])}\\n`;\n }\n }\n return rdpConfigText;\n}\n\nexport function buildRdpFile(config) {\n return getRdpFileContent({\n username: undefined,\n password: undefined,\n colors: undefined,\n launch: undefined,\n launchWorkingDirectory: undefined,\n deleteCredentialsAfter: undefined,\n autoReconnect: undefined,\n fullscreen: undefined,\n enableLocalPrinters: undefined,\n enableClipboard: undefined,\n enableDrives: '*',\n ...config\n });\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { Link, Tooltip } from '@material-ui/core';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport { buildRdpFile } from '../../../utils/rdp-config';\nimport ClipboardCopy from '../../ClipboardCopy';\nimport { RDP_HELP_URL } from '../../../constants/api-constants';\n\nconst styles = () => ({});\n\nconst RDPModal = props => {\n const {\n fullScreen,\n close,\n rdpConfig: {\n tunnel: {\n deviceName,\n engine: { address },\n clientPort\n }\n }\n } = props;\n\n const href = `data:application/rdp;charset=utf-8,${encodeURIComponent(\n buildRdpFile({ address: `${address}:${clientPort}` })\n )}`;\n return (\n \n \n \n Your RDP tunnel to device will be available in few seconds.\n \n
\n \n
\n Remote Desktop Connection file\n \n \n \n
\n
\n \n \n Download settings file (.RDP )\n \n \n
\n \n For manual configuration use following:\n \n \n Address: \n \n \n Port: \n \n
\n \n Click here for additional information about RDP\n configuration.\n \n
\n \n \n \n
\n );\n};\n\nRDPModal.propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n rdpConfig: PropTypes.object.isRequired\n};\n\nexport default withMobileDialog()(withStyles(styles)(RDPModal));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Loader from './Loader';\n\nconst styles = () => ({\n root: {\n padding: '10px'\n }\n});\n\nconst LoadingPane = ({ classes, children, loading, wrapperClass }) => {\n if (loading) {\n return (\n
\n \n
\n );\n }\n return
{children}
;\n};\n\nLoadingPane.defaultProps = {\n wrapperClass: ''\n};\n\nLoadingPane.propTypes = {\n classes: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n loading: PropTypes.bool.isRequired,\n wrapperClass: PropTypes.string\n};\n\nexport default withStyles(styles)(LoadingPane);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\n// import Typography from '@material-ui/core/Typography';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Button from '@material-ui/core/Button';\nimport Avatar from '@material-ui/core/Avatar';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport AddIcon from '@material-ui/icons/Add';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport { validateEmail } from '../../../utils/validations';\n\nimport LoadingPane from '../../LoadingPane';\n\nimport type { UserDevice } from '../../../types/user-device';\n\nconst styles = theme => ({\n listItemText: {\n color: 'blue'\n },\n listItemTextRemoved: {\n textDecoration: 'line-through',\n color: '#d9d9d9'\n },\n dialogContent: {\n width: '600px'\n },\n formControl: {\n margin: theme.spacing.unit\n }\n});\n\nexport type ShareModalPropTypes = {\n classes: {\n listItemTextRemoved: string,\n listItemText: string,\n formControl: string,\n dialogContent: string\n },\n fullScreen: boolean,\n close: () => void,\n deviceUsers: UserDevice[],\n deviceUsersLoading: boolean,\n deviceId: string,\n addingOrRemovingUsersToDevice: boolean,\n addOrRemoveUsersToDevice: ({\n id: string,\n emails: string[],\n removedUsers: string[]\n }) => void\n};\n\nclass ShareModal extends Component<\n ShareModalPropTypes,\n {\n removedUsers: string[],\n emailValues: string\n }\n> {\n static propTypes = {\n classes: PropTypes.shape({\n listItemTextRemoved: PropTypes.string.isRequired,\n listItemText: PropTypes.string.isRequired,\n dialogContent: PropTypes.string.isRequired,\n formControl: PropTypes.string.isRequired\n }).isRequired,\n deviceId: PropTypes.string.isRequired,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n addOrRemoveUsersToDevice: PropTypes.func.isRequired,\n deviceUsers: PropTypes.array.isRequired,\n deviceUsersLoading: PropTypes.bool.isRequired,\n addingOrRemovingUsersToDevice: PropTypes.bool.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n removedUsers: [],\n emailValues: ''\n };\n }\n\n componentDidUpdate(prevProps: ShareModalPropTypes) {\n const { deviceUsers: newDeviceUsers } = this.props;\n const { deviceUsers: oldDeviceUsers } = prevProps;\n if (oldDeviceUsers !== newDeviceUsers) {\n this.setState({ removedUsers: [], emailValues: '' });\n }\n }\n\n onSave = () => {\n const emails = this.getEnteredEmails();\n const { removedUsers } = this.state;\n const { addOrRemoveUsersToDevice, deviceId: id } = this.props;\n if (emails.length || removedUsers.length) {\n addOrRemoveUsersToDevice({\n id,\n emails,\n removedUsers\n });\n }\n };\n\n onClose = () => {\n const { close } = this.props;\n close();\n };\n\n onEmailChange = e => {\n this.setState({ emailValues: e.target.value.toLowerCase() });\n };\n\n onToggleUserDeviceIconClick = (userDevice: UserDevice) => {\n const { removedUsers } = this.state;\n const { user } = userDevice;\n const { _id } = user;\n const index = removedUsers.indexOf(_id);\n if (index === -1) {\n this.setState({ removedUsers: [...removedUsers, _id] });\n } else {\n const newUserDevices = [...removedUsers];\n newUserDevices.splice(index, 1);\n this.setState({ removedUsers: newUserDevices });\n }\n };\n\n getEnteredEmails = () => {\n const { emailValues } = this.state;\n return emailValues\n .split(',')\n .map(email => email.trim())\n .filter(email => email !== '');\n };\n\n renderUserListItem = (userDevice: UserDevice) => {\n const {\n classes: { listItemTextRemoved, listItemText }\n } = this.props;\n const {\n user: { _id, fullName },\n device: { owner }\n } = userDevice;\n const { removedUsers } = this.state;\n const isRemoved = removedUsers.indexOf(_id) !== -1;\n\n return (\n \n {fullName.charAt(0)}\n \n {owner === _id ? (\n 'Owner'\n ) : (\n \n \n this.onToggleUserDeviceIconClick(userDevice)\n }\n >\n {isRemoved ? : }\n \n \n )}\n \n );\n };\n\n validateEmails = emails => {\n for (let i = 0; i < emails.length; i += 1) {\n const { isValid } = validateEmail(emails[i]);\n if (!isValid) {\n return isValid;\n }\n }\n return true;\n };\n\n render() {\n const {\n fullScreen,\n close,\n deviceUsers,\n deviceUsersLoading,\n addingOrRemovingUsersToDevice,\n classes\n } = this.props;\n const { emailValues, removedUsers } = this.state;\n const emails = this.getEnteredEmails();\n const canSave =\n (emails.length !== 0 || removedUsers.length !== 0) &&\n !addingOrRemovingUsersToDevice &&\n this.validateEmails(emails);\n return (\n \n \n Share with others\n \n \n Who has access\n \n \n {deviceUsers.map(deviceUser =>\n this.renderUserListItem(deviceUser)\n )}\n \n \n People\n
\n \n \n Email Address\n \n \n {!canSave && emails.length ? (\n \n Not a valid email (emails).\n \n ) : (\n ''\n )}\n \n
\n
\n \n \n Close\n \n \n Save\n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(ShareModal));\n","// @flow\n\nimport { createSelector } from 'reselect';\n\nimport type { InitialState } from '../types/initial-state';\n\nexport const selectLocalState = () => (state: InitialState) =>\n state.userDevices;\n\nexport const selectLoading = () =>\n createSelector(\n selectLocalState(),\n ({ loading }) => loading\n );\n\nexport const selectDeviceUsersLoading = () =>\n createSelector(\n selectLoading(),\n ({ get }) => get\n );\n\nexport const selectDeviceUsersData = () =>\n createSelector(\n selectLocalState(),\n ({ data }) => data\n );\n\nexport const selectUserDeviceRemoveLoading = () =>\n createSelector(\n selectLoading(),\n ({ remove }) => remove\n );\n\nexport const selectUserDeviceAddLoading = () =>\n createSelector(\n selectLoading(),\n ({ add }) => add\n );\n\nexport const selectUserDeviceAddingOrRemoving = () =>\n createSelector(\n selectUserDeviceRemoveLoading(),\n selectUserDeviceAddLoading(),\n (adding, removing) => adding || removing\n );\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport ShareModal from '../../../components/Devices/Modal/ShareModal';\n\nimport {\n getDeviceUsers,\n addOrRemoveUsersToDevice,\n clearDeviceUsers\n} from '../../../actions/user-device-actions';\n\nimport {\n selectDeviceUsersLoading,\n selectDeviceUsersData,\n selectUserDeviceAddingOrRemoving\n} from '../../../selectors/user-device-selectors';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\n\nimport type { UserDevice } from '../../../types/user-device';\n\nclass ShareModelHOC extends Component<\n {\n deviceUsers: UserDevice[],\n deviceId: string,\n deviceUsersLoading: boolean,\n addingOrRemovingUsersToDevice: boolean,\n actions: {\n getDeviceUsers: (deviceId: string) => void,\n addOrRemoveUsersToDevice: () => void\n }\n },\n {}\n> {\n static propTypes = {\n deviceUsers: PropTypes.array.isRequired,\n deviceId: PropTypes.string.isRequired,\n deviceUsersLoading: PropTypes.bool.isRequired,\n addingOrRemovingUsersToDevice: PropTypes.bool.isRequired,\n actions: PropTypes.shape({\n getDeviceUsers: PropTypes.func.isRequired,\n addOrRemoveUsersToDevice: PropTypes.func.isRequired\n }).isRequired\n };\n\n componentDidMount() {\n const {\n actions: { getDeviceUsers },\n deviceId\n } = this.props;\n clearDeviceUsers(deviceId);\n getDeviceUsers(deviceId);\n }\n\n render() {\n const {\n actions: { addOrRemoveUsersToDevice },\n ...rest\n } = this.props;\n return (\n \n );\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n deviceUsersLoading: selectDeviceUsersLoading(),\n deviceUsers: selectDeviceUsersData(),\n addingOrRemovingUsersToDevice: selectUserDeviceAddingOrRemoving()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n getDeviceUsers,\n addOrRemoveUsersToDevice\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ShareModelHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport { validate as validateEmail } from 'email-validator/index';\nimport Checkbox from '@material-ui/core/Checkbox/Checkbox';\n\nconst styles = () => ({\n dialogContent: {\n width: '470px'\n },\n // formControl: {\n // margin: theme.spacing.unit\n // },\n successText: {\n fontSize: 14,\n margin: '10px 0',\n lineHeight: '20px'\n },\n colorGreen: {\n color: '#61bd4f'\n },\n tunnelsToOwnership: {\n display: 'flex',\n flexDirection: 'column',\n margin: 10\n },\n tunnelToOwnershipItem: {\n display: 'flex',\n flexDirection: 'row'\n },\n selectTunnelCheckbox: {\n padding: 0\n },\n selectTunnelName: {\n padding: 5\n },\n actionsWrapper: {\n marginRight: 16,\n marginLeft: 16\n }\n});\n\nclass ChangeDeviceOwnerModal extends Component<\n {\n classes: {\n formControl: string,\n actionsWrapper: string,\n dialogContent: string,\n successText: string,\n colorGreen: string\n },\n close: () => void,\n handleChangeDeviceOwner: (email: string) => void,\n changeDeviceOwnerLoading: boolean,\n changeDeviceOwnerSuccess: string,\n tunnels: any[],\n getTunnelsError: string,\n getTunnelsLoading: boolean\n },\n {\n email: string,\n emailError: string,\n tunnelsToMove: any[]\n }\n> {\n state = {\n email: '',\n emailError: '',\n tunnelsToMove: []\n };\n\n handleChangeOwner = () => {\n const { email, tunnelsToMove } = this.state;\n const { handleChangeDeviceOwner } = this.props;\n if (validateEmail(email)) {\n this.setState({\n emailError: ''\n });\n handleChangeDeviceOwner(email, tunnelsToMove);\n } else {\n this.setState({\n emailError: 'Please Enter a Valid Email'\n });\n }\n };\n\n onClose = () => {\n const { close } = this.props;\n close();\n };\n\n onEmailChange = prop => event => {\n this.setState({ [prop]: event.target.value });\n };\n\n onKeyDown = event => {\n const { email } = this.state;\n if (validateEmail(email)) {\n this.setState({\n emailError: ''\n });\n }\n switch (event.keyCode) {\n case 13: {\n this.handleChangeOwner();\n break;\n }\n default:\n break;\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n addTunnelIdToOwnership = id => {\n const { tunnelsToMove } = this.state;\n this.setState({\n tunnelsToMove: [...tunnelsToMove, id]\n });\n };\n\n removeTunnelIdToOwnership = id => {\n const { tunnelsToMove } = this.state;\n const newIds = [...tunnelsToMove];\n const indexOfRemoved = newIds.indexOf(id);\n if (indexOfRemoved > -1) {\n newIds.splice(indexOfRemoved, 1);\n this.setState({\n tunnelsToMove: newIds\n });\n }\n };\n\n renderTunnelItem = t => {\n const { name, id } = t;\n const { classes } = this.props;\n const { tunnelsToMove } = this.state;\n return (\n
\n -1}\n onChange={event => {\n if (event.target.checked) {\n this.addTunnelIdToOwnership(id);\n } else {\n this.removeTunnelIdToOwnership(id);\n }\n }}\n value={id}\n />\n
{name}
\n
\n );\n };\n\n render() {\n const {\n close,\n classes,\n changeDeviceOwnerLoading,\n changeDeviceOwnerSuccess,\n tunnels,\n getTunnelsError,\n getTunnelsLoading\n } = this.props;\n const { email, emailError } = this.state;\n return (\n \n \n Change Device Owner\n \n \n {!getTunnelsError && (\n
\n \n \n Email Address\n \n \n {emailError && (\n \n {emailError}\n \n )}\n {!!changeDeviceOwnerSuccess && (\n
\n
\n Success!\n
\n New owner needs 4 digit verification\n code below to get the device.
{' '}\n Verification code:{' '}\n \n {changeDeviceOwnerSuccess}\n \n
\n )}\n \n
\n )}\n {!!tunnels.length && !changeDeviceOwnerSuccess && (\n
\n
\n Please Select Tunnels to move with device.\n
\n
\n {tunnels.map(t => this.renderTunnelItem(t))}\n
\n \n NOTE: Not selected tunnels will be deleted once\n new owner accept the device.\n \n
\n )}\n
\n \n \n Close\n \n \n Change Owner\n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(ChangeDeviceOwnerModal));\n","// @flow\nimport React from 'react';\nimport connect from 'react-redux/es/connect/connect';\nimport PropTypes from 'prop-types';\nimport ChangeDeviceOwnerModal from '../../../components/Devices/Modal/ChangeDeviceOwnerModal';\n\nimport { changeDeviceOwner } from '../../../api/device-api';\nimport { getTunnels } from '../../../api/tunnel-api';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport {\n setGlobalMessageError,\n setGlobalMessageSuccess\n} from '../../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\n\nclass ChangeDeviceOwnerModalHOC extends React.Component<\n {\n deviceId: string,\n close: () => void,\n actions: {\n setGlobalMessageError: any,\n setGlobalMessageSuccess: any\n }\n },\n {\n tunnels?: any[],\n changeDeviceOwnerLoading: boolean,\n changeDeviceOwnerSuccess: string,\n getTunnelsLoading: boolean,\n getTunnelsError: string\n }\n> {\n state = {\n tunnels: [],\n changeDeviceOwnerLoading: false,\n changeDeviceOwnerSuccess: '',\n getTunnelsLoading: false,\n getTunnelsError: ''\n };\n\n componentDidMount() {\n this.doGetTunnels('');\n }\n\n doGetTunnels = () => {\n const {\n deviceId,\n actions: { setGlobalMessageError }\n } = this.props;\n const filters = [\n {\n property: 'deviceId',\n values: [deviceId]\n }\n ];\n this.setState({ getTunnelsLoading: true });\n getTunnels(null, filters).subscribe(\n tunnels => {\n this.setState({\n tunnels: tunnels.data.tunnels,\n getTunnelsError: '',\n getTunnelsLoading: false\n });\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({\n getTunnelsError: message,\n getTunnelsLoading: false\n });\n }\n );\n };\n\n handleChangeDeviceOwner = (email: string, tunnelsToMove: string[]) => {\n const {\n deviceId,\n actions: { setGlobalMessageError, setGlobalMessageSuccess }\n } = this.props;\n this.setState({\n changeDeviceOwnerLoading: true,\n changeDeviceOwnerSuccess: ''\n });\n changeDeviceOwner(deviceId, email, tunnelsToMove).subscribe(\n verificationKey => {\n const message = (\n
\n
Owner changed successfully!
\n New owner needs 4 digit verification code below to get\n the device.
Verification code:{' '}\n {verificationKey.data}\n
\n );\n setGlobalMessageSuccess(message);\n this.setState({\n changeDeviceOwnerLoading: false,\n changeDeviceOwnerSuccess: verificationKey.data\n });\n },\n err => {\n let message = 'Something went wrong';\n if (err) {\n message = parseErrorMessage(err);\n }\n setGlobalMessageError(constructGlobalErrorMessage(message));\n this.setState({\n changeDeviceOwnerLoading: false\n });\n }\n );\n };\n\n render() {\n const {\n changeDeviceOwnerLoading,\n changeDeviceOwnerSuccess,\n tunnels,\n getTunnelsError,\n getTunnelsLoading\n } = this.state;\n const { close } = this.props;\n return (\n \n );\n }\n}\n\nChangeDeviceOwnerModalHOC.propTypes = {\n deviceId: PropTypes.string,\n close: PropTypes.func,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired,\n setGlobalMessageSuccess: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError,\n setGlobalMessageSuccess\n});\n\nexport default connect(\n null,\n mapDispatchToProps\n)(ChangeDeviceOwnerModalHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Menu from '@material-ui/core/Menu';\nimport ArrowDropDown from '@material-ui/icons/ArrowDropDown';\n\nimport styles from './styles';\n\nclass SplitButton extends Component<\n {\n classes: {\n buttonCls: string,\n buttonWrapper: string\n },\n label: any,\n color: string,\n disabled: boolean,\n size: string,\n variant: string,\n menuItems: any,\n linkTo: string\n },\n {\n anchorEl: any\n }\n> {\n static propTypes = {\n label: PropTypes.node,\n color: PropTypes.string,\n linkTo: PropTypes.string,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n size: PropTypes.string,\n variant: PropTypes.string,\n menuItems: PropTypes.array,\n classes: PropTypes.shape({\n buttonCls: PropTypes.string,\n buttonWrapper: PropTypes.string\n }).isRequired\n };\n\n static defaultProps = {\n label: '',\n linkTo: '',\n color: 'primary',\n disabled: false,\n size: 'small',\n variant: 'text',\n menuItems: []\n };\n\n state = {\n anchorEl: null\n };\n\n onArrowClick = event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({\n anchorEl: event.currentTarget\n });\n };\n\n handleClose = () => {\n this.setState({\n anchorEl: null\n });\n };\n\n render() {\n const {\n label,\n disabled,\n color,\n size,\n variant,\n menuItems,\n linkTo,\n onClick,\n classes: { buttonCls, buttonWrapper }\n } = this.props;\n const { anchorEl } = this.state;\n return (\n
\n
\n \n {label}\n \n \n
\n \n {menuItems.map(menuItem => menuItem)}\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(SplitButton);\n","// @flow\n\nexport default (theme: any) => ({\n buttonCls: {\n margin: 0\n },\n buttonWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n});\n","import { isValidTunnelName, isValidLocalPort } from './validations';\n\nexport const validateNameField = name => {\n let nameError = '';\n if (!name || !name.trim()) {\n nameError = 'Please enter Tunnel name';\n } else if (!isValidTunnelName(name)) {\n nameError =\n 'Tunnel name should be only numbers, letters, \"-\" and \"_\".';\n }\n return nameError;\n};\n\nexport const validateDeviceField = deviceId =>\n deviceId ? '' : 'Please select device';\nexport const validateTypeField = type => (type ? '' : 'Please select type');\nexport const validateLocalPortField = localPort => {\n let localPortError = '';\n if (!localPort && localPort !== 0) {\n localPortError = 'Please enter local port';\n } else if (!isValidLocalPort(localPort)) {\n localPortError = 'Local port should be integer between 0 and 65535';\n }\n return localPortError;\n};\nexport const validateIpAddress = value => {\n const regExp = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))?$/;\n return regExp.test(value);\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport StarIcon from '@material-ui/icons/StarTwoTone';\n\nconst styles = () => ({\n root: {\n width: 24,\n cursor: 'pointer',\n color: '#7F7F7F'\n },\n active: {\n color: '#9c27b0'\n }\n});\n\nfunction Star(props) {\n const { classes, active, onChange } = props;\n\n function handleClick() {\n if (onChange) {\n onChange();\n }\n }\n\n return (\n \n );\n}\nStar.propTypes = {\n classes: PropTypes.object.isRequired,\n active: PropTypes.bool,\n onChange: PropTypes.func\n};\n\nexport default withStyles(styles)(Star);\n","import React, { useState, useEffect } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport connect from 'react-redux/es/connect/connect';\nimport { createStructuredSelector } from 'reselect';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport LinkIcon from '@material-ui/icons/Link';\nimport EditIcon from '@material-ui/icons/Edit';\nimport StartIcon from '@material-ui/icons/PlayArrow';\nimport StopIcon from '@material-ui/icons/Stop';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { Button, IconButton } from '@material-ui/core';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport Star from '../../shared/Star';\nimport Authorities from '../../../containers/Authorities';\nimport {\n DELETE_TUNNEL_ACTION_AUTH,\n EDIT_TUNNEL_ACTION_AUTH\n} from '../../../constants/authorities';\nimport { stopTunnel, openTunnel } from '../../../api/tunnel-api';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport { MQTT_ENV } from '../../../constants/api-constants';\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\nimport {\n removeListener,\n addListener,\n subscribeToTopic\n} from '../../../utils/mqtt';\n\nconst styles = () => ({\n wrapper: {\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n borderBottom: '1px dashed #ccc'\n },\n localPort: {\n width: 130,\n margin: '0 5px'\n },\n actions: {\n width: 192,\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row-reverse'\n },\n urls: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'baseline'\n },\n url: {\n textTransform: 'none'\n },\n tunnelActionIcon: {\n color: '#9c27b0'\n },\n disabledTunnelActionIcon: {\n color: '#ecb4f5'\n },\n circularProgress: {\n marginTop: 10,\n marginRight: 14\n }\n});\nconst HttpTunnelItem = ({\n classes,\n loggedInUser,\n tunnel,\n tunnel: {\n id,\n dashUrl,\n favourite,\n slashUrl,\n localPort,\n status: initialStatus,\n deviceId\n },\n tunnelEdit,\n tunnelDelete,\n handleFavouriteClick,\n actions: { setGlobalMessageError },\n doRefresh\n}) => {\n const [doStart, setDoStart] = useState(tunnel.new);\n const [doStop, setDoStop] = useState(false);\n const [\n changeTunnelStateInProcess,\n setChangeTunnelStateInProcess\n ] = useState(false);\n const [status, setStatus] = useState(initialStatus);\n const subscribeToTopicCallback = messageActionName => {\n const fn = (t, message) => {\n const action = JSON.parse(message);\n if (action && action.type === 'NOTIFY_USER') {\n const { payload } = action;\n const { tunnelId, action: actionName } = payload;\n if (\n tunnelId === id &&\n actionName === messageActionName &&\n t === `${MQTT_ENV}/user--${loggedInUser._id}/server`\n ) {\n setChangeTunnelStateInProcess(false);\n removeListener(fn);\n }\n }\n };\n addListener(fn);\n const topic = `user--${loggedInUser._id}/server`;\n subscribeToTopic(topic);\n };\n useEffect(\n () => {\n if (doRefresh === id) {\n setDoStart(true);\n }\n },\n [doRefresh]\n );\n useEffect(\n () => {\n let canceled = false;\n if (doStop) {\n setChangeTunnelStateInProcess(true);\n stopTunnel(id, {\n deviceId,\n type: 'http'\n }).subscribe(\n res => {\n if (!canceled) {\n setDoStop(false);\n setStatus('stopped');\n }\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback('stop_tunnel');\n } else {\n setGlobalMessageError(`Can't stop tunnel`);\n setChangeTunnelStateInProcess(false);\n }\n },\n error => {\n setDoStop(false);\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doStop]\n );\n\n useEffect(\n () => {\n let canceled = false;\n if (doStart) {\n setChangeTunnelStateInProcess(true);\n openTunnel({\n deviceId,\n tunnelId: id,\n options: tunnel.options\n }).subscribe(\n res => {\n if (!canceled) {\n setDoStart(false);\n setStatus('started');\n }\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback('start_tunnel');\n } else {\n setGlobalMessageError(`Can't start tunnel`);\n setChangeTunnelStateInProcess(false);\n }\n },\n error => {\n setDoStart(false);\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doStart]\n );\n return (\n
\n handleFavouriteClick(tunnel)}\n active={favourite}\n />\n
\n {dashUrl && (\n {\n if (\n changeTunnelStateInProcess ||\n status === 'stopped'\n ) {\n return props.children;\n }\n return (\n \n {props.children}\n \n );\n }}\n >\n {!(\n changeTunnelStateInProcess || status === 'stopped'\n ) && (\n \n )}\n {`https://${dashUrl}`}\n \n )}\n {slashUrl && false && (\n (\n \n {props.children}\n \n )}\n >\n \n {`https://${slashUrl}`}\n \n )}\n
\n
\n localhost:  \n {localPort}\n
\n\n
\n \n tunnelDelete(tunnel)}\n size=\"small\"\n >\n \n \n \n \n tunnelEdit(tunnel)}\n size=\"small\"\n >\n \n \n \n {changeTunnelStateInProcess ? (\n
\n \n
\n ) : (\n <>\n {(status === 'stopped' || !status) && (\n setDoStart(true)}\n >\n \n \n )}\n {status === 'started' && (\n <>\n setDoStart(true)}\n >\n \n \n setDoStop(true)}\n >\n \n \n \n )}\n \n )}\n
\n
\n );\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nHttpTunnelItem.propTypes = {\n classes: PropTypes.object.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n tunnel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n deviceId: PropTypes.string.isRequired,\n dashUrl: PropTypes.string.isRequired,\n favourite: PropTypes.bool.isRequired,\n slashUrl: PropTypes.string.isRequired,\n localPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired,\n name: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired\n }).isRequired,\n tunnelEdit: PropTypes.func.isRequired,\n tunnelDelete: PropTypes.func.isRequired,\n handleFavouriteClick: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n doRefresh: PropTypes.string.isRequired\n};\n\nexport default withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(HttpTunnelItem)\n);\n","import React, { useState, useEffect } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport connect from 'react-redux/es/connect/connect';\nimport { createStructuredSelector } from 'reselect';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport LinkIcon from '@material-ui/icons/Link';\nimport EditIcon from '@material-ui/icons/Edit';\nimport StartIcon from '@material-ui/icons/PlayArrow';\nimport StopIcon from '@material-ui/icons/Stop';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { IconButton, Menu, MenuItem } from '@material-ui/core';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport Star from '../../shared/Star';\nimport Authorities from '../../../containers/Authorities';\nimport {\n DELETE_TUNNEL_ACTION_AUTH,\n EDIT_TUNNEL_ACTION_AUTH\n} from '../../../constants/authorities';\nimport { stopTunnel, openTunnel } from '../../../api/tunnel-api';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport { MQTT_ENV } from '../../../constants/api-constants';\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\nimport {\n removeListener,\n addListener,\n subscribeToTopic\n} from '../../../utils/mqtt';\n\nconst styles = () => ({\n wrapper: {\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n borderBottom: '1px dashed #ccc'\n },\n localPort: {\n width: 120,\n margin: '0 5px'\n },\n actions: {\n width: 192,\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row-reverse'\n },\n urls: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'baseline'\n },\n url: {\n textTransform: 'none'\n },\n tunnelActionIcon: {\n color: '#9c27b0'\n },\n disabledTunnelActionIcon: {\n color: '#ecb4f5'\n },\n circularIcon: {\n padding: 12\n }\n});\nconst HttpTunnelItemMobile = ({\n classes,\n loggedInUser,\n tunnel,\n tunnel: {\n id,\n dashUrl,\n favourite,\n slashUrl,\n localPort,\n status: initialStatus,\n deviceId\n },\n tunnelEdit,\n tunnelDelete,\n handleFavouriteClick,\n actions: { setGlobalMessageError },\n doRefresh\n}) => {\n const [doStart, setDoStart] = useState(false);\n const [doStop, setDoStop] = useState(false);\n const [\n changeTunnelStateInProcess,\n setChangeTunnelStateInProcess\n ] = useState(false);\n const [status, setStatus] = useState(initialStatus);\n const [tunnelActionsAnchorEl, setTunnelActionsAnchorEl] = useState(null);\n const subscribeToTopicCallback = messageActionName => {\n const fn = (t, message) => {\n const action = JSON.parse(message);\n if (action && action.type === 'NOTIFY_USER') {\n const { payload } = action;\n const { tunnelId, action: actionName } = payload;\n if (\n tunnelId === id &&\n actionName === messageActionName &&\n t === `${MQTT_ENV}/user--${loggedInUser._id}/server`\n ) {\n setChangeTunnelStateInProcess(false);\n removeListener(fn);\n }\n }\n };\n addListener(fn);\n const topic = `user--${loggedInUser._id}/server`;\n subscribeToTopic(topic);\n };\n useEffect(\n () => {\n if (doRefresh === id) {\n setDoStart(true);\n }\n },\n [doRefresh]\n );\n useEffect(\n () => {\n let canceled = false;\n setTunnelActionsAnchorEl(null);\n if (doStop) {\n setChangeTunnelStateInProcess(true);\n stopTunnel(id, {\n deviceId,\n type: 'http'\n }).subscribe(\n res => {\n if (!canceled) {\n setDoStop(false);\n setStatus('stopped');\n }\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback('stop_tunnel');\n } else {\n setGlobalMessageError(`Can't stop tunnel`);\n setChangeTunnelStateInProcess(false);\n }\n },\n error => {\n setDoStop(false);\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doStop]\n );\n\n useEffect(\n () => {\n let canceled = false;\n setTunnelActionsAnchorEl(null);\n if (doStart) {\n setChangeTunnelStateInProcess(true);\n openTunnel({\n deviceId,\n tunnelId: id,\n options: tunnel.options\n }).subscribe(\n res => {\n if (!canceled) {\n setDoStart(false);\n setStatus('started');\n }\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback('start_tunnel');\n } else {\n setGlobalMessageError(`Can't start tunnel`);\n setChangeTunnelStateInProcess(false);\n }\n },\n error => {\n setDoStart(false);\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doStart]\n );\n const handleMenuClick = event => {\n setTunnelActionsAnchorEl(event.currentTarget);\n };\n\n const handleMenuClose = () => {\n setTunnelActionsAnchorEl(null);\n };\n\n return (\n
\n handleFavouriteClick(tunnel)}\n active={favourite}\n />\n
\n localhost:  \n {localPort}\n
\n
\n
\n
\n {!changeTunnelStateInProcess ? (\n \n \n \n ) : (\n
\n \n
\n )}\n \n {status === 'started' && (\n \n \n \n \n \n )}\n {false && (\n \n \n \n \n \n )}\n {(status === 'stopped' || !status) && (\n setDoStart(true)}>\n \n \n )}\n {status === 'started' && (\n setDoStop(true)}>\n \n \n )}\n {status === 'started' && (\n setDoStart(true)}>\n \n \n )}\n \n tunnelEdit(tunnel)}\n >\n \n \n \n \n tunnelDelete(tunnel)}\n >\n \n \n \n \n
\n
\n
\n );\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nHttpTunnelItemMobile.propTypes = {\n classes: PropTypes.object.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n tunnel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n deviceId: PropTypes.string.isRequired,\n dashUrl: PropTypes.string.isRequired,\n favourite: PropTypes.bool.isRequired,\n slashUrl: PropTypes.string.isRequired,\n localPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired,\n name: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired\n }).isRequired,\n tunnelEdit: PropTypes.func.isRequired,\n tunnelDelete: PropTypes.func.isRequired,\n handleFavouriteClick: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n doRefresh: PropTypes.string.isRequired\n};\n\nexport default withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(HttpTunnelItemMobile)\n);\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport DialogTitle from '@material-ui/core/DialogTitle/DialogTitle';\n\nimport {\n Hidden,\n FormControl,\n InputLabel,\n Input,\n FormHelperText,\n DialogContentText,\n Select,\n MenuItem,\n Checkbox,\n FormControlLabel,\n Tooltip\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport {\n validateNameField,\n validateLocalPortField\n} from '../../../utils/tunnel-validations';\nimport {\n addTunnel,\n getDeviceHttpTunnels,\n updateTunnel,\n deleteCustomTunnel,\n getTunnels\n} from '../../../api/tunnel-api';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport HttpTunnelItem from './HttpTunnelItem';\nimport HttpTunnelItemMobile from './HttpTunnelItemMobile';\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\nimport PasswordField from '../../PasswordField';\n\nconst styles = () => ({\n tunnelsWrapper: {\n flexDirection: 'column',\n display: 'flex',\n maxHeight: '400px',\n padding: '0 24px 24px 24px',\n overflowY: 'auto'\n },\n addFormWrapper: {\n padding: '24px'\n },\n dialog: {\n padding: '0',\n paddingTop: '0!important',\n minHeight: '200px'\n },\n dialogActions: {\n padding: '5px 24px'\n },\n noTunnelsYetDiv: {\n padding: '24px'\n },\n addAndStartButton: {\n margin: '0 4px'\n },\n addButton: {\n margin: '0 4px'\n },\n addTunnelForm: {\n display: 'flex',\n alignItems: 'baseline',\n padding: '5px 24px',\n '@media (max-width: 959px)': {\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center'\n }\n },\n addTunnelHttp: {\n display: 'flex',\n alignItems: 'baseline',\n padding: '5px 24px',\n '@media (max-width: 959px)': {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center'\n }\n },\n formControl: {\n margin: 5,\n flex: 1\n },\n httpUrlsWrapper: {\n marginLeft: 10,\n fontSize: 14,\n display: 'flex',\n flexDirection: 'column',\n color: '#9c27b0'\n }\n});\n\nconst TunnelParamsModal = ({\n loggedInUser,\n fullScreen,\n close,\n deviceId,\n deviceName,\n classes,\n actions: { setGlobalMessageError }\n}) => {\n const [tunnels, setTunnels] = useState([]);\n const [addMode, setAddMode] = useState(false);\n\n const [name, setName] = useState('');\n const [nameError, setNameError] = useState('');\n const [localPort, setLocalPort] = useState('');\n const [localPortError, setLocalPortError] = useState('');\n const [handleHTTP, setHandleHTTP] = useState(false);\n const [tunnelForEdit, setTunnelForEdit] = useState(null);\n const [doAddTunnel, setDoAddTunnel] = useState(false);\n const [doEditTunnel, setDoEditTunnel] = useState(false);\n const [tunnelForDelete, setTunnelForDelete] = useState(null);\n const [doDeleteTunnel, setDoDeleteTunnel] = useState(false);\n const [doRefresh, setDoRefresh] = useState('');\n const [allTunnels, setAllTunnels] = useState([]);\n\n const [tunnelPassword, setTunnelPassword] = useState(\n (((tunnelForEdit || {}).options || {}).auth || {}).password || ''\n );\n const [showPassword, setShowPassword] = useState(!!tunnelPassword);\n useEffect(() => {\n let canceled = false;\n getTunnels().subscribe(\n data => {\n if (data && data.data && data.data.tunnels && !canceled) {\n setAllTunnels(data.data.tunnels);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n\n useEffect(\n () => {\n const val =\n (((tunnelForEdit || {}).options || {}).auth || {}).password ||\n '';\n setTunnelPassword(val);\n setShowPassword(!!val);\n },\n [tunnelForEdit]\n );\n\n const sortTunnels = tunnels =>\n tunnels.sort((t1, t2) => {\n if (\n (t1.favourite && t2.favourite) ||\n (!t1.favourite && !t2.favourite)\n ) {\n return 0;\n }\n if (!t1.favourite && t2.favourite) {\n return 1;\n }\n return -1;\n });\n\n useEffect(() => {\n let canceled = false;\n getDeviceHttpTunnels(deviceId).subscribe(\n data => {\n const tunnels = (data && data.data && data.data.tunnels) || [];\n if (!canceled) {\n setTunnels(sortTunnels(tunnels));\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n\n useEffect(\n () => {\n let canceled = false;\n if (doAddTunnel) {\n const data = {\n name,\n localPort,\n handleHTTP,\n deviceId,\n type: 'http',\n options: {\n auth: {\n password: showPassword ? tunnelPassword : undefined\n },\n firewall: {\n allowConnectionsFrom: 'anywhere',\n connectionsRateLimiting: false,\n initializationTimeLimiting: 0,\n autoClose: false\n }\n }\n };\n addTunnel(data).subscribe(\n data => {\n if (!canceled) {\n setDoAddTunnel(false);\n setAddMode(false);\n const t = data && data.data && data.data.tunnel;\n t.new = true;\n if (t) {\n setTunnels([t, ...tunnels]);\n }\n }\n },\n error => {\n if (!canceled) {\n setDoAddTunnel(false);\n }\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doAddTunnel, name, localPort, handleHTTP]\n );\n\n useEffect(\n () => {\n let canceled = false;\n if (doEditTunnel && tunnelForEdit) {\n const data = {\n name,\n localPort,\n handleHTTP,\n deviceId,\n options: {\n auth: {\n password: showPassword ? tunnelPassword : undefined\n },\n firewall: {\n allowConnectionsFrom: 'anywhere',\n connectionsRateLimiting: false,\n initializationTimeLimiting: 0,\n autoClose: false\n }\n },\n favourite: tunnelForEdit.favourite\n };\n updateTunnel(tunnelForEdit._id, data).subscribe(\n data => {\n if (!canceled) {\n const t = data && data.data;\n setDoEditTunnel(false);\n setTunnelForEdit(null);\n setName('');\n setLocalPort('');\n setHandleHTTP(false);\n if (t) {\n const newTunnels = [...tunnels];\n const oldTunnel = newTunnels.find(\n tun => tun._id === t._id\n );\n const i = newTunnels.indexOf(oldTunnel);\n newTunnels.splice(i, 1, t);\n setTunnels(newTunnels);\n setDoRefresh(t._id);\n setTimeout(() => {\n setDoRefresh('');\n }, 0);\n }\n }\n },\n error => {\n if (!canceled) {\n setDoEditTunnel(false);\n }\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doEditTunnel, name, localPort, handleHTTP, deviceId, tunnelForEdit]\n );\n\n useEffect(\n () => {\n let canceled = false;\n if (doDeleteTunnel && tunnelForDelete) {\n deleteCustomTunnel(tunnelForDelete._id).subscribe(\n () => {\n if (!canceled) {\n const t = tunnelForDelete;\n const newTunnels = [...tunnels];\n const oldTunnel = newTunnels.find(\n tun => tun._id === t._id\n );\n const i = newTunnels.indexOf(oldTunnel);\n newTunnels.splice(i, 1);\n setTunnels(newTunnels);\n setDoDeleteTunnel(false);\n setTunnelForDelete(null);\n }\n },\n error => {\n if (!canceled) {\n setDoDeleteTunnel(false);\n }\n setGlobalMessageError(\n constructGlobalErrorMessage(\n parseErrorMessage(error)\n )\n );\n }\n );\n }\n return () => {\n canceled = true;\n };\n },\n [doDeleteTunnel, tunnelForDelete]\n );\n\n const validateLocalPort = port => {\n let err = validateLocalPortField(port);\n if (!err) {\n const tunnelOnTheSamePort = tunnels.find(\n t =>\n String(t.localPort) === String(port) &&\n (tunnelForEdit ? t._id !== tunnelForEdit._id : true)\n );\n if (tunnelOnTheSamePort) {\n err = `Port \"${port}\" in use by \"${\n tunnelOnTheSamePort.name\n }\" tunnel`;\n }\n }\n return err;\n };\n\n const validateName = name => {\n let err = validateNameField(name);\n if (!err) {\n const httpTunnels = allTunnels.filter(t => t.type === 'http');\n const tunnelWithTheSameName = httpTunnels.find(\n t =>\n t.name === name &&\n (tunnelForEdit ? t._id !== tunnelForEdit._id : true)\n );\n if (tunnelWithTheSameName) {\n err = `This url already assigned to other tunnel.`;\n }\n }\n return err;\n };\n\n const validateForm = () => {\n const nError = validateName(name);\n setNameError(nError);\n const lError = validateLocalPort(localPort);\n setLocalPortError(lError);\n\n return !nError && !lError;\n };\n\n const onAddEditBtnClick = () => {\n if (!tunnelForEdit && !addMode) {\n setAddMode(true);\n return;\n }\n if (addMode) {\n if (validateForm()) {\n setDoAddTunnel(true);\n }\n return;\n }\n if (tunnelForEdit) {\n if (\n validateForm(!nameError && !localPortError && name && localPort)\n ) {\n setDoEditTunnel(true);\n }\n }\n };\n const onNameChange = e => {\n const { value } = e.target;\n setName(value);\n setNameError(validateName(value));\n };\n const onLocalPortChange = e => {\n const { value } = e.target;\n setLocalPort(value);\n setLocalPortError(validateLocalPort(value));\n };\n\n const tunnelEdit = tunnel => {\n setName(tunnel.name);\n setLocalPort(tunnel.localPort);\n setHandleHTTP(tunnel.handleHTTP);\n setTunnelForEdit(tunnel);\n };\n\n const tunnelDelete = tunnel => {\n setTunnelForDelete(tunnel);\n };\n const handleFavouriteClick = tunnel => {\n updateTunnel(tunnel._id, {\n ...tunnel,\n favourite: !tunnel.favourite\n }).subscribe(\n data => {\n const t = data && data.data;\n if (t) {\n const newTunnels = [...tunnels];\n const oldTunnel = newTunnels.find(tun => tun._id === t._id);\n const i = newTunnels.indexOf(oldTunnel);\n newTunnels.splice(i, 1, t);\n setTunnels(newTunnels);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n const renderTunnelItem = tunnel => {\n const { id } = tunnel;\n return (\n \n \n \n \n \n \n \n \n );\n };\n\n const closeConfirmDialog = () => {\n setTunnelForDelete(null);\n };\n\n return (\n \n HTTPS Tunnels of {deviceName}\n \n {tunnels ? (\n
\n {tunnels.length > 0 ? (\n
\n
\n {tunnels.map(tunnel =>\n renderTunnelItem(tunnel)\n )}\n
\n
\n ) : (\n
\n No Tunnels yet\n
\n )}\n {(addMode || tunnelForEdit) && (\n <>\n
\n \n \n Name\n \n \n {nameError && (\n \n {nameError}\n \n )}\n \n \n \n Local Port\n \n \n {localPortError && (\n \n {localPortError}\n \n )}\n \n \n \n Scheme\n \n \n setHandleHTTP(e.target.value)\n }\n autoWidth={true}\n value={handleHTTP}\n className={classes.formControl}\n >\n \n https://\n \n \n https:// + http://\n \n \n \n
\n \n \n \n setShowPassword(\n e.target.checked\n )\n }\n value=\"autoClose\"\n />\n }\n label=\"Set tunnel password\"\n />\n\n \n \n \n
\n {showPassword && (\n \n )}\n
\n \n {name && !nameError ? (\n \n
URLs:
\n \n {`https://${name}-${\n loggedInUser.username\n }.p.tunnelin.com`}\n {false && (\n \n {`https://${\n loggedInUser.username\n }.p.tunnelin.com/${name}`}\n \n )}\n
\n
\n ) : (\n
\n Please type a valid name to generate\n urls\n
\n )}\n
\n \n )}\n \n ) : (\n
\n {\n
\n Loading...\n
\n }\n
\n )}\n {tunnelForDelete && (\n \n Delete Tunnel\n \n \n Are you sure you want to delete tunnel?\n \n \n \n setDoDeleteTunnel(true)}\n >\n Delete\n \n \n Close\n \n \n \n )}\n \n \n \n {addMode || tunnelForEdit ? 'Save' : 'Add Tunnel'}\n \n \n \n \n );\n};\n\nTunnelParamsModal.propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n deviceId: PropTypes.string.isRequired,\n deviceName: PropTypes.string.isRequired,\n classes: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired\n};\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default withMobileDialog()(\n withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(TunnelParamsModal)\n )\n);\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon/SvgIcon';\n\nexport const MacIcon = (\n \n \n \n);\n\nexport const WindowsIcon = (\n \n \n \n);\n\nexport const LinuxIcon = (\n \n \n \n);\n\nexport const LinuxConsoleIcon = (\n \n \n \n \n \n);\n\nexport const IotIcon = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\nexport const RaspberryPiIcon = (\n \n \n \n \n \n);\n","// @flow\n\nimport React from 'react';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport { Link } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport Typography from '@material-ui/core/Typography';\nimport Input from '@material-ui/core/Input';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport SaveIcon from '@material-ui/icons/Save';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\nimport FormControl from '@material-ui/core/FormControl';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport {\n openVNCTunnel,\n openSSHTunnel,\n openRDPTunnel,\n openProxyTunnel\n} from '../../../api/tunnel-api';\nimport DeleteDevice from '../Delete';\nimport SSHModal from '../Modal/SSHModal';\nimport ProxyModal from '../../../containers/Devices/Modal/ProxyModal';\nimport VNCModal from '../Modal/VNCModal';\nimport RDPModal from '../Modal/RDPModal';\nimport ShareModal from '../../../containers/Devices/Modal/ShareModal';\nimport ChangeDeviceOwnerModal from '../../../containers/Devices/Modal/ChangeDeviceOwnerModal';\nimport SplitButton from '../../SplitButton';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../../utils/global-message-util';\nimport TunnelParamsModal from '../Modal/TunnelParamsModal';\nimport { IotIcon, LinuxIcon, MacIcon, WindowsIcon } from '../../../icons';\n\nconst styles = () => ({\n root: {\n width: 340,\n minWidth: 340,\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n cardHeader: {\n padding: '16px 21px 0 16px',\n '&>div:first-child': {\n overflow: 'hidden'\n }\n },\n cardContent: {\n padding: '0 16px 0 16px'\n },\n isDragging: {\n opacity: 0.5\n },\n titleWrapper: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden'\n },\n formControl: {\n marginBottom: 8,\n flex: 1,\n marginRight: 5\n },\n title: {\n marginBottom: 10,\n marginTop: 6,\n marginLeft: -4,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontSize: 22,\n fontWeight: '500',\n flex: 1\n },\n section: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n button: {\n marginLeft: 0\n },\n editIcon: {\n marginTop: 6,\n cursor: 'pointer'\n },\n savelIcon: {\n marginTop: 6,\n cursor: 'pointer'\n },\n cancelIcon: {\n marginTop: 6,\n cursor: 'pointer'\n },\n lastSeenIcon: {\n marginRight: 5,\n marginLeft: -6,\n marginTop: -5,\n marginBottom: -5,\n fontSize: 14\n },\n colorGreen: {\n fill: '#61bd4f'\n },\n colorYellow: {\n fill: '#f2d600'\n },\n colorRed: {\n fill: '#eb5a46'\n },\n textColorRed: {\n color: 'red'\n },\n link: {\n color: 'inherit',\n textDecoration: 'none'\n },\n centerContent: {\n padding: '8px 16px'\n // justifyContent: 'center',\n }\n});\n\ntype DeviceProps = {\n actions: {\n updateDevice: ({ _id: string, name: string }) => void,\n deleteDevice: (_id: string) => void,\n removeCurrentUserFromDevice: (deviceId: string) => void,\n setGlobalMessageError: (message: any) => void\n },\n isUpdating: boolean,\n statusesLoading: boolean,\n classes: {\n isDragging: string,\n root: string,\n cardHeader: string,\n cardContent: string,\n titleWrapper: string,\n title: string,\n section: string,\n formControl: string,\n button: string,\n editIcon: string,\n savelIcon: string,\n cancelIcon: string,\n lastSeenIcon: string,\n colorRed: string,\n colorYellow: string,\n colorGreen: string,\n textColorRed: string,\n link: string,\n centerContent: string\n },\n device: any,\n isDragging: boolean\n};\n\nclass Device extends React.Component<\n DeviceProps,\n {\n cardActionsAnchorEl: any,\n editMode: boolean,\n name: string,\n modal: string,\n sshConfig: any,\n proxyConfig: any,\n vncConfig: any,\n rdpConfig: any\n }\n> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n device: PropTypes.object.isRequired,\n isUpdating: PropTypes.bool.isRequired,\n actions: PropTypes.shape({\n updateDevice: PropTypes.func.isRequired,\n deleteDevice: PropTypes.func.isRequired,\n removeCurrentUserFromDevice: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n isDragging: PropTypes.bool.isRequired,\n statusesLoading: PropTypes.bool.isRequired\n };\n\n reRenderInterval = null;\n\n constructor(props) {\n super(props);\n this.state = {\n cardActionsAnchorEl: null,\n editMode: false,\n modal: '',\n sshConfig: {},\n vncConfig: {},\n rdpConfig: {},\n proxyConfig: {},\n name: props.device.name,\n ipAddressTooltipTitle: 'Click to copy IP address',\n ipAddressTooltipOpenState: false,\n copiedTime: null\n };\n }\n\n componentDidMount() {\n this.reRenderInterval = setInterval(this.onReRender, 20 * 1000);\n }\n\n componentDidUpdate(prevProps) {\n const {\n device: { name: newName }\n } = this.props;\n const {\n device: { name: oldName }\n } = prevProps;\n if (oldName !== newName) {\n this.setState({ name: newName, editMode: false });\n }\n }\n\n componentWillUnmount() {\n if (this.reRenderInterval) {\n clearInterval(this.reRenderInterval);\n }\n }\n\n onReRender = () => {\n this.forceUpdate();\n };\n\n onProxyClick = () => {\n const {\n device,\n actions: { setGlobalMessageError }\n } = this.props;\n const { _id } = device;\n return openProxyTunnel(_id, device).subscribe(\n data => {\n if (data) {\n this.setState({ proxyConfig: data.data, modal: 'proxy' });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n onHTTPClick = () => {\n this.setState({ modal: 'custom-tunnel' });\n };\n\n onShareDeviceClick = () => {\n this.handleMenuClose();\n this.setState({ modal: 'share' });\n };\n\n onEditTitleClick = () => {\n const {\n device: { shared }\n } = this.props;\n if (!shared) {\n this.handleMenuClose();\n this.setState({ editMode: true });\n }\n };\n\n onChangeDeviceOwnerClick = () => {\n this.handleMenuClose();\n this.setState({ modal: 'changeOwner' });\n };\n\n onDeleteDeviceClick = () => {\n this.handleMenuClose();\n this.setState({ modal: 'delete' });\n };\n\n onDeleteDevice = () => {\n const {\n device: { _id },\n actions: { deleteDevice }\n } = this.props;\n deleteDevice(_id);\n this.onCloseDeleteModal();\n };\n\n onUnshareDevice = () => {\n const {\n device: { _id },\n actions: { removeCurrentUserFromDevice }\n } = this.props;\n removeCurrentUserFromDevice(_id);\n this.onCloseDeleteModal();\n };\n\n onCloseModal = () => {\n this.setState({ modal: '' });\n };\n\n onCloseDeleteModal = () => {\n this.setState({ modal: '' });\n };\n\n onCloseSSHModal = () => {\n this.setState({ sshConfig: {}, modal: '' });\n };\n\n onCloseProxyModal = () => {\n this.setState({ proxyConfig: {}, modal: '' });\n };\n\n onCloseVNCModal = () => {\n this.setState({ vncConfig: {}, modal: '' });\n };\n\n onCloseRDPModal = () => {\n this.setState({ rdpConfig: {}, modal: '' });\n };\n\n onCancelUpdateClick = () => {\n const {\n device: { name: oldName },\n isUpdating\n } = this.props;\n if (!isUpdating) {\n this.setState({\n name: oldName,\n editMode: false\n });\n }\n };\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleSave();\n break;\n }\n case 27: {\n this.setState({ editMode: false });\n break;\n }\n default:\n break;\n }\n };\n\n handleNameChange = event => {\n this.setState({ name: event.currentTarget.value });\n };\n\n handleSave = () => {\n const {\n device: { _id, name: oldName },\n actions: { updateDevice },\n isUpdating\n } = this.props;\n const { name } = this.state;\n if (name !== oldName) {\n if (!isUpdating) {\n updateDevice({ _id, name });\n }\n } else {\n this.setState({ editMode: false });\n }\n };\n\n determineAvailability = () => {\n const newDate = Date.now();\n const {\n device: { socketData: { lastSeen } = {} }\n } = this.props;\n\n const diffMs = newDate - lastSeen;\n const diffMins = Math.round(diffMs / (1000 * 60));\n if (diffMins > 10) {\n return 'offline';\n }\n if (diffMins > 3) {\n return 'away';\n }\n return 'online';\n };\n\n handleMenuClick = event => {\n this.setState({ cardActionsAnchorEl: event.currentTarget });\n };\n\n handleMenuClose = () => {\n this.setState({ cardActionsAnchorEl: null });\n };\n\n onOpenSSHConfigurationClick = () => {\n const {\n device,\n actions: { setGlobalMessageError }\n } = this.props;\n const { _id } = device;\n return openSSHTunnel(_id, device).subscribe(\n data => {\n if (data) {\n this.setState({ sshConfig: data.data, modal: 'ssh' });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n getSSHButtonLabel = () => {\n const {\n classes,\n device: { _id, name }\n } = this.props;\n return (\n \n SSH\n \n );\n };\n\n getSSHLinkTo = () => {\n const {\n device: { _id, name }\n } = this.props;\n return `/terminal/ssh/${_id}/${name}`;\n };\n\n getSSHMenuItems = () => {\n const {\n classes,\n device: { _id, name }\n } = this.props;\n return [\n \n See configurations\n ,\n \n \n Try in browser\n \n \n ];\n };\n\n onOpenVNCConfigurationClick = () => {\n const {\n device,\n actions: { setGlobalMessageError }\n } = this.props;\n const { _id } = device;\n return openVNCTunnel(_id, device).subscribe(\n data => {\n if (data) {\n this.setState({ vncConfig: data.data, modal: 'vnc' });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n onOpenRDPConfigurationClick = () => {\n const {\n device,\n actions: { setGlobalMessageError }\n } = this.props;\n const { _id } = device;\n return openRDPTunnel(_id, device).subscribe(\n data => {\n if (data) {\n this.setState({ rdpConfig: data.data, modal: 'rdp' });\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n getVNCButtonLabel = () => {\n const {\n classes,\n device: { _id, name }\n } = this.props;\n return (\n \n VNC\n \n );\n };\n\n getVNCLinkTo = () => {\n const {\n device: { _id, name }\n } = this.props;\n return `/terminal/vnc/${_id}/${name}`;\n };\n\n getRDPLinkTo = () => {\n const {\n device: { _id, name }\n } = this.props;\n return `/terminal/rdp/${_id}/${name}`;\n };\n\n getVNCMenuItems = () => {\n const {\n classes,\n device: { _id, name }\n } = this.props;\n return [\n \n See configurations\n ,\n \n \n Try in browser\n \n \n ];\n };\n\n getRDPMenuItems = () => {\n const {\n classes,\n device: { _id, name }\n } = this.props;\n return [\n \n See configurations\n ,\n \n \n Try in browser\n \n \n ];\n };\n\n onIpAddressTooltipClose = () => {\n this.setState({\n ipAddressTooltipOpenState: false\n });\n };\n\n onIpAddressTooltipOpen = () => {\n const { copiedTime } = this.state;\n let { ipAddressTooltipTitle } = this.state;\n if (Date.now() - copiedTime > 3 * 1000) {\n ipAddressTooltipTitle = 'Click to copy IP address.';\n }\n this.setState({\n ipAddressTooltipOpenState: true,\n ipAddressTooltipTitle\n });\n };\n\n onIpAddressCopied = () => {\n this.setState({\n copiedTime: Date.now(),\n ipAddressTooltipTitle: 'Ip address copied.'\n });\n };\n\n render() {\n const {\n cardActionsAnchorEl,\n editMode,\n name,\n modal,\n sshConfig,\n proxyConfig,\n vncConfig,\n rdpConfig,\n ipAddressTooltipTitle,\n ipAddressTooltipOpenState\n } = this.state;\n const { classes, device, isDragging, statusesLoading } = this.props;\n const {\n socketData: { loadavg, ip, users, time, lastSeen } = {}\n } = device;\n let { socketData: { uptime } = {} } = device;\n if (!Number.isNaN(Number(uptime))) {\n const mins = Math.floor((uptime % (60 * 60)) / 60);\n const minsZero = mins < 10 ? `0${mins}` : `${mins}`;\n const hours = Math.floor((uptime % (60 * 60 * 24)) / (60 * 60));\n const days = Math.floor(uptime / (60 * 60 * 24));\n const daysStr =\n days > 1 ? `${days} days, ` : days === 1 ? '1 day, ' : '';\n const hoursStr = hours > 0 ? `${hours}:` : '';\n const minsStr = hours === 0 ? `${mins} min` : minsZero;\n uptime = (daysStr + hoursStr + minsStr).replace(', 0 min', '');\n }\n let { platform } = device;\n const platformMap = {\n win32: 'windows',\n darwin: 'mac',\n '': 'linux',\n aix: 'linux',\n freebsd: 'linux',\n linux: 'linux',\n openbsd: 'linux',\n sunos: 'linux',\n IOT: 'iot'\n };\n platform = platformMap[platform || 'linux'];\n\n const { shared } = device;\n\n let lastSeenIndicatorClassName = classes.colorRed;\n let disableButton = true;\n let lastSeenIndicatorTooltipMessage = statusesLoading\n ? 'loading statuses... '\n : 'offline';\n\n if (lastSeen) {\n const availabilityStatus = this.determineAvailability();\n\n if (availabilityStatus === 'online') {\n lastSeenIndicatorClassName = classes.colorGreen;\n disableButton = false;\n } else if (availabilityStatus === 'away') {\n lastSeenIndicatorClassName = classes.colorYellow;\n disableButton = true;\n }\n lastSeenIndicatorTooltipMessage = moment(lastSeen).fromNow();\n }\n\n const deleteModal = shared ? (\n \n you will no longer be able to connect to this device\n \n }\n title=\"Unshare Device\"\n yesButtonContent=\"Yes, Unshare\"\n />\n ) : (\n \n );\n\n return (\n \n \n \n \n \n \n ) : (\n
\n \n
\n {platform === 'mac' && MacIcon}\n {platform === 'windows' && WindowsIcon}\n {platform === 'linux' && LinuxIcon}\n {platform === 'iot' && IotIcon}\n \n
\n \n \n {name}\n \n
\n )\n }\n action={\n editMode ? (\n
\n \n {' '}\n
\n ) : (\n
\n \n \n \n \n {!shared && (\n \n Edit Name\n \n )}\n {!shared && (\n \n Change Owner\n \n )}\n \n {shared\n ? 'Un Share with me'\n : 'Delete device'}\n \n {/* {!shared && (\n \n Share\n \n )} */}\n \n
\n )\n }\n />\n \n \n IP Address:\n \n \n \n {ip}\n \n \n \n \n\n \n Load Average: {loadavg}\n \n \n Uptime: {uptime}\n \n \n Logged Users: {users}\n \n \n Server Time: {time}\n \n \n \n {platform !== 'windows' && (\n \n )}\n {platform !== 'windows' && (\n \n )}\n {platform === 'windows' && (\n \n )}\n \n Proxy\n \n \n HTTPS\n \n \n {modal === 'delete' && deleteModal}\n {modal === 'ssh' && (\n \n )}\n {modal === 'proxy' && (\n \n )}\n {modal === 'vnc' && (\n \n )}\n {modal === 'rdp' && (\n \n )}\n {modal === 'custom-tunnel' && (\n \n )}\n {modal === 'share' && (\n \n )}\n {modal === 'changeOwner' && (\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(Device);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\n\nimport { DEVICE_TO_GROUP_MOVE } from '../../../constants/dragging-constants';\n\n/**\n * Implements the drag source contract.\n */\nconst dragSpec = {\n beginDrag(props) {\n return props.device;\n },\n\n canDrag(props) {\n const {\n device: { shared }\n } = props;\n return !shared;\n },\n\n endDrag(props, monitor) {\n if (!monitor.didDrop()) {\n // You can check whether the drop was successful\n // or if the drag ended but nobody handled the drop\n return;\n }\n\n // Read the original dragged item from getItem():\n const device = monitor.getItem();\n\n // You may also read the drop result from the drop target\n // that handled the drop, if it returned an object from\n // its drop() method.\n const group = monitor.getDropResult();\n\n // This is a good place to call some Flux action\n props.onDeviceDropToGroup(device, group);\n }\n};\n\nfunction dragCollect(connect, monitor) {\n return {\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n };\n}\n\nexport default (WrappedComponent: any) => {\n const C = props => {\n const { connectDragSource, isDragging, ...rest } = props;\n return connectDragSource(\n
\n \n
,\n { dropEffect: 'copy' }\n );\n };\n\n C.displayName = `withDragToGroup(${WrappedComponent.displayName ||\n WrappedComponent.name})`;\n C.WrappedComponent = WrappedComponent;\n C.propTypes = {\n connectDragSource: PropTypes.func.isRequired,\n isDragging: PropTypes.bool.isRequired,\n onDeviceDropToGroup: PropTypes.func.isRequired,\n ...WrappedComponent.propTypes\n };\n return DragSource(DEVICE_TO_GROUP_MOVE, dragSpec, dragCollect)(C);\n};\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { updateDeviceLoading } from '../../../selectors/devices-selectors';\nimport { updateDevice, deleteDevice } from '../../../actions/device-actions';\nimport { removeCurrentUserFromDevice } from '../../../actions/user-device-actions';\nimport Device from '../../../components/Devices/Card/Device';\nimport withDragToGroup from '../../../components/Devices/Card/withDragToGroup';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\n\nconst DraggableDevice = withDragToGroup(Device);\n\nconst DeviceCardHOC = ({\n actions,\n device,\n statusesLoading,\n onDeviceDropToGroup,\n isUpdating\n}: {\n actions: {\n updateDevice: ({ _id: string, name: string }) => void,\n deleteDevice: (_id: string) => void,\n removeCurrentUserFromDevice: (deviceId: string) => void,\n setGlobalMessageError: (message: any) => void\n },\n isUpdating: boolean,\n onDeviceDropToGroup: (device: any, group: any) => void,\n device: any\n}) => (\n \n);\n\nDeviceCardHOC.propTypes = {\n actions: PropTypes.shape({\n updateDevice: PropTypes.func.isRequired,\n deleteDevice: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired,\n removeCurrentUserFromDevice: PropTypes.func.isRequired\n }).isRequired,\n device: PropTypes.object.isRequired,\n isUpdating: PropTypes.bool.isRequired,\n onDeviceDropToGroup: PropTypes.func.isRequired,\n statusesLoading: PropTypes.bool.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n updateDeviceLoading: updateDeviceLoading()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateDevice,\n deleteDevice,\n removeCurrentUserFromDevice,\n setGlobalMessageError\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeviceCardHOC);\n","// @flow\n\n// eslint-disable-next-line\nexport const DEVICE_TO_GROUP_MOVE = 'DEVICE_TO_GROUP_MOVE';\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n },\n formControl: {\n width: 180\n }\n});\n\nclass AddDeviceGroup extends Component<\n {\n classes: {\n formControl: string\n },\n fullScreen: boolean,\n close: () => void,\n add: (group: any) => void,\n groupsLength: number\n },\n {\n value: string\n }\n> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n add: PropTypes.func.isRequired,\n groupsLength: PropTypes.number.isRequired\n };\n\n state = {\n value: ''\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n handleChange = event => {\n this.setState({ value: event.target.value });\n };\n\n handleAdd = () => {\n const { value } = this.state;\n const { groupsLength } = this.props;\n if (value && value.trim() !== '') {\n this.props.add({\n name: value,\n order: groupsLength - 1\n });\n this.props.close();\n }\n };\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.handleAdd();\n break;\n }\n default:\n break;\n }\n };\n\n render() {\n const { fullScreen, close, classes } = this.props;\n const { value } = this.state;\n return (\n \n \n \n \n Group Name\n \n \n \n \n \n \n Add\n \n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(AddDeviceGroup));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../../utils/container-util';\n\nimport { addGroup } from '../../../../actions/group-actions';\n\nimport AddDeviceGroup from '../../../../components/Devices/Groups/Add';\n\nconst AddDeviceGroupHOC = ({ close, actions: { addGroup }, groupsLength }) => (\n \n);\n\nAddDeviceGroupHOC.propTypes = {\n close: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n addGroup: PropTypes.func.isRequired\n }).isRequired,\n groupsLength: PropTypes.number.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n addGroup\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AddDeviceGroupHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n }\n});\n\nclass DeleteDeviceGroupModal extends Component<{\n fullScreen: boolean,\n close: () => void,\n group: any,\n actions: {\n deleteGroup: (_id: string) => void\n }\n}> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n group: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n deleteGroup: PropTypes.func.isRequired\n }).isRequired\n };\n\n onDelete = () => {\n const {\n group: { _id },\n actions: { deleteGroup }\n } = this.props;\n deleteGroup(_id);\n };\n\n render() {\n const { fullScreen, close } = this.props;\n return (\n \n Delete Group\n \n \n Are you sure you want to delete group?\n \n \n \n \n Delete\n \n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(DeleteDeviceGroupModal));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../../utils/container-util';\n\nimport { deleteGroup } from '../../../../actions/group-actions';\n\nimport DeleteDeviceGroupModal from '../../../../components/Devices/Groups/Delete';\n\nconst DeleteDeviceGroupHOC = ({\n actions,\n group,\n close\n}: {\n actions: {\n deleteGroup: (_id: string) => void\n },\n group: any,\n close: () => void\n}) => ;\n\nDeleteDeviceGroupHOC.propTypes = {\n close: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n deleteGroup: PropTypes.func.isRequired\n }).isRequired,\n group: PropTypes.object.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n deleteGroup\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeleteDeviceGroupHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nconst styles = () => ({\n formControl: {\n width: 180\n }\n});\n\nclass UpdateDeviceGroupModal extends Component<\n {\n classes: {\n formControl: string\n },\n fullScreen: boolean,\n close: () => void,\n group: any,\n actions: {\n updateGroup: (group: any) => void\n }\n },\n {\n groupName: string\n }\n> {\n constructor(props) {\n super(props);\n this.state = {\n groupName: (props && props.group && props.group.name) || ''\n };\n }\n\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n group: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n updateGroup: PropTypes.func.isRequired\n }).isRequired\n };\n\n onUpdate = () => {\n const {\n group: { _id },\n actions: { updateGroup }\n } = this.props;\n const { groupName } = this.state;\n updateGroup({ _id, name: groupName });\n };\n\n handleChange = event => {\n this.setState({ groupName: event.target.value });\n };\n\n onKeyDown = event => {\n switch (event.keyCode) {\n case 13: {\n this.onUpdate();\n break;\n }\n default:\n break;\n }\n };\n\n inputProps = {\n onKeyDown: this.onKeyDown\n };\n\n render() {\n const { classes, fullScreen, close } = this.props;\n const { groupName } = this.state;\n return (\n \n Update Group\n \n \n \n \n Group Name\n \n \n \n \n \n \n \n Update\n \n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(UpdateDeviceGroupModal));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../../utils/container-util';\n\nimport { updateGroup } from '../../../../actions/group-actions';\n\nimport UpdateDeviceGroupModal from '../../../../components/Devices/Groups/Update';\n\nconst UpdateDeviceGroupHOC = ({\n actions,\n group,\n close\n}: {\n actions: {\n updateGroup: (group: any) => void\n },\n group: any,\n close: () => void\n}) => ;\n\nUpdateDeviceGroupHOC.propTypes = {\n close: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n deleteGroup: PropTypes.func.isRequired\n }).isRequired,\n group: PropTypes.object.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateGroup\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(UpdateDeviceGroupHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nconst styles = theme => ({\n paper: {\n width: '600px'\n }\n});\n\nclass ChangeDefaultGroupModal extends Component<{\n fullScreen: boolean,\n close: () => void,\n group: any,\n actions: {\n makeGroupAsDefault: (_id: string) => void\n }\n}> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n group: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n makeGroupAsDefault: PropTypes.func.isRequired\n }).isRequired\n };\n\n onMakeAsDefault = () => {\n const {\n group: { _id },\n actions: { makeGroupAsDefault }\n } = this.props;\n makeGroupAsDefault(_id);\n };\n\n render() {\n const { fullScreen, close } = this.props;\n return (\n \n Make as default\n \n \n Are you sure you want to make group as default?\n \n \n \n \n Yes\n \n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(ChangeDefaultGroupModal));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../../utils/container-util';\n\nimport { makeGroupAsDefault } from '../../../../actions/users-actions';\n\nimport ChangeDefaultGroupModal from '../../../../components/Devices/Groups/Default';\n\nconst ChangeDefaultGroupHOC = ({\n actions,\n group,\n close\n}: {\n actions: {\n makeGroupAsDefault: (_id: string) => void\n },\n group: any,\n close: () => void\n}) => ;\n\nChangeDefaultGroupHOC.propTypes = {\n close: PropTypes.func.isRequired,\n actions: PropTypes.shape({\n makeGroupAsDefault: PropTypes.func.isRequired\n }).isRequired,\n group: PropTypes.object.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n makeGroupAsDefault\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ChangeDefaultGroupHOC);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\nimport classNames from 'classnames';\n\nconst styles = () => ({\n tab: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n isOver: {\n border: '1px dashed black'\n },\n tabContent: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n circleIcon: {\n fontSize: 13,\n marginBottom: 1\n },\n colorGreen: {\n fill: '#61bd4f'\n },\n colorYellow: {\n fill: '#f2d600'\n },\n colorRed: {\n fill: '#eb5a46'\n },\n deviceCountText: {\n fontSize: 10,\n color: 'black',\n marginLeft: -1,\n marginRight: 2,\n marginBottom: 1\n }\n});\n\nclass TabContent extends React.Component<{\n classes: {\n tab: string,\n isOver: string,\n tabContent: string,\n circleIcon: string,\n colorGreen: string,\n colorYellow: string,\n colorRed: string,\n deviceCountText: string\n },\n group: any,\n isOver: boolean,\n canDrop: boolean\n}> {\n static propTypes = {\n classes: PropTypes.shape({\n tab: PropTypes.string.isRequired,\n isOver: PropTypes.string.isRequired,\n tabContent: PropTypes.string.isRequired,\n circleIcon: PropTypes.string.isRequired,\n colorGreen: PropTypes.string.isRequired,\n colorYellow: PropTypes.string.isRequired,\n colorRed: PropTypes.string.isRequired,\n deviceCountText: PropTypes.string.isRequired\n }).isRequired,\n group: PropTypes.object.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n isOver: false,\n canDrop: true\n };\n\n render() {\n const {\n statusesCountInGroup: { onlineCount, awayCount, offlineCount },\n group: { name },\n classes\n } = this.props;\n return (\n
\n
{name}
\n {!!onlineCount && (\n <>\n {' '}\n \n {onlineCount}\n \n \n )}\n {!!awayCount && (\n <>\n {' '}\n \n {awayCount}\n \n \n )}\n {!!offlineCount && (\n <>\n {' '}\n \n {offlineCount}\n \n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(TabContent);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\n\nimport { DEVICE_TO_GROUP_MOVE } from '../../../constants/dragging-constants';\n\nconst dropSpec = {\n canDrop(props, monitor) {\n const {\n group: { _id }\n } = props;\n const device = monitor.getItem() || { group: {} };\n const {\n group: { _id: deviceGroupId }\n } = device;\n return _id !== deviceGroupId && _id !== '-1';\n },\n\n drop(props) {\n return props.group;\n }\n};\n\nfunction dropCollect(connect, monitor) {\n return {\n // Call this function inside render()\n // to let React DnD handle the drag events:\n connectDropTarget: connect.dropTarget(),\n // You can ask the monitor about the current drag state:\n isOver: monitor.isOver(),\n // isOverCurrent: monitor.isOver({ shallow: true }),\n canDrop: monitor.canDrop()\n // itemType: monitor.getItemType()\n };\n}\n\nexport default (WrappedComponent: any) => {\n const C = props => {\n const { connectDropTarget, ...rest } = props;\n return connectDropTarget(\n
\n \n
\n );\n };\n\n C.displayName = `withDeviceDrop(${WrappedComponent.displayName ||\n WrappedComponent.name})`;\n C.WrappedComponent = WrappedComponent;\n C.propTypes = {\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool.isRequired,\n ...WrappedComponent.propTypes\n };\n return DropTarget(DEVICE_TO_GROUP_MOVE, dropSpec, dropCollect)(C);\n};\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport IconButton from '@material-ui/core/IconButton';\nimport ArrowDropDown from '@material-ui/icons/ArrowDropDown';\nimport ArrowDropUp from '@material-ui/icons/ArrowDropUp';\n\nconst styles = () => ({\n sortableDeviceWrapper: {\n padding: '10px 05px 10px 15px',\n display: 'flex',\n marginBottom: '10px'\n },\n sortableDeviceName: {\n flex: '1',\n padding: '5px',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n arrowButton: {\n padding: 3,\n cursor: 'pointer'\n }\n});\n\nclass SortableDevice extends Component<{\n classes: {\n sortableDeviceWrapper: string,\n sortableDeviceName: string,\n arrowButton: string\n },\n index: number,\n name: string,\n moveDevice: (dragIndex: number, direction: string) => void,\n devicesLength: number\n}> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n moveDevice: PropTypes.func.isRequired,\n devicesLength: PropTypes.number.isRequired\n };\n\n onArrowDownClick = () => {\n const { index, moveDevice } = this.props;\n const direction = 'down';\n moveDevice(index, direction);\n };\n\n onArrowUpClick = () => {\n const { index, moveDevice } = this.props;\n const direction = 'up';\n moveDevice(index, direction);\n };\n\n render() {\n const { classes, name, index, devicesLength } = this.props;\n return (\n \n
{name}
\n \n \n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(SortableDevice);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport SortableDevice from './SortableDevice';\n\nclass OrderDevice extends Component<\n {\n sortableDevices: any[],\n fullScreen: boolean,\n actions: {\n updateDevicesOrdering: (devices: any[]) => void\n },\n close: () => void\n },\n {\n sortableDevices: any[],\n canSave: boolean\n }\n> {\n static propTypes = {\n sortableDevices: PropTypes.array.isRequired,\n actions: PropTypes.shape({\n updateDevicesOrdering: PropTypes.func.isRequired\n }).isRequired,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n const { sortableDevices } = props;\n const canSave = false;\n this.state = {\n sortableDevices,\n canSave\n };\n }\n\n handleSave = () => {\n const {\n actions: { updateDevicesOrdering },\n close\n } = this.props;\n const { sortableDevices, canSave } = this.state;\n const orderedDevices = sortableDevices.map(({ _id, owner }, order) => ({\n deviceId: _id,\n userId: owner,\n order\n }));\n if (canSave) {\n updateDevicesOrdering(orderedDevices);\n close();\n }\n };\n\n updateCanSave = (newDevices: any[]) => {\n const { sortableDevices } = this.props;\n for (let i = 0; i < newDevices.length; i += 1) {\n if (newDevices[i] !== sortableDevices[i]) {\n this.setState({\n canSave: true\n });\n return;\n }\n }\n this.setState({\n canSave: false\n });\n };\n\n moveDevice = (dragIndex: number, direction: string) => {\n const dropIndex = direction === 'up' ? dragIndex - 1 : dragIndex + 1;\n const { sortableDevices } = this.state;\n const dragDevice = sortableDevices[dragIndex];\n const newDevices = sortableDevices.slice();\n newDevices.splice(dragIndex, 1); // removing what you are dragging.\n newDevices.splice(dropIndex, 0, dragDevice); // inserting it into hoverIndex.\n this.setState({ sortableDevices: newDevices });\n this.updateCanSave(newDevices);\n };\n\n renderSortableDevice = (device, i) => {\n const { name, _id } = device;\n const devicesLength = this.props.sortableDevices.length;\n return (\n \n );\n };\n\n render() {\n const { fullScreen, close } = this.props;\n const { sortableDevices, canSave } = this.state;\n return (\n \n \n

Order devices by clicking on arrows

\n
\n {sortableDevices.map((device, i) =>\n this.renderSortableDevice(device, i)\n )}\n
\n
\n \n \n Save\n \n \n \n
\n );\n }\n}\n\nexport default withMobileDialog()(OrderDevice);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { updateDevicesOrdering } from '../../../actions/device-actions';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport OrderDevice from '../../../components/Devices/Order';\n\nconst OrderDevicesHOC = ({\n actions,\n close,\n devices\n}: {\n actions: {\n updateDevicesOrdering: (devices: any[]) => void\n },\n close: () => void,\n devices: any[]\n}) => ;\n\nOrderDevicesHOC.propTypes = {\n actions: PropTypes.shape({\n updateDevicesOrdering: PropTypes.func.isRequired\n }).isRequired,\n devices: PropTypes.array.isRequired,\n close: PropTypes.func.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateDevicesOrdering\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(OrderDevicesHOC);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport IconButton from '@material-ui/core/IconButton';\nimport ArrowDropDown from '@material-ui/icons/ArrowDropDown';\nimport ArrowDropUp from '@material-ui/icons/ArrowDropUp';\n\nconst styles = () => ({\n sortableGroupWrapper: {\n padding: '10px 05px 10px 15px',\n display: 'flex',\n marginBottom: '10px'\n },\n sortableGroupName: {\n flex: '1',\n padding: '5px'\n },\n arrowButton: {\n padding: 3,\n cursor: 'pointer'\n }\n});\n\nclass SortableGroup extends Component<{\n classes: {\n sortableGroupWrapper: string,\n sortableGroupName: string,\n arrowButton: string\n },\n index: number,\n name: string,\n _id: string,\n moveGroup: (dragIndex: number, direction: string) => void,\n groupsLength: number\n}> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n _id: PropTypes.string.isRequired,\n moveGroup: PropTypes.func.isRequired,\n groupsLength: PropTypes.number.isRequired\n };\n\n onArrowDownClick = () => {\n const { index, moveGroup } = this.props;\n const direction = 'down';\n moveGroup(index, direction);\n };\n\n onArrowUpClick = () => {\n const { index, moveGroup } = this.props;\n const direction = 'up';\n moveGroup(index, direction);\n };\n\n render() {\n const { classes, name, index, groupsLength, _id } = this.props;\n return (\n \n
{name}
\n \n \n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(SortableGroup);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport SortableGroup from './SortableGroups';\n\nconst styles = () => ({\n paper: {\n width: '600px'\n },\n formControl: {\n width: 180\n }\n});\n\nclass OrderGroups extends Component<\n {\n classes: {\n formControl: string\n },\n fullScreen: boolean,\n actions: {\n updateGroupsOrdering: (groups: any[]) => void\n },\n groups: any[],\n close: () => void\n },\n {\n groups: any[],\n canSave: boolean\n }\n> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n actions: PropTypes.shape({\n updateGroupsOrdering: PropTypes.func.isRequired\n }).isRequired,\n groups: PropTypes.array.isRequired,\n close: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n const { groups } = props;\n const canSave = false;\n this.state = {\n groups,\n canSave\n };\n }\n\n handleSave = () => {\n const {\n actions: { updateGroupsOrdering },\n close\n } = this.props;\n const { groups, canSave } = this.state;\n const orderedGroups = groups.map(({ _id }, order) => ({\n _id,\n order\n }));\n for (let i = 0; i < orderedGroups.length; i += 1) {\n if (orderedGroups[i]._id === '-1') {\n orderedGroups.splice(i, 1);\n break;\n }\n }\n if (canSave) {\n updateGroupsOrdering(orderedGroups);\n close();\n }\n };\n\n moveGroup = (dragIndex: number, direction: string) => {\n const dropIndex = direction === 'up' ? dragIndex - 1 : dragIndex + 1;\n const { groups } = this.state;\n const dragGroup = groups[dragIndex];\n const newGroups = groups.slice();\n newGroups.splice(dragIndex, 1); // removing what you are dragging.\n newGroups.splice(dropIndex, 0, dragGroup); // inserting it into hoverIndex.\n this.setState({ groups: newGroups });\n this.updateCanSave(newGroups);\n };\n\n updateCanSave = (newGroups: any[]) => {\n const { groups } = this.props;\n for (let i = 0; i < newGroups.length; i += 1) {\n if (newGroups[i] !== groups[i]) {\n this.setState({\n canSave: true\n });\n return;\n }\n }\n this.setState({\n canSave: false\n });\n };\n\n renderSortableGroup = (group, i) => {\n const { name, _id } = group;\n const groupsLength = this.props.groups.length;\n return (\n \n );\n };\n\n render() {\n const { fullScreen, close } = this.props;\n const { groups, canSave } = this.state;\n return (\n \n \n

Order groups by clicking on arrows

\n
\n {groups.map((group, i) =>\n this.renderSortableGroup(group, i)\n )}\n
\n
\n \n \n Save\n \n \n \n
\n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(OrderGroups));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { updateGroupsOrdering } from '../../../../actions/group-actions';\nimport { wrapActionCreators } from '../../../../utils/container-util';\nimport OrderGroups from '../../../../components/Devices/Groups/Order';\n\nconst OrderGroupsHOC = ({\n actions,\n close,\n groups\n}: {\n actions: {\n updateGroupsOrdering: (groups: any[]) => void\n },\n close: () => void,\n groups: any[]\n}) => ;\n\nOrderGroupsHOC.propTypes = {\n actions: PropTypes.shape({\n updateGroupsOrdering: PropTypes.func.isRequired\n }).isRequired,\n close: PropTypes.func.isRequired,\n groups: PropTypes.array.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateGroupsOrdering\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(OrderGroupsHOC);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { sortBy } from 'lodash';\n\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport IconButton from '@material-ui/core/IconButton';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport Toolbar from '@material-ui/core/Toolbar';\n\nimport Device from '../../containers/Devices/Card/Device';\nimport AddDeviceGroupHOC from '../../containers/Devices/Groups/Add';\nimport DeleteDeviceGroupHOC from '../../containers/Devices/Groups/Delete';\nimport UpdateDeviceGroupHOC from '../../containers/Devices/Groups/Update';\nimport ChangeDefaultGroupHOC from '../../containers/Devices/Groups/Default';\nimport TabContent from './Groups/TabContent';\nimport withDeviceDrop from './Groups/withDeviceDrop';\n\nimport OrderDevicesHOC from '../../containers/Devices/Order/index';\nimport OrderGroupsHOC from '../../containers/Devices/Groups/Order/index';\nimport { getLoggedInUserIdHash } from '../../utils/user-utils';\n\nconst DroppableTabContent = withDeviceDrop(TabContent);\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n // display: 'grid',\n flexDirection: 'column',\n maxHeight: `calc(100vh - 64px)`,\n height: `calc(100vh - 64px)`,\n width: '100vw'\n },\n deviceWrapper: {\n minWidth: 340\n },\n listWrapper: {\n // flex: 1,\n maxHeight: 'calc(100vh - 128px)',\n display: 'grid',\n gridGap: '20px',\n gridTemplateColumns: `repeat(auto-fill, minmax(340px,1fr))`,\n boxSizing: 'border-box',\n padding: '20px 17px',\n overflowY: 'auto',\n overflowScrolling: 'touch',\n WebkitOverflowScrolling: 'touch'\n },\n flexGrow: {\n flex: '1 1 auto'\n },\n groupsFormControl: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n minWidth: 120,\n width: 120\n },\n addGroupBtn: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n cursor: 'pointer'\n },\n tabs: {\n flex: 1\n },\n toolbar: {\n width: '100vw',\n boxSizing: 'border-box'\n },\n dropDownMenuItem: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: 264\n }\n});\n\nclass DeviceList extends React.Component<\n {\n classes: {\n root: string,\n deviceWrapper: string,\n toolbar: string,\n flexGrow: string,\n listWrapper: string,\n tabs: string,\n groupsFormControl: string,\n addGroupBtn: string,\n dropDownMenuItem: string\n },\n actions: {\n updateDevice: ({ _id: string, group: string }) => void,\n getDevices: () => void\n },\n statusesLoading: boolean,\n loggedInUser: any,\n devices: any[],\n groups: any[],\n devicesUpdating: string[]\n },\n {\n showOrderDevicesModal: boolean,\n showAddGroupModal: boolean,\n showOrderGroupsModal: boolean,\n showUpdateGroupModal: boolean,\n showDeleteGroupModal: boolean,\n showChangeDefaultGroupModal: boolean,\n selectedGroupValue: number,\n anchorEl: any,\n openModal: string\n }\n> {\n static propTypes = {\n loggedInUser: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n devices: PropTypes.array.isRequired,\n groups: PropTypes.array.isRequired,\n devicesUpdating: PropTypes.array.isRequired,\n statusesLoading: PropTypes.bool.isRequired\n };\n\n userIdHash = getLoggedInUserIdHash();\n\n constructor(props) {\n super(props);\n this.state = {\n showOrderDevicesModal: false,\n showAddGroupModal: false,\n showOrderGroupsModal: false,\n showUpdateGroupModal: false,\n showDeleteGroupModal: false,\n showChangeDefaultGroupModal: false,\n selectedGroupValue: this.getSelectedGroupValue() || 0,\n anchorEl: null,\n openModal: ''\n };\n }\n\n componentDidUpdate(prevProps) {\n const {\n groups: oldGroups,\n loggedInUser: oldLoggedInUser,\n devices,\n actions: { getDevices }\n } = prevProps;\n\n const { groups, loggedInUser } = this.props;\n\n const selectedGroupValue = this.getSelectedGroupValue();\n\n if (oldLoggedInUser.defaultGroup !== loggedInUser.defaultGroup) {\n this.setState({ showChangeDefaultGroupModal: false });\n }\n\n if (oldGroups.length > groups.length) {\n const diff = [];\n\n oldGroups.forEach(oldGroup => {\n if (groups.indexOf(oldGroup) < 0) {\n diff.push(oldGroup);\n }\n });\n\n groups.forEach(group => {\n if (oldGroups.indexOf(group)) {\n diff.push(group);\n }\n });\n\n const removedGroup = diff[0];\n // eslint-disable-next-line\n for (const device of devices) {\n if ((device.group && device.group._id) === removedGroup._id) {\n getDevices();\n break;\n }\n }\n\n this.setState({ selectedGroupValue, showDeleteGroupModal: false });\n } else if (oldGroups.length < groups.length) {\n this.setState({ showAddGroupModal: false });\n } else {\n for (let i = 0; i < groups.length; i += 1) {\n if (groups[i] && oldGroups[i] && groups[i] !== oldGroups[i]) {\n this.setState({\n selectedGroupValue,\n showUpdateGroupModal: false\n });\n break;\n }\n }\n }\n }\n\n componentWillUnmount() {\n if (this.emitInterval) {\n clearInterval(this.emitInterval);\n }\n }\n\n getSelectedGroupValue = () => {\n const { groups, loggedInUser, devices } = this.props;\n const { defaultGroup } = loggedInUser;\n let selectedGroupValue = 0;\n // const storageActiveGroupId = localStorage.getItem('activeGroupId');\n const storageActiveGroupId = localStorage.getItem(\n `activeGroupId-${this.userIdHash}`\n );\n if (storageActiveGroupId) {\n const groupForSwitch = groups.find(\n group => group._id === storageActiveGroupId\n );\n if (groupForSwitch) {\n return groups.indexOf(groupForSwitch);\n }\n }\n\n if (defaultGroup) {\n const groupForSwitch = groups.find(\n group => group._id === defaultGroup\n );\n const defaultGroupIndex = groups.indexOf(groupForSwitch);\n if (devices.find(d => d.group === defaultGroup)) {\n selectedGroupValue = defaultGroupIndex;\n localStorage.setItem(\n `activeGroupId-${this.userIdHash}`,\n defaultGroup\n );\n return selectedGroupValue;\n }\n }\n\n for (let i = 0; i < groups.length; i += 1) {\n if (\n devices.find(\n d =>\n d.group === groups[i]._id ||\n (d.group && d.group._id) === groups[i]._id\n )\n ) {\n selectedGroupValue = i;\n localStorage.setItem(\n `activeGroupId-${this.userIdHash}`,\n groups[i]._id\n );\n return selectedGroupValue;\n }\n }\n if (groups.length > 0)\n localStorage.setItem(\n `activeGroupId-${this.userIdHash}`,\n groups[0]._id\n );\n return selectedGroupValue;\n };\n\n onDeviceGroupAdd = () => {};\n\n // eslint-disable-next-line\n onDeviceDropToGroup = (device, group) => {\n const {\n actions: { updateDevice }\n } = this.props;\n const { _id } = device;\n updateDevice({ _id, group: group._id });\n };\n\n handleShowOrderDevicesModal = () => {\n this.setState({\n showOrderDevicesModal: true\n });\n this.handleMenuClose();\n };\n\n handleShowAddGroupModal = () => {\n this.setState({ openModal: 'showAddGroupModal' });\n this.handleMenuClose();\n };\n\n handleShowOrderGroupsModal = () => {\n this.setState({\n showOrderGroupsModal: true\n });\n this.handleMenuClose();\n };\n\n handleEditGroup = () => {\n this.setState({ showUpdateGroupModal: true });\n this.handleMenuClose();\n };\n\n handleDeleteGroup = () => {\n const { selectedGroupValue } = this.state;\n const { groups } = this.props;\n // eslint-disable-next-line\n const selectedGroup = groups[selectedGroupValue];\n // TODo...\n this.setState({ showDeleteGroupModal: true });\n this.handleMenuClose();\n };\n\n handleChangeDefaultGroup = () => {\n this.setState({ showChangeDefaultGroupModal: true });\n this.handleMenuClose();\n };\n\n openModal = () => {\n const { openModal } = this.state;\n if (openModal) {\n this.setState({ [openModal]: true });\n }\n };\n\n handleCloseOrderDevicesModal = () => {\n this.setState({ showOrderDevicesModal: false, openModal: '' });\n };\n\n handleCloseAddGroupModal = () => {\n this.setState({ showAddGroupModal: false, openModal: '' });\n };\n\n handleCloseOrderGroupsModal = () => {\n this.setState({ showOrderGroupsModal: false, openModal: '' });\n };\n\n handleCloseUpdateDeviceGroupModal = () => {\n this.setState({ showUpdateGroupModal: false, openModal: '' });\n };\n\n handleCloseDeleteDeviceGroupModal = () => {\n this.setState({ showDeleteGroupModal: false, openModal: '' });\n };\n\n handleCloseChangeDefaultGroupModal = () => {\n this.setState({ showChangeDefaultGroupModal: false, openModal: '' });\n };\n\n emitInterval = null;\n\n handleGroupTabChange = (event, value) => {\n const { groups } = this.props;\n this.setState({\n selectedGroupValue: value\n });\n localStorage.setItem(\n `activeGroupId-${this.userIdHash}`,\n groups[value]._id\n );\n };\n\n handleMenuClick = event => {\n this.setState({ anchorEl: event.currentTarget });\n };\n\n handleMenuClose = () => {\n this.setState({ anchorEl: null });\n };\n\n renderDevice = device => {\n const { classes, devicesUpdating, statusesLoading } = this.props;\n const { _id } = device;\n const isUpdating = devicesUpdating.indexOf(_id) !== -1;\n return (\n
\n \n
\n );\n };\n\n renderGroup = group => {\n const { name, id } = group;\n return (\n \n {name}\n \n );\n };\n\n determineAvailability = d => {\n const newDate = Date.now();\n const { socketData: { lastSeen } = {} } = d;\n if (!lastSeen) {\n return 'offlineCount';\n }\n const diffMs = newDate - lastSeen;\n const diffMins = Math.round(diffMs / (1000 * 60));\n if (diffMins > 10) {\n return 'offlineCount';\n }\n if (diffMins > 3) {\n return 'awayCount';\n }\n return 'onlineCount';\n };\n\n renderGroupTab = group => {\n const { _id } = group;\n const { devices } = this.props;\n const statusesCountInGroup = {\n onlineCount: 0,\n awayCount: 0,\n offlineCount: 0\n };\n\n let currentGroupDevices = devices;\n\n if (_id) {\n currentGroupDevices = devices.filter(\n device =>\n (device.group && device.group._id) === _id ||\n device.group === _id\n );\n currentGroupDevices = sortBy(currentGroupDevices, 'order');\n }\n if (_id === '-1' && currentGroupDevices.length === 0) {\n return null;\n }\n currentGroupDevices.forEach(d => {\n const st = this.determineAvailability(d);\n statusesCountInGroup[st] += 1;\n });\n\n return (\n \n }\n key={_id}\n />\n );\n };\n\n render() {\n const {\n showOrderDevicesModal,\n selectedGroupValue,\n showAddGroupModal,\n showOrderGroupsModal,\n showUpdateGroupModal,\n showDeleteGroupModal,\n showChangeDefaultGroupModal,\n anchorEl\n } = this.state;\n const { classes, devices, groups, loggedInUser } = this.props;\n\n const selectedGroup = groups[selectedGroupValue] || {};\n const { name, _id } = selectedGroup;\n\n const { defaultGroup } = loggedInUser;\n\n const selectedGroupIsDefault = defaultGroup === _id;\n\n let filteredDevices = devices;\n\n if (_id) {\n filteredDevices = devices.filter(\n device =>\n (device.group && device.group._id) === _id ||\n device.group === _id\n );\n filteredDevices = sortBy(filteredDevices, 'order');\n }\n\n return (\n \n \n \n {groups.map(group => this.renderGroupTab(group))}\n \n \n \n \n \n {/* */}\n {/* Add Device */}\n {/* */}\n \n
\n Order Devices\n
\n \n \n
\n Add Group\n
\n
\n \n
\n Order Groups\n
\n
\n \n
\n Delete {name}\n
\n \n \n
\n Edit {name}\n
\n
\n \n
\n Make {name} as Default\n
\n \n \n
\n
\n {filteredDevices.map(device => this.renderDevice(device))}\n
\n {showOrderDevicesModal && (\n \n )}\n {showAddGroupModal && (\n \n )}\n {showOrderGroupsModal && (\n \n )}\n {showUpdateGroupModal && (\n \n )}\n {showDeleteGroupModal && (\n \n )}\n {showChangeDefaultGroupModal && (\n \n )}\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceList);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Tab from '@material-ui/core/Tab/Tab';\nimport Tabs from '@material-ui/core/Tabs/Tabs';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport { PYTHON_CLIENT_URL } from '../../../constants/api-constants';\nimport {\n LinuxConsoleIcon,\n LinuxIcon,\n MacIcon,\n WindowsIcon,\n RaspberryPiIcon\n} from '../../../icons';\nimport ClipboardCopy from '../../ClipboardCopy';\n\nconst styles = theme => ({\n paper: {\n maxWidth: '910px',\n '@media (min-width: 1024px)': {\n minWidth: '900px'\n }\n },\n linuxCommand: {\n fontWeight: 'bold',\n cursor: 'pointer',\n color: theme.palette.primary['500']\n },\n tab: {\n paddingTop: 0\n },\n content: {\n height: 150,\n paddingTop: theme.spacing.unit * 2\n }\n});\n\nclass SetupInstructions extends Component<\n {\n classes: {\n paper: string,\n linuxCommand: string,\n tab: string,\n tabs: string,\n content: string\n },\n fullScreen: boolean,\n close: () => void\n },\n {\n copied: boolean,\n activeTab: Number\n }\n> {\n static propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n classes: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired\n };\n\n state = {\n activeTab: -1\n };\n\n componentDidMount() {\n let agent = navigator.userAgent;\n agent = agent && agent.toLocaleLowerCase();\n const activeTab =\n agent.indexOf('windows') !== -1\n ? 0\n : agent.indexOf('mac') !== -1\n ? 1\n : agent.indexOf('linux') !== -1\n ? 2\n : 3;\n this.setState({ activeTab });\n }\n\n setupLinuxCommand = `sudo sh -c \"$(curl -s ${PYTHON_CLIENT_URL})\"`;\n\n handleActiveTabChange = (event, value) => {\n this.setState({ activeTab: value });\n };\n\n render() {\n const {\n classes: { tabs, tab, content, linuxCommand, ...rest },\n fullScreen,\n close\n } = this.props;\n const { activeTab } = this.state;\n return (\n \n Add Device\n\n \n \n \n \n \n \n \n \n {activeTab === 0 && (\n
\n \n
\n To setup Tunnel In for Windows!\n
\n
\n 1. Please download the application.\n
\n
\n 2. Execute it, and follow the instructions.\n
\n
\n \n Download\n \n
\n )}\n {activeTab === 1 && (\n
\n \n
\n To setup Tunnel In for mac OS!\n
\n
\n 1. Please download the application.\n
\n
\n 2. Execute it, and follow the instructions.\n
\n
\n \n Download\n \n
\n )}\n {activeTab === 2 && (\n
\n \n
\n To setup Tunnel In for Linux!\n
\n
\n 1. Please download the application.\n
\n
\n 2. Make it executable by running{' '}\n \n
\n
\n 3. Execute it, and follow the instructions.\n
\n
\n \n Download\n \n
\n )}\n {activeTab === 3 && (\n
\n \n
\n To setup Tunnel In for Linux Console!\n
\n
\n 1. Please download the application by\n running\n \n
\n
\n 2. Make it executable by running{' '}\n \n
\n
\n 3. Execute it, and follow the instructions\n by running {' '}\n \n
\n
\n
\n )}\n {activeTab === 4 && (\n
\n \n
\n To setup Tunnel In for Raspberry Pi OS\n (Raspbian)!\n
\n
\n 1. Please download the application by\n running\n \n
\n
\n 2. Make it executable by running{' '}\n \n
\n
\n 3. Execute it, and follow the instructions\n by running {' '}\n \n
\n
\n
\n )}\n
\n \n \n \n \n );\n }\n}\n\nexport default withMobileDialog()(withStyles(styles)(SetupInstructions));\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport SetupInstructions from './SetupInstructions';\n\nconst AddDevice = ({ close }: { close: () => void }) => (\n \n);\n\nAddDevice.propTypes = {\n close: PropTypes.func.isRequired\n};\n\nexport default AddDevice;\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport {\n addDeviceLoading,\n getLastAddedDevice\n} from '../../../selectors/devices-selectors';\nimport { addDevice } from '../../../actions/device-actions';\nimport AddDevice from '../../../components/Devices/Add';\n\nconst AddDeviceHOC = ({ actions, addDeviceLoading, close, addedDevice }) => (\n \n);\n\nAddDeviceHOC.propTypes = {\n actions: PropTypes.shape({\n addDevice: PropTypes.func.isRequired\n }).isRequired,\n addDeviceLoading: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n addedDevice: PropTypes.object\n};\n\nAddDeviceHOC.defaultProps = {\n addedDevice: null\n};\n\nconst mapStateToProps = createStructuredSelector({\n addDeviceLoading: addDeviceLoading(),\n addedDevice: getLastAddedDevice()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n addDevice\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AddDeviceHOC);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Hidden from '@material-ui/core/Hidden/Hidden';\nimport Fab from '@material-ui/core/Fab/Fab';\nimport AddIcon from '@material-ui/icons/Add';\n\nimport EmptyDevices from '../../containers/Devices/EmptyDevices';\nimport DeviceList from './DeviceList';\nimport LoadingPane from '../LoadingPane';\nimport AddDevice from '../../containers/Devices/Add';\n\nconst styles = () => ({\n root: {\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n addButton: {\n position: 'fixed',\n right: 16,\n bottom: 16\n },\n addButtonMobile: {\n position: 'fixed',\n right: 5,\n bottom: 5\n }\n});\n\nclass Devices extends React.Component<\n {\n classes: { root: string },\n loggedInUser: { fullName: string, avatar: string },\n actions: {\n getDevices: () => void,\n updateDevice: () => void,\n getGroups: () => void\n },\n loggedInUser: any,\n devices: any[],\n groups: any[],\n devicesUpdating: string[],\n totalCount: number,\n devicesLoading: boolean,\n devicesError: string\n },\n { value: number, anchorEl: any, showAddDeviceModal: boolean }\n> {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n updateDevice: PropTypes.func.isRequired,\n getDevices: PropTypes.func.isRequired\n }).isRequired,\n loggedInUser: PropTypes.object.isRequired,\n devices: PropTypes.array.isRequired,\n statusesLoading: PropTypes.bool.isRequired,\n groups: PropTypes.array.isRequired,\n devicesUpdating: PropTypes.array.isRequired,\n totalCount: PropTypes.number.isRequired,\n devicesLoading: PropTypes.bool.isRequired,\n devicesError: PropTypes.string.isRequired\n };\n\n state = {\n showAddDeviceModal: false\n };\n\n closeAddDeviceModal = () => {\n this.setState({\n showAddDeviceModal: false\n });\n };\n\n handleShowAddDeviceModal = () => {\n this.setState({\n showAddDeviceModal: true\n });\n };\n\n renderContent = () => {\n const {\n devices,\n statusesLoading,\n totalCount,\n devicesLoading,\n devicesUpdating,\n groups,\n loggedInUser,\n actions\n } = this.props;\n\n if (totalCount === 0 && !devicesLoading) {\n // no device in the DB , show Add new device page\n return ;\n }\n return (\n \n \n \n );\n };\n\n render() {\n const { devicesError, classes } = this.props;\n const { showAddDeviceModal } = this.state;\n if (devicesError) {\n return null; // error page;\n }\n return (\n
\n {this.renderContent()}\n \n \n \n \n \n \n \n \n \n \n {showAddDeviceModal && (\n \n )}\n
\n );\n }\n}\n\nDevices.propTypes = {\n classes: PropTypes.object.isRequired\n};\n\nexport default withStyles(styles)(Devices);\n","// @flow\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../utils/container-util';\nimport {\n selectDevices,\n getDevicesError,\n getDevicesLoading,\n getTotalCount,\n updateDeviceLoading,\n selectDevicesStatusesLoading\n} from '../../selectors/devices-selectors';\nimport { selectGroupData } from '../../selectors/groups-selectors';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport { getDevices, updateDevice } from '../../actions/device-actions';\nimport { getGroups } from '../../actions/group-actions';\nimport Devices from '../../components/Devices';\n\nclass DevicesHOC extends Component<\n {\n actions: {\n getDevices: () => void,\n updateDevice: () => void,\n getGroups: () => void,\n tabs: string,\n tab: string,\n toolbar: string,\n purpleAvatar: string\n },\n loggedInUser: any,\n devices: any[],\n groups: any[],\n totalCount: number,\n devicesLoading: boolean,\n devicesError: string,\n devicesUpdating: string[]\n },\n {}\n> {\n static propTypes = {\n actions: PropTypes.shape({\n getDevices: PropTypes.func.isRequired,\n updateDevice: PropTypes.func.isRequired,\n getGroups: PropTypes.func.isRequired\n }).isRequired,\n devices: PropTypes.array.isRequired,\n statusesLoading: PropTypes.bool.isRequired,\n groups: PropTypes.array.isRequired,\n totalCount: PropTypes.number.isRequired,\n devicesLoading: PropTypes.bool.isRequired,\n devicesUpdating: PropTypes.array.isRequired,\n devicesError: PropTypes.string.isRequired,\n loggedInUser: PropTypes.object.isRequired\n };\n\n intervalId = null;\n\n componentDidMount() {\n const {\n actions: { getGroups, getDevices }\n } = this.props;\n getGroups();\n getDevices();\n }\n\n componentWillUnmount() {\n clearInterval(this.intervalId);\n }\n\n render() {\n const {\n actions,\n devices,\n statusesLoading,\n totalCount,\n devicesLoading,\n devicesError,\n devicesUpdating,\n groups,\n loggedInUser\n } = this.props;\n return (\n \n );\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n devices: selectDevices(),\n statusesLoading: selectDevicesStatusesLoading(),\n groups: selectGroupData(),\n devicesUpdating: updateDeviceLoading(),\n totalCount: getTotalCount(),\n devicesLoading: getDevicesLoading(),\n devicesError: getDevicesError(),\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n getDevices,\n getGroups,\n updateDevice\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DevicesHOC);\n","import { createSelector } from 'reselect';\n\nexport const selectLocalState = () => state => state.groups;\n\nexport const selectGroupData = () =>\n createSelector(\n selectLocalState(),\n ({ data }) => data\n );\n","export function bytesToSize(bytes) {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n if (bytes === 0) return '0 Byte';\n const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n return `${Math.round(bytes / Math.pow(1024, i), 2)} ${sizes[i]}`;\n}\n","export const ALL_TUNNEL_TYPES = [\n 'http',\n 'custom',\n 'ssh',\n 'rdp',\n 'vnc',\n 'proxy'\n];\nexport const DEFAULT_LOCAL_PORTS = {\n http: '',\n rdp: '3389',\n ssh: '22',\n vnc: '5900',\n proxy: '3128',\n custom: ''\n};\nexport const INFO_TEXT_ABOUT_TUNNEL_RELOAD = `The tunnel is currently started, we will reload it automatically with new settings.`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControl from '@material-ui/core/FormControl';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Input from '@material-ui/core/Input';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Checkbox from '@material-ui/core/Checkbox/Checkbox';\nimport FormControlLabel from '@material-ui/core/FormControlLabel/FormControlLabel';\nimport MenuItem from '@material-ui/core/MenuItem/MenuItem';\nimport Select from '@material-ui/core/Select/Select';\nimport { IconButton, Divider, Typography, Tooltip } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport LockIcon from '@material-ui/icons/Lock';\n\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { ALL_TUNNEL_TYPES } from '../../../constants/tunnels';\nimport { getLoggedInUser } from '../../../selectors/app-selectors';\nimport PasswordField from '../../PasswordField';\n\nconst styles = () => ({\n addOrEditFormWrapper: {\n display: 'flex',\n flexDirection: 'column'\n },\n section: {\n display: 'flex',\n flexDirection: 'column'\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n marginTop: 10\n },\n divider: {\n flex: 1,\n marginLeft: 10\n },\n sectionRow: {\n display: 'flex',\n alignItems: 'baseline',\n paddingLeft: 20,\n marginTop: 5,\n marginBottom: 5,\n '@media (max-width: 959px)': {\n flexDirection: 'column',\n justifyContent: 'center'\n }\n },\n menuItem: {\n maxWidth: 250\n },\n devicesMenuItemInner: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n leftSide: {\n flex: 1,\n margin: '0 10px 0 0',\n '@media (max-width: 959px)': {\n margin: 0\n }\n },\n rightSide: {\n flex: 1,\n margin: '0 0 0 10px',\n '@media (max-width: 959px)': {\n margin: 0\n }\n },\n connectionsRateLimiting: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n marginRight: 16,\n '@media (max-width: 959px)': {\n // margin: '0 0 0 -40px'\n }\n },\n initializationTimeLimiting: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n marginLeft: 5,\n '@media (max-width: 959px)': {\n marginLeft: 0\n }\n },\n httpUrlsWrapper: {\n marginLeft: 10,\n fontSize: 14,\n display: 'flex',\n flexDirection: 'column',\n color: '#9c27b0'\n }\n});\n\nconst AddOrEditTunnelForm = ({\n classes,\n mode,\n loggedInUser,\n formData: {\n name,\n onNameChange,\n devices,\n deviceId,\n onDeviceIdChange,\n type,\n onTypeChange,\n localPort,\n onLocalPortChange,\n handleHTTP,\n setHandleHTTP,\n connectionsRateLimiting,\n setConnectionsRateLimiting,\n initializationTimeLimiting,\n setInitializationTimeLimiting,\n allowConnectionsFrom,\n setAllowConnectionsFrom,\n ipAddresses,\n onIpAddressesChange,\n autoClose,\n setAutoClose,\n nameError,\n deviceIdError,\n typeError,\n localPortError,\n ipAddressErrors,\n onAddIpAddress,\n onRemoveIpAddress,\n showPassword,\n tunnelPassword,\n setTunnelPassword,\n setShowPassword\n }\n}) => (\n
\n
\n
\n
Basic Options
\n \n
\n
\n \n Name\n \n {nameError && {nameError}}\n \n \n Device\n \n \n {devices.map(device => (\n \n \n {device.name}\n \n \n ))}\n \n \n {deviceIdError && (\n {deviceIdError}\n )}\n \n
\n
\n \n Type\n \n \n {ALL_TUNNEL_TYPES.map(t => (\n \n \n {t.toUpperCase()}\n \n \n ))}\n \n \n {typeError && {typeError}}\n \n \n \n Local Port\n \n \n {localPortError && (\n {localPortError}\n )}\n \n
\n
\n
\n
\n
Security Options
\n \n
\n {!type && (\n
\n First please select type.\n
\n )}\n {type === 'http' && (\n <>\n
\n \n Scheme\n setHandleHTTP(e.target.value)}\n autoWidth={true}\n value={handleHTTP}\n >\n \n https://\n \n \n https:// + http://\n \n \n \n
\n
\n
\n \n {name && !nameError ? (\n \n
URL:
\n
\n {`https://${name}-${\n loggedInUser.username\n }.p.tunnelin.com`}\n\n {// TODO:: this is temporary fix and should be removed\n false && (\n \n {`https://${\n loggedInUser.username\n }.p.tunnelin.com/${name}`}\n \n )}\n
\n
\n ) : (\n
\n Please type a valid name to generate urls\n
\n )}\n
\n
\n\n \n \n \n setShowPassword(e.target.checked)\n }\n value=\"autoClose\"\n />\n }\n label=\"Set tunnel password\"\n />\n\n \n \n \n
\n {showPassword && (\n \n )}\n \n {type === 'http' && !handleHTTP && (\n
\n \n\n \n This is most secure configurations\n \n
\n )}\n \n )}\n {type && type !== 'http' && (\n <>\n
\n
\n \n setConnectionsRateLimiting(\n e.target.checked\n )\n }\n value=\"connectionsRateLimiting\"\n />\n }\n label=\"Connections rate limiting\"\n />\n \n \n \n
\n
\n \n setInitializationTimeLimiting(\n e.target.checked\n )\n }\n value=\"initializationTimeLimiting\"\n />\n }\n label=\"Initialization time limiting\"\n />\n \n \n \n
\n
\n
\n \n setAutoClose(e.target.checked)\n }\n value=\"autoClose\"\n />\n }\n label=\"Automatically close tunnel when not in use\"\n />\n
\n
\n \n \n Allow Connections From\n \n \n setAllowConnectionsFrom(e.target.value)\n }\n autoWidth={true}\n value={allowConnectionsFrom}\n >\n Anywhere\n My ip\n Custom\n \n \n \n {allowConnectionsFrom === 'custom' && (\n <>\n {ipAddresses.map((ip, i) => (\n \n \n \n Source ip address\n \n \n onIpAddressesChange(\n e,\n i\n )\n }\n />\n \n \n \n \n \n onRemoveIpAddress(i)\n }\n disabled={\n ipAddresses.length === 1 &&\n i === 0\n }\n style={{\n margin: 0,\n padding: 0,\n width: 32,\n height: 32\n }}\n >\n \n \n
\n ))}\n \n )}\n \n \n \n )}\n {type &&\n (type !== 'http' &&\n connectionsRateLimiting &&\n initializationTimeLimiting &&\n allowConnectionsFrom === 'myIp' &&\n autoClose) && (\n
\n \n \n This is most secure configurations\n \n
\n )}\n \n \n);\nAddOrEditTunnelForm.propTypes = {\n classes: PropTypes.object.isRequired,\n mode: PropTypes.string.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n formData: PropTypes.shape({\n name: PropTypes.string,\n onNameChange: PropTypes.func.isRequired,\n devices: PropTypes.array,\n deviceId: PropTypes.string,\n onDeviceIdChange: PropTypes.func.isRequired,\n type: PropTypes.string,\n onTypeChange: PropTypes.func.isRequired,\n localPort: PropTypes.string,\n onLocalPortChange: PropTypes.func.isRequired,\n handleHTTP: PropTypes.bool,\n setHandleHTTP: PropTypes.func.isRequired,\n connectionsRateLimiting: PropTypes.bool,\n setConnectionsRateLimiting: PropTypes.func.isRequired,\n initializationTimeLimiting: PropTypes.bool,\n setInitializationTimeLimiting: PropTypes.func.isRequired,\n allowConnectionsFrom: PropTypes.string,\n setAllowConnectionsFrom: PropTypes.func.isRequired,\n ipAddresses: PropTypes.array,\n onIpAddressesChange: PropTypes.func.isRequired,\n autoClose: PropTypes.bool,\n setAutoClose: PropTypes.func.isRequired,\n nameError: PropTypes.string.isRequired,\n deviceIdError: PropTypes.string.isRequired,\n typeError: PropTypes.string.isRequired,\n localPortError: PropTypes.string.isRequired,\n ipAddressErrors: PropTypes.array.isRequired,\n onAddIpAddress: PropTypes.func.isRequired,\n onRemoveIpAddress: PropTypes.func.isRequired\n })\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nexport default withStyles(styles)(\n connect(mapStateToProps)(AddOrEditTunnelForm)\n);\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport DialogTitle from '@material-ui/core/DialogTitle/DialogTitle';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\nimport { Hidden } from '@material-ui/core';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport AddOrEditTunnelForm from './AddOrEditTunnelForm';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport { selectDevices } from '../../../selectors/devices-selectors';\nimport { getDevices } from '../../../actions/device-actions';\nimport {\n INFO_TEXT_ABOUT_TUNNEL_RELOAD,\n DEFAULT_LOCAL_PORTS\n} from '../../../constants/tunnels';\nimport {\n validateNameField,\n validateDeviceField,\n validateTypeField,\n validateLocalPortField,\n validateIpAddress\n} from '../../../utils/tunnel-validations';\nimport {\n parseErrorMessage,\n constructGlobalErrorMessage\n} from '../../../utils/global-message-util';\nimport { setGlobalMessageError } from '../../../actions/app-actions';\nimport { addTunnel, updateTunnel, getTunnels } from '../../../api/tunnel-api';\n\nconst styles = () => ({\n dialog: {\n '@media (min-width: 600px)': {\n minHeight: '550px',\n minWidth: '600px'\n // maxWidth: '550px'\n }\n // '@media (min-height: 450px)': {\n // height: '450px'\n // }\n },\n dialogContent: {\n // padding: '0',\n paddingTop: '0!important',\n padding: '0px 24px',\n minHeight: '215px',\n height: '215px',\n display: 'flex',\n flexDirection: 'column'\n },\n addOrEditTunnelForm: {\n padding: '0px 24px'\n },\n dialogActions: {\n padding: '13px 20px',\n margin: 0\n },\n addButton: {\n margin: '0 4px'\n },\n infoAboutReloadTunnelWrapper: {\n display: 'flex',\n alignItems: 'center'\n },\n infoAboutReloadTunnelText: {\n marginLeft: 5,\n fontSize: 14,\n width: 250\n },\n infoAboutReloadTunnelTextMobile: {\n marginLeft: 5,\n fontSize: 14\n }\n});\n\nconst AddOrEditTunnel = ({\n classes,\n fullScreen,\n close,\n onTunnelReady,\n tunnel,\n devices,\n handleStartClick,\n deviceAvailabilityStatus,\n actions: { getDevices, setGlobalMessageError }\n}) => {\n const withStartAction =\n tunnel &&\n tunnel.status === 'online' &&\n deviceAvailabilityStatus === 'started';\n\n const [allTunnels, setAllTunnels] = useState([]);\n useEffect(() => {\n let canceled = false;\n getTunnels().subscribe(\n data => {\n if (data && data.data && data.data.tunnels && !canceled) {\n setAllTunnels(data.data.tunnels);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n\n useEffect(() => {\n if (!devices || devices.length === 0) {\n getDevices();\n }\n }, []);\n const firewall =\n (tunnel && tunnel.options && tunnel.options.firewall) || {};\n\n const [name, setName] = useState((tunnel && tunnel.name) || '');\n\n const [deviceId, setDeviceId] = useState((tunnel && tunnel.deviceId) || '');\n\n const [type, setType] = useState((tunnel && tunnel.type) || '');\n\n const [localPort, setLocalPort] = useState(\n (tunnel && tunnel.localPort && tunnel.localPort.toString()) || ''\n );\n\n const [handleHTTP, setHandleHTTP] = useState(\n (tunnel && tunnel.handleHTTP) || false\n );\n\n const [connectionsRateLimiting, setConnectionsRateLimiting] = useState(\n !!firewall.connectionsRateLimiting\n );\n const [\n initializationTimeLimiting,\n setInitializationTimeLimiting\n ] = useState(!!firewall.initializationTimeLimiting);\n const [allowConnectionsFrom, setAllowConnectionsFrom] = useState(\n Array.isArray(firewall.allowConnectionsFrom)\n ? 'custom'\n : firewall.allowConnectionsFrom || ''\n );\n const [ipAddresses, setIpAddresses] = useState(\n Array.isArray(firewall.allowConnectionsFrom)\n ? firewall.allowConnectionsFrom\n : ['']\n );\n const [autoClose, setAutoClose] = useState(!!firewall.autoClose);\n const [nameError, setNameError] = useState('');\n\n const [deviceIdError, setDeviceIdError] = useState('');\n\n const [typeError, setTypeError] = useState('');\n\n const [localPortError, setLocalPortError] = useState('');\n\n const [ipAddressErrors, setIpAddressErrors] = useState(\n Array.isArray(allowConnectionsFrom)\n ? new Array(allowConnectionsFrom.length).fill(null)\n : [null]\n );\n const val = (((tunnel || {}).options || {}).auth || {}).password || '';\n const [showPassword, setShowPassword] = useState(!!val);\n const [tunnelPassword, setTunnelPassword] = useState(val);\n const validateLocalPort = port => {\n let err = validateLocalPortField(port);\n if (!err && deviceId) {\n const tunnelsOnSelectedDevice = allTunnels.filter(\n t => t.deviceId === deviceId\n );\n const tunnelOnTheSamePort = tunnelsOnSelectedDevice.find(\n t =>\n String(t.localPort) === String(port) &&\n (tunnel ? t._id !== tunnel._id : true)\n );\n if (tunnelOnTheSamePort) {\n err = `Port \"${port}\" in use by \"${\n tunnelOnTheSamePort.name\n }\" tunnel`;\n }\n }\n return err;\n };\n\n const validateName = (name, t = type) => {\n let err = validateNameField(name);\n if (!err) {\n const httpTunnels = allTunnels.filter(t => t.type === 'http');\n const tunnelWithTheSameName = httpTunnels.find(\n t => t.name === name && (tunnel ? t._id !== tunnel._id : true)\n );\n if (tunnelWithTheSameName && t === 'http') {\n err = `This url already assigned to other tunnel.`;\n }\n }\n return err;\n };\n\n const validateForm = () => {\n let isValid = true;\n const nError = validateName(name);\n setNameError(nError);\n const dError = validateDeviceField(deviceId);\n setDeviceIdError(dError);\n const tError = validateTypeField(type);\n setTypeError(tError);\n const lError = validateLocalPort(localPort);\n setLocalPortError(lError);\n if (allowConnectionsFrom === 'custom' && ipAddressErrors.find(e => e)) {\n isValid = false;\n }\n return isValid && !nError && !dError && !tError && !lError;\n };\n\n const onAddClick = () => {\n if (validateForm()) {\n const { options } = tunnel || {};\n const allowConnectionsFromData =\n allowConnectionsFrom === 'custom'\n ? ipAddresses\n : allowConnectionsFrom || 'anywhere';\n const tunnelId = tunnel && tunnel.id;\n const favourite = Boolean(tunnel && tunnel.favourite);\n const data = {\n name,\n localPort,\n handleHTTP: type === 'http' ? handleHTTP : false,\n deviceId,\n type,\n options: {\n ...options,\n auth: { password: tunnelPassword },\n firewall: {\n allowConnectionsFrom: allowConnectionsFromData,\n connectionsRateLimiting,\n initializationTimeLimiting: initializationTimeLimiting\n ? 180\n : 0,\n autoClose\n }\n }\n };\n if (!tunnel) {\n addTunnel(data).subscribe(\n d => {\n onTunnelReady(d);\n close();\n },\n err => {\n let message = 'Something went wrong';\n if (err) message = parseErrorMessage(err);\n setGlobalMessageError(\n constructGlobalErrorMessage(message)\n );\n }\n );\n } else {\n updateTunnel(tunnelId, {\n ...data,\n tunnelId,\n favourite\n }).subscribe(\n d => {\n onTunnelReady(d);\n if (\n tunnel.status === 'started' &&\n deviceAvailabilityStatus === 'online'\n ) {\n handleStartClick();\n }\n close();\n },\n err => {\n let message = 'Something went wrong';\n if (err) message = parseErrorMessage(err);\n setGlobalMessageError(\n constructGlobalErrorMessage(message)\n );\n }\n );\n }\n }\n };\n\n const onNameChange = e => {\n const { value } = e.target;\n setName(value);\n setNameError(validateName(value));\n };\n\n const onDeviceIdChange = e => {\n const { value } = e.target;\n setDeviceId(value);\n setDeviceIdError(validateDeviceField(value));\n };\n\n const onTypeChange = e => {\n const { value } = e.target;\n setType(value);\n setTypeError(validateTypeField(value));\n if (value === 'http') {\n setConnectionsRateLimiting(false);\n setInitializationTimeLimiting(false);\n setAllowConnectionsFrom('anywhere');\n setHandleHTTP(false);\n setAutoClose(false);\n setLocalPort(DEFAULT_LOCAL_PORTS[value]);\n if (localPort) {\n setLocalPortError(\n validateLocalPort(DEFAULT_LOCAL_PORTS[value])\n );\n }\n } else if (\n value === 'rdp' ||\n value === 'ssh' ||\n value === 'vnc' ||\n value === 'proxy' ||\n value === 'custom'\n ) {\n setConnectionsRateLimiting(true);\n setInitializationTimeLimiting(true);\n setAllowConnectionsFrom('myIp');\n setHandleHTTP(false);\n setAutoClose(true);\n setLocalPort(DEFAULT_LOCAL_PORTS[value]);\n if (!(value === 'custom' && !localPort)) {\n setLocalPortError(\n validateLocalPort(DEFAULT_LOCAL_PORTS[value])\n );\n }\n }\n if ((type === 'http' || value === 'http') && name) {\n setNameError(validateName(name, value));\n }\n };\n\n const onLocalPortChange = e => {\n const { value } = e.target;\n setLocalPort(value);\n setLocalPortError(validateLocalPort(value));\n };\n\n const onIpAddressesChange = (e, index) => {\n const newIpAddresses = [...ipAddresses];\n const newIpAddressErrors = [...ipAddressErrors];\n const isValidIpAddress = validateIpAddress(e.target.value);\n newIpAddresses.splice(index, 1, e.target.value);\n newIpAddressErrors.splice(index, 1, !isValidIpAddress);\n setIpAddresses(newIpAddresses);\n setIpAddressErrors(newIpAddressErrors);\n };\n\n const onAddIpAddress = () => {\n const newIpAddresses = [...ipAddresses];\n const newIpAddressErrors = [...ipAddressErrors];\n newIpAddresses.push('');\n newIpAddressErrors.push(null);\n setIpAddresses(newIpAddresses);\n setIpAddressErrors(newIpAddressErrors);\n };\n const onRemoveIpAddress = i => {\n const newIpAddresses = [...ipAddresses];\n const newIpAddressErrors = [...ipAddressErrors];\n newIpAddresses.splice(i, 1);\n newIpAddressErrors.splice(i, 1);\n setIpAddresses(newIpAddresses);\n setIpAddressErrors(newIpAddressErrors);\n };\n\n const formData = {\n name,\n onNameChange,\n devices,\n deviceId,\n onDeviceIdChange,\n type,\n onTypeChange,\n localPort,\n onLocalPortChange,\n handleHTTP,\n setHandleHTTP,\n connectionsRateLimiting,\n setConnectionsRateLimiting,\n initializationTimeLimiting,\n setInitializationTimeLimiting,\n allowConnectionsFrom,\n setAllowConnectionsFrom,\n ipAddresses,\n onIpAddressesChange,\n autoClose,\n setAutoClose,\n nameError,\n deviceIdError,\n typeError,\n localPortError,\n ipAddressErrors,\n onAddIpAddress,\n onRemoveIpAddress,\n tunnelPassword,\n showPassword,\n setTunnelPassword,\n setShowPassword\n };\n\n return (\n \n \n {tunnel ? 'Edit Tunnel' : 'Create Tunnel'}\n \n \n
\n \n
\n {withStartAction && (\n \n <>\n
\n \n {' '}\n \n {INFO_TEXT_ABOUT_TUNNEL_RELOAD}\n
\n \n \n
\n )}\n
\n \n {withStartAction && (\n \n
\n {' '}\n
\n {INFO_TEXT_ABOUT_TUNNEL_RELOAD}\n
\n
\n
\n )}\n
\n \n {tunnel\n ? withStartAction\n ? 'Save and Reload'\n : 'Save'\n : 'Add'}\n \n \n \n \n );\n};\n\nAddOrEditTunnel.propTypes = {\n classes: PropTypes.object.isRequired,\n fullScreen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n onTunnelReady: PropTypes.func.isRequired,\n tunnel: PropTypes.object,\n devices: PropTypes.array,\n handleStartClick: PropTypes.func,\n deviceAvailabilityStatus: PropTypes.string,\n actions: PropTypes.shape({\n getDevices: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n })\n};\n\nconst mapStateToProps = createStructuredSelector({\n devices: selectDevices()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n getDevices,\n setGlobalMessageError\n});\n\nexport default withMobileDialog()(\n withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(AddOrEditTunnel)\n )\n);\n","import { createSelector } from 'reselect';\nimport { ALL_TUNNEL_TYPES } from '../constants/tunnels';\n\nexport const selectLocalState = () => state => state.tunnels;\n\nexport const getSearchQuery = () =>\n createSelector(\n selectLocalState(),\n ({ searchQuery }) => searchQuery\n );\n\nexport const getFilters = () =>\n createSelector(\n selectLocalState(),\n ({ filters }) => filters\n );\n\nexport const getUiFilters = () =>\n createSelector(\n selectLocalState(),\n ({ uiFilters }) => uiFilters\n );\n\nexport const getNoFilters = () =>\n createSelector(\n selectLocalState(),\n tunnels => {\n const filters = tunnels.filters.find(f => f.property === 'type');\n const uiFilters = tunnels.uiFilters.find(f => f.value !== 'all');\n const searchFilter = tunnels.searchQuery;\n return !!(\n !searchFilter &&\n !uiFilters &&\n (filters.length === 0 ||\n filters.length === ALL_TUNNEL_TYPES.length)\n );\n }\n );\nexport const getTunnelStatuses = () =>\n createSelector(\n selectLocalState(),\n ({ statuses }) => statuses.data\n );\n","import { useEffect, useRef } from 'react';\n\nexport default function useUnmounted() {\n const unMounted = useRef(false);\n useEffect(\n () => () => {\n unMounted.current = true;\n },\n []\n );\n return unMounted;\n}\n","import React, { useState, useMemo, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport { withStyles } from '@material-ui/core/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport StartIcon from '@material-ui/icons/PlayArrow';\nimport StopIcon from '@material-ui/icons/Stop';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Tooltip from '@material-ui/core/Tooltip/Tooltip';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions/DialogActions';\nimport Dialog from '@material-ui/core/Dialog/Dialog';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\nimport moment from 'moment';\nimport { IconButton } from '@material-ui/core';\nimport {\n subscribeToTopic,\n unsubscribeFromTopic,\n removeListener,\n addListener\n} from '../../utils/mqtt';\nimport { bytesToSize } from '../../utils/helpers';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport AddOrEditTunnel from '../Tunnels/Modal/AddOrEditTunnel';\nimport Star from './Star';\nimport store from '../../store/get-store';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport { MQTT_ENV } from '../../constants/api-constants';\nimport { getTunnelStatuses } from '../../selectors/tunnels-selectors';\nimport Authorities from '../../containers/Authorities';\nimport {\n DELETE_TUNNEL_ACTION_AUTH,\n EDIT_TUNNEL_ACTION_AUTH\n} from '../../constants/authorities';\nimport { openTunnel, stopTunnel, updateTunnel } from '../../api/tunnel-api';\nimport useUnmounted from '../../hooks/use-unmount';\n\nconst { dispatch } = store;\n\nconst styles = () => ({\n tunnelItem: {\n borderBottom: '1px dashed #cccccc'\n },\n itemWrapper: {\n flexDirection: 'row',\n display: 'flex',\n margin: '5px 0',\n minWidth: '500px',\n alignItems: 'center'\n },\n tunnelItemLeftPart: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-around',\n flex: 1,\n height: 70\n },\n tunnelItemLeftPartTop: {\n flexDirection: 'row',\n display: 'flex',\n alignItems: 'center'\n },\n tunnelItemLeftPartBottom: {\n display: 'flex',\n paddingLeft: 5\n },\n tooltipText: {\n fontSize: '11px'\n },\n sshTunnelUrl: {\n display: 'flex',\n flexDirection: 'row',\n flex: 3,\n alignItems: 'center',\n margin: 0,\n overflow: 'hidden'\n },\n sshTunnelUrlInner: {\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n color: '#9c27b0',\n padding: 5,\n fontFamily: 'Roboto',\n fontWeight: 500,\n fontSize: '0.85em'\n },\n generatedNameWrapperItem: {\n display: 'flex',\n flexDirection: 'column',\n flex: 3,\n alignItems: 'baseline',\n margin: 0\n },\n generatedNameItem: {\n padding: '5px',\n textTransform: 'none'\n },\n tunnelName: {\n flex: 2,\n paddingLeft: 5,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n overflow: 'hidden'\n },\n tunnelNameInner: {\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n favouriteWrapper: {\n marginRight: 5\n },\n deviceName: {\n flex: 2,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 5,\n overflow: 'hidden'\n },\n deviceNameInner: {\n lineHeight: '24px',\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n sshTunnelUrlTooltip: {\n cursor: 'pointer'\n },\n tunnelActionButtonsWrapper: {\n width: 248,\n display: 'flex',\n flexDirection: 'row-reverse',\n paddingRight: 30,\n alignItems: 'center'\n },\n port: {\n paddingLeft: 5,\n width: 100,\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n tunnelActionIcon: {\n color: '#9c27b0'\n },\n disabledTunnelActionIcon: {\n color: '#ecb4f5'\n },\n circularWrapper: {\n padding: 8,\n width: 48,\n height: 32,\n textAlign: 'center'\n },\n colorGreen: {\n fill: '#61bd4f'\n },\n colorYellow: {\n fill: '#f2d600'\n },\n colorRed: {\n fill: '#eb5a46'\n },\n lastSeenIcon: {\n fontSize: 12,\n marginBottom: 2\n }\n});\n\nconst TunnelItem = ({\n classes,\n tunnel,\n tunnel: {\n _id,\n id,\n name,\n localPort,\n handleHTTP,\n deviceId,\n type,\n favourite,\n dashUrl,\n slashUrl,\n deviceName,\n clientPort,\n status,\n startTime,\n stopTime,\n engine: { address } = {},\n options\n } = {},\n tunnelDelete,\n onTunnelReady,\n loggedInUser,\n reloadingTunnelsInProcess,\n stoppingTunnelsInProcess,\n devicesStatuses,\n tunnelsStatuses\n}) => {\n const unMounted = useUnmounted();\n const [openDeleteConfirmDialog, setOpenDeleteConfirmDialog] = useState(\n false\n );\n const [editTunnel, setEditTunnel] = useState(false);\n const [\n changeTunnelStateInProcess,\n setChangeTunnelStateInProcess\n ] = useState(false);\n const [tooltipCopiedTime, setTooltipCopiedTime] = useState(null);\n const [tooltipTitle, setTooltipTitle] = useState(\n type === 'ssh' ? 'Copy ssh command' : 'Copy address'\n );\n const [tooltipOpenState, setTooltipOpenState] = useState(false);\n const [doRestartAfterEditing, setDoRestartAfterEditing] = useState(false);\n\n useEffect(\n () => () => {\n const topic = `user--${loggedInUser._id}/server`;\n unsubscribeFromTopic(topic);\n },\n [loggedInUser]\n );\n\n const determineAvailability = lastSeen => {\n const newDate = Date.now();\n\n if (!lastSeen) {\n return 'offline';\n }\n\n const diffMs = newDate - lastSeen;\n const diffMins = Math.round(diffMs / (1000 * 60));\n if (diffMins > 10) {\n return 'offline';\n }\n if (diffMins > 3) {\n return 'away';\n }\n return 'online';\n };\n const subscribeToTopicCallback = (editedTunnel, messageActionName) => {\n const fn = (t, message) => {\n const action = JSON.parse(message);\n if (action && action.type === 'NOTIFY_USER') {\n const { payload } = action;\n const { tunnelId, action: actionName } = payload;\n if (\n tunnelId === id &&\n actionName === messageActionName &&\n t === `${MQTT_ENV}/user--${loggedInUser._id}/server`\n ) {\n onTunnelReady({ data: { ...editedTunnel } });\n removeListener(fn);\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n }\n };\n addListener(fn);\n const topic = `user--${loggedInUser._id}/server`;\n subscribeToTopic(topic);\n };\n const lastSeen = useMemo(\n () => {\n let ls;\n try {\n const statuses = devicesStatuses[tunnel.deviceId];\n if (statuses) {\n const data = JSON.parse(statuses);\n ls = data ? data.lastSeen : undefined;\n }\n } catch {}\n return ls;\n },\n [devicesStatuses, tunnel.deviceId]\n );\n\n const availabilityStatus = useMemo(\n () => (lastSeen ? determineAvailability(lastSeen) : 'offline'),\n [lastSeen]\n );\n\n const lastSeenIndicatorClassName = useMemo(\n () => {\n switch (availabilityStatus) {\n case 'online':\n return classes.colorGreen;\n case 'away':\n return classes.colorYellow;\n default:\n return classes.colorRed;\n }\n },\n [availabilityStatus]\n );\n\n const lastSeenIndicatorTooltipMessage = useMemo(\n () => (lastSeen ? moment(lastSeen).fromNow() : 'offline'),\n [lastSeen]\n );\n\n const tunnelUsageData = useMemo(\n () => {\n let result = '';\n const currentTunnelStatus = tunnelsStatuses.find(\n ts => ts._id === _id\n );\n const { rx_bytes: rxBytes, tx_bytes: txBytes } =\n (currentTunnelStatus &&\n currentTunnelStatus.info &&\n currentTunnelStatus.info.networks &&\n currentTunnelStatus.info.networks.eth0) ||\n {};\n if (\n (Number(rxBytes) || rxBytes === 0) &&\n (Number(txBytes) || txBytes === 0)\n ) {\n result = bytesToSize(Number(rxBytes) + Number(txBytes));\n }\n return result;\n },\n [tunnelsStatuses]\n );\n\n const sshTunnelUrl = address\n ? `${address}:${clientPort}`\n : 'Tunnel not started';\n const sshTunnelUrlClipboardText =\n type === 'ssh'\n ? `ssh -p ${clientPort} username@${address}`\n : `${address}:${clientPort}`;\n\n const handleStartClick = () => {\n setChangeTunnelStateInProcess(true);\n openTunnel({\n tunnelId: id,\n options,\n deviceId\n }).subscribe(\n res => {\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback(res.data.tunnel, 'start_tunnel');\n } else {\n dispatch(setGlobalMessageError(\"Can't start tunnel\"));\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n },\n () => {\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n );\n };\n\n useEffect(\n () => {\n if (doRestartAfterEditing) {\n setDoRestartAfterEditing(false);\n handleStartClick();\n }\n },\n [doRestartAfterEditing]\n );\n\n const handleStopClick = () => {\n setChangeTunnelStateInProcess(true);\n stopTunnel(id, { deviceId, type }).subscribe(\n res => {\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback(res.data.tunnel, 'stop_tunnel');\n } else {\n dispatch(setGlobalMessageError(\"Can't stop tunnel\"));\n setChangeTunnelStateInProcess(false);\n }\n },\n () => {\n setChangeTunnelStateInProcess(false);\n }\n );\n };\n\n useEffect(\n () => {\n if (\n reloadingTunnelsInProcess &&\n status === 'started' &&\n availabilityStatus === 'online'\n ) {\n handleStartClick();\n }\n if (\n stoppingTunnelsInProcess &&\n status === 'started' &&\n availabilityStatus === 'online'\n ) {\n handleStopClick();\n }\n },\n [\n reloadingTunnelsInProcess,\n stoppingTunnelsInProcess,\n status,\n availabilityStatus\n ]\n );\n\n const handleEditClick = () => {\n setEditTunnel(true);\n };\n\n const handleFavouriteClick = () => {\n updateTunnel(id, {\n name,\n localPort,\n handleHTTP,\n deviceId,\n type,\n favourite: !favourite\n }).subscribe(\n tunnel => onTunnelReady(tunnel),\n () => {\n dispatch(setGlobalMessageError('Something went wrong.'));\n }\n );\n };\n\n const handleDeleteClick = () => {\n setOpenDeleteConfirmDialog(true);\n };\n\n const handleDelete = () => {\n tunnelDelete(tunnel.id);\n };\n\n const closeDeleteTunnelConfirmation = () => {\n setOpenDeleteConfirmDialog(false);\n };\n\n const closeEditTunnelModal = () => {\n setEditTunnel(false);\n };\n\n const onSshTunnelUrlCopyComplete = () => {\n setTooltipCopiedTime(Date.now());\n setTooltipTitle(\n type === 'ssh' ? 'Copied ssh command' : 'Copied address'\n );\n };\n\n const onTooltipClose = () => {\n setTooltipOpenState(false);\n };\n\n const onTooltipOpen = () => {\n let tooltipTitleData = tooltipTitle;\n if (Date.now() - tooltipCopiedTime > 3 * 1000) {\n tooltipTitleData =\n type === 'ssh' ? 'Copy ssh command' : 'Copy address';\n }\n setTooltipOpenState(true);\n setTooltipTitle(tooltipTitleData);\n };\n\n const restartTunnel = () => {\n setDoRestartAfterEditing(true);\n };\n\n return (\n
\n
\n
\n
\n
\n
\n \n
\n
\n {name}\n
\n
\n {deviceName && (\n
\n \n \n \n
\n {deviceName}\n
\n
\n )}\n {!deviceName && (\n
\n {type === 'proxy' ? (\n \n Proxy settings are fixed for all\n devices. You can change this\n option from Settings page.\n
\n }\n placement=\"right\"\n className={classes.deviceNameInner}\n >\n \n All Devices\n
\n \n ) : (\n
\n Not Specified\n
\n )}\n
\n )}\n {type !== 'http' && (\n
\n {address && type !== 'proxy' ? (\n \n {tooltipTitle}\n
\n {sshTunnelUrlClipboardText}\n
\n }\n placement=\"right\"\n className={classNames(\n classes.sshTunnelUrlInner,\n classes.sshTunnelUrlTooltip\n )}\n >\n \n \n {sshTunnelUrl}\n
\n \n \n ) : (\n
\n {sshTunnelUrl}\n
\n )}\n
\n )}\n {type === 'http' && (\n
\n {dashUrl && (\n \n Click to open the link\n
\n }\n placement=\"right\"\n className={classNames(\n classes.sshTunnelUrlInner,\n classes.sshTunnelUrlTooltip\n )}\n >\n {\n if (\n changeTunnelStateInProcess ||\n status === 'stopped'\n ) {\n return props.children;\n }\n return (\n \n {props.children}\n \n );\n }}\n >\n {`https://${dashUrl}`}\n \n \n )}\n {slashUrl && false && (\n \n Click to open the link\n
\n }\n placement=\"right\"\n className={classNames(\n classes.sshTunnelUrlInner,\n classes.sshTunnelUrlTooltip\n )}\n >\n (\n \n {props.children}\n \n )}\n >\n {`https://${slashUrl}`}\n \n \n )}\n \n )}\n \n {!!(tunnelUsageData || startTime) && (\n
\n {status === 'started' ? (\n <>\n {startTime && (\n \n Started{' '}\n {moment(startTime).fromNow()}\n
\n )}\n \n ) : (\n <>\n {startTime && (\n \n Last time started{' '}\n {moment(startTime).fromNow()}\n \n )}\n {stopTime && (\n \n Stopped {moment(stopTime).fromNow()}\n \n )}\n \n )}\n {tunnelUsageData && (\n \n Data transferred: {tunnelUsageData}\n \n )}\n \n )}\n \n
{localPort}
\n
\n \n \n \n \n \n \n \n \n \n \n {changeTunnelStateInProcess ? (\n
\n \n
\n ) : (\n <>\n {(status === 'stopped' || !status) && (\n \n \n \n )}\n {status === 'started' && (\n <>\n \n \n \n \n \n \n \n )}\n \n )}\n
\n \n {editTunnel && (\n \n )}\n {openDeleteConfirmDialog && (\n \n Delete tunnel\n \n \n Are you sure want to delete {name}{' '}\n tunnel?\n \n \n \n \n Delete\n \n \n Close\n \n \n \n )}\n \n );\n};\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser(),\n tunnelsStatuses: getTunnelStatuses()\n});\n\nTunnelItem.propTypes = {\n classes: PropTypes.object.isRequired,\n tunnel: PropTypes.shape({\n id: PropTypes.string,\n _id: PropTypes.string,\n name: PropTypes.string,\n localPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n handleHTTP: PropTypes.bool,\n deviceId: PropTypes.string,\n type: PropTypes.string,\n favourite: PropTypes.bool,\n engine: PropTypes.shape({\n address: PropTypes.string\n }),\n dashUrl: PropTypes.string,\n slashUrl: PropTypes.string,\n deviceName: PropTypes.string,\n clientPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n status: PropTypes.string,\n startTime: PropTypes.number,\n stopTime: PropTypes.number,\n options: PropTypes.object\n }).isRequired,\n tunnelDelete: PropTypes.func.isRequired,\n onTunnelReady: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n reloadingTunnelsInProcess: PropTypes.bool,\n stoppingTunnelsInProcess: PropTypes.bool,\n devicesStatuses: PropTypes.object.isRequired,\n tunnelsStatuses: PropTypes.array.isRequired\n};\n\nexport default connect(mapStateToProps)(\n withMobileDialog()(withStyles(styles)(TunnelItem))\n);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport DialogTitle from '@material-ui/core/DialogTitle/DialogTitle';\n\nconst styles = () => ({\n dialog: {\n '@media (min-width: 600px)': {\n height: '375px',\n minWidth: '550px',\n maxWidth: '550px'\n },\n '@media (min-height: 450px)': {\n height: '450px'\n }\n },\n dialogContent: {\n // padding: '0',\n paddingTop: '0!important',\n padding: '0px 24px',\n minHeight: '215px',\n height: '215px',\n display: 'flex'\n },\n accessingInfoWrapper: {\n padding: '0px 24px'\n },\n dialogActions: {\n padding: '13px 20px',\n margin: 0\n },\n addButton: {\n margin: '0 4px'\n }\n});\n\nfunction ProxyTunnelInfo(props) {\n const { classes, close, fullScreen, message } = props;\n return (\n \n Proxy Tunnel Info\n \n {message || ''}\n \n \n \n \n \n );\n}\nProxyTunnelInfo.propTypes = {\n classes: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired,\n fullScreen: PropTypes.bool.isRequired,\n message: PropTypes.string\n};\n\nexport default withMobileDialog()(withStyles(styles)(ProxyTunnelInfo));\n","import React, { useState, useMemo, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\n\nimport StartIcon from '@material-ui/icons/PlayArrow';\n\nimport LinkIcon from '@material-ui/icons/Link';\nimport StopIcon from '@material-ui/icons/Stop';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\n\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\n\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport IconButton from '@material-ui/core/IconButton';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport MenuItem from '@material-ui/core/MenuItem/MenuItem';\nimport Menu from '@material-ui/core/Menu/Menu';\nimport Dialog from '@material-ui/core/Dialog/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions/DialogActions';\nimport Button from '@material-ui/core/Button/Button';\nimport Tooltip from '@material-ui/core/Tooltip/Tooltip';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\nimport moment from 'moment';\nimport {\n subscribeToTopic,\n unsubscribeFromTopic,\n removeListener,\n addListener\n} from '../../utils/mqtt';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport AddOrEditTunnel from '../Tunnels/Modal/AddOrEditTunnel';\nimport Star from './Star';\nimport ProxyTunnelInfo from '../Tunnels/Modal/ProxyTunnelInfo';\nimport store from '../../store/get-store';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport { MQTT_ENV } from '../../constants/api-constants';\nimport { bytesToSize } from '../../utils/helpers';\nimport { getTunnelStatuses } from '../../selectors/tunnels-selectors';\nimport Authorities from '../../containers/Authorities';\nimport {\n EDIT_TUNNEL_ACTION_AUTH,\n DELETE_TUNNEL_ACTION_AUTH\n} from '../../constants/authorities';\nimport { updateTunnel, openTunnel, stopTunnel } from '../../api/tunnel-api';\nimport useUnmounted from '../../hooks/use-unmount';\n\nconst { dispatch } = store;\n\nconst styles = () => ({\n tunnelItem: {\n borderBottom: '1px dashed #cccccc'\n },\n itemWrapper: {\n flexDirection: 'row',\n display: 'flex',\n marginTop: 2,\n fontSize: 14,\n alignItems: 'center'\n },\n tunnelItemLeftPartBottom: {\n display: 'flex',\n paddingLeft: 5,\n marginBottom: 2\n },\n tooltipText: {\n fontSize: '11px'\n },\n generatedNameItem: {\n padding: '5px',\n textTransform: 'none'\n },\n tunnelName: {\n flex: 2,\n padding: '5px 0 5px 5px',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n overflow: 'hidden'\n },\n tunnelNameInner: {\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n favouriteWrapper: {\n marginRight: 5\n },\n deviceName: {\n flex: 3,\n padding: '5px 0 5px 5px',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n overflow: 'hidden'\n },\n deviceNameInner: {\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n port: {\n padding: '5px 0 5px 5px',\n width: 50,\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n tunnelActionIcon: {\n cursor: 'pointer',\n color: '#9c27b0'\n },\n moreActionsButton: {\n padding: 5\n },\n circularIcon: {\n padding: '5px 5px 6px 6px',\n width: 34\n },\n colorGreen: {\n fill: '#61bd4f'\n },\n colorYellow: {\n fill: '#f2d600'\n },\n colorRed: {\n fill: '#eb5a46'\n },\n lastSeenIcon: {\n fontSize: 12\n }\n});\n\nconst TunnelItemMobile = ({\n classes,\n tunnel,\n tunnel: {\n _id,\n id,\n name,\n localPort,\n handleHTTP,\n deviceId,\n type,\n favourite,\n dashUrl,\n slashUrl,\n deviceName,\n status,\n startTime,\n stopTime,\n options\n } = {},\n tunnelDelete,\n onTunnelReady,\n loggedInUser,\n reloadingTunnelsInProcess,\n stoppingTunnelsInProcess,\n devicesStatuses,\n tunnelsStatuses\n}) => {\n const unMounted = useUnmounted();\n const [showProxyTunnelInfo, setShowProxyTunnelInfo] = useState(false);\n const [proxyTunnelInfoMessage, setProxyTunnelInfoMessage] = useState('');\n const [tunnelActionsAnchorEl, setTunnelActionsAnchorEl] = useState(null);\n const [openDeleteConfirmDialog, setOpenDeleteConfirmDialog] = useState(\n false\n );\n const [editTunnel, setEditTunnel] = useState(false);\n const [\n changeTunnelStateInProcess,\n setChangeTunnelStateInProcess\n ] = useState(false);\n const [doRestartAfterEditing, setDoRestartAfterEditing] = useState(false);\n const tunnelUsageData = useMemo(\n () => {\n let result = '';\n const currentTunnelStatus = tunnelsStatuses.find(\n ts => ts._id === _id\n );\n const { rx_bytes: rxBytes, tx_bytes: txBytes } =\n (currentTunnelStatus &&\n currentTunnelStatus.info &&\n currentTunnelStatus.info.networks &&\n currentTunnelStatus.info.networks.eth0) ||\n {};\n if (\n (Number(rxBytes) || rxBytes === 0) &&\n (Number(txBytes) || txBytes === 0)\n ) {\n result = bytesToSize(Number(rxBytes) + Number(txBytes));\n }\n return result;\n },\n [tunnelsStatuses]\n );\n const lastSeen = useMemo(\n () => {\n let ls;\n try {\n const statuses = devicesStatuses[tunnel.deviceId];\n if (statuses) {\n const data = JSON.parse(statuses);\n ls = data ? data.lastSeen : undefined;\n }\n } catch {}\n return ls;\n },\n [devicesStatuses, tunnel.deviceId]\n );\n\n const determineAvailability = lastSeen => {\n const newDate = Date.now();\n\n if (!lastSeen) {\n return 'offline';\n }\n\n const diffMs = newDate - lastSeen;\n const diffMins = Math.round(diffMs / (1000 * 60));\n if (diffMins > 10) {\n return 'offline';\n }\n if (diffMins > 3) {\n return 'away';\n }\n return 'online';\n };\n\n const availabilityStatus = useMemo(\n () => (lastSeen ? determineAvailability(lastSeen) : 'offline'),\n [lastSeen]\n );\n\n const lastSeenIndicatorClassName = useMemo(\n () => {\n switch (availabilityStatus) {\n case 'online':\n return classes.colorGreen;\n case 'away':\n return classes.colorYellow;\n default:\n return classes.colorRed;\n }\n },\n [availabilityStatus]\n );\n const lastSeenIndicatorTooltipMessage = useMemo(\n () => (lastSeen ? moment(lastSeen).fromNow() : 'offline'),\n [lastSeen]\n );\n\n useEffect(\n () => () => {\n const topic = `user--${loggedInUser._id}/server`;\n unsubscribeFromTopic(topic);\n },\n [loggedInUser]\n );\n\n const handleEditClick = () => {\n setEditTunnel(true);\n setTunnelActionsAnchorEl(null);\n };\n\n const handleFavouriteClick = () => {\n updateTunnel(id, {\n name,\n localPort,\n handleHTTP,\n deviceId,\n type,\n favourite: !favourite\n }).subscribe(\n tunnel => onTunnelReady(tunnel),\n () => {\n dispatch(setGlobalMessageError('Something went wrong.'));\n }\n );\n };\n\n const handleMenuClose = () => {\n setTunnelActionsAnchorEl(null);\n };\n\n const handleProxyTunnelConfigurationInfoClick = () => {\n setShowProxyTunnelInfo(true);\n setProxyTunnelInfoMessage(\n 'Proxy settings are fixed for all devices. You can change this option from Settings page.'\n );\n handleMenuClose();\n };\n\n const handleDeleteClick = () => {\n setOpenDeleteConfirmDialog(true);\n handleMenuClose();\n };\n\n const handleDelete = () => {\n tunnelDelete(tunnel.id);\n };\n\n const closeDeleteTunnelConfirmation = () => {\n setOpenDeleteConfirmDialog(false);\n };\n\n const closeEditTunnelModal = () => {\n setEditTunnel(false);\n };\n\n const closeProxyTunnelInfo = () => {\n setShowProxyTunnelInfo(false);\n setProxyTunnelInfoMessage('');\n handleMenuClose();\n };\n\n const subscribeToTopicCallback = (editedTunnel, messageActionName) => {\n const fn = (t, message) => {\n const action = JSON.parse(message);\n if (action && action.type === 'NOTIFY_USER') {\n const { payload } = action;\n const { tunnelId, action: actionName } = payload;\n if (\n tunnelId === id &&\n actionName === messageActionName &&\n t === `${MQTT_ENV}/user--${loggedInUser._id}/server`\n ) {\n onTunnelReady({ data: { ...editedTunnel } });\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n removeListener(fn);\n }\n }\n };\n addListener(fn);\n const topic = `user--${loggedInUser._id}/server`;\n subscribeToTopic(topic);\n };\n\n const handleStartClick = () => {\n setTunnelActionsAnchorEl(null);\n setChangeTunnelStateInProcess(true);\n openTunnel({\n tunnelId: id,\n options,\n deviceId\n }).subscribe(\n res => {\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback(res.data.tunnel, 'start_tunnel');\n } else {\n dispatch(setGlobalMessageError(\"Can't start tunnel\"));\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n },\n () => {\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n );\n };\n\n useEffect(\n () => {\n if (doRestartAfterEditing) {\n setDoRestartAfterEditing(false);\n handleStartClick();\n }\n },\n [doRestartAfterEditing]\n );\n\n const handleStopClick = () => {\n setTunnelActionsAnchorEl(null);\n setChangeTunnelStateInProcess(true);\n stopTunnel(id, { deviceId, type }).subscribe(\n res => {\n if (res && res.data && res.data.tunnel) {\n subscribeToTopicCallback(res.data.tunnel, 'stop_tunnel');\n } else {\n dispatch(setGlobalMessageError(\"Can't stop tunnel\"));\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n },\n () => {\n if (!unMounted.current) {\n setChangeTunnelStateInProcess(false);\n }\n }\n );\n };\n useEffect(\n () => {\n if (\n reloadingTunnelsInProcess &&\n status === 'started' &&\n availabilityStatus === 'online'\n ) {\n handleStartClick();\n }\n if (\n stoppingTunnelsInProcess &&\n status === 'started' &&\n availabilityStatus === 'online'\n ) {\n handleStopClick();\n }\n },\n [\n reloadingTunnelsInProcess,\n stoppingTunnelsInProcess,\n status,\n availabilityStatus\n ]\n );\n const handleMenuClick = event => {\n setTunnelActionsAnchorEl(event.currentTarget);\n };\n\n const restartTunnel = () => {\n setDoRestartAfterEditing(true);\n };\n\n return (\n
\n \n
\n
\n
\n \n
\n
{name}
\n
\n {deviceName && (\n
\n \n \n \n
\n {deviceName}\n
\n
\n )}\n {!deviceName && (\n
\n {type === 'proxy' ? (\n \n Proxy settings are fixed for all\n devices. You can change this option\n from Settings page.\n
\n }\n placement=\"right\"\n className={classes.deviceNameInner}\n >\n
\n All Devices\n
\n \n ) : (\n
\n Not Specified\n
\n )}\n
\n )}\n
{localPort}
\n
\n {!changeTunnelStateInProcess ? (\n \n \n \n ) : (\n
\n \n
\n )}\n \n {type === 'http' && status === 'started' && (\n \n \n \n \n \n )}\n {type === 'http' && false && (\n \n \n \n \n \n )}\n {(status === 'stopped' || !status) && (\n \n \n \n )}\n {status === 'started' && (\n \n \n \n )}\n {status === 'started' && (\n \n \n \n )}\n \n \n \n \n \n {!deviceName && !deviceId && (\n {}\n }\n >\n \n \n )}\n \n \n \n \n \n \n
\n
\n {editTunnel && (\n \n )}\n {showProxyTunnelInfo && (\n \n )}\n {openDeleteConfirmDialog && (\n \n Delete tunnel\n \n \n Are you sure want to delete{' '}\n {name} tunnel?\n \n \n \n \n Delete\n \n \n Close\n \n \n \n )}\n {!!(tunnelUsageData || startTime) && (\n
\n {status === 'started' ? (\n <>\n {startTime && (\n \n Started {moment(startTime).fromNow()}\n
\n )}\n \n ) : (\n <>\n {startTime && (\n \n Last time started{' '}\n {moment(startTime).fromNow()}\n \n )}\n {stopTime && (\n \n Stopped {moment(stopTime).fromNow()}\n \n )}\n \n )}\n\n {tunnelUsageData && (\n
\n Data: {tunnelUsageData}\n
\n )}\n \n )}\n \n \n );\n};\n\nTunnelItemMobile.propTypes = {\n classes: PropTypes.object.isRequired,\n tunnel: PropTypes.shape({\n id: PropTypes.string,\n _id: PropTypes.string,\n name: PropTypes.string,\n localPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n handleHTTP: PropTypes.bool,\n deviceId: PropTypes.string,\n type: PropTypes.string,\n favourite: PropTypes.bool,\n engine: PropTypes.shape({\n address: PropTypes.string\n }),\n dashUrl: PropTypes.string,\n slashUrl: PropTypes.string,\n deviceName: PropTypes.string,\n clientPort: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n status: PropTypes.string,\n startTime: PropTypes.number,\n stopTime: PropTypes.number,\n options: PropTypes.object\n }).isRequired,\n tunnelDelete: PropTypes.func.isRequired,\n onTunnelReady: PropTypes.func.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n reloadingTunnelsInProcess: PropTypes.bool,\n stoppingTunnelsInProcess: PropTypes.bool,\n devicesStatuses: PropTypes.object.isRequired,\n tunnelsStatuses: PropTypes.array.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser(),\n tunnelsStatuses: getTunnelStatuses()\n});\nexport default connect(mapStateToProps)(\n withMobileDialog()(withStyles(styles)(TunnelItemMobile))\n);\n","import React, { useEffect, useState } from 'react';\nimport Hidden from '@material-ui/core/Hidden';\nimport PropTypes from 'prop-types';\nimport connect from 'react-redux/es/connect/connect';\nimport { createStructuredSelector } from 'reselect';\nimport TunnelItem from '../../components/shared/tunnelItem';\nimport TunnelItemMobile from '../../components/shared/tunnelItemMobile';\n\nimport { selectDevicesStatusesData } from '../../selectors/devices-selectors';\n\nconst TunnelItemHOC = ({\n tunnel: tunnelFromProps,\n tunnelDelete,\n reloadingTunnelsInProcess,\n stoppingTunnelsInProcess,\n devicesStatuses\n}) => {\n const [tunnel, setTunnel] = useState(tunnelFromProps);\n\n useEffect(\n () => {\n setTunnel(tunnelFromProps);\n },\n [tunnelFromProps]\n );\n\n const onTunnelReady = tunnel => {\n setTunnel(tunnel.data);\n };\n\n return (\n
\n \n \n \n \n \n \n
\n );\n};\n\nTunnelItemHOC.propTypes = {\n tunnel: PropTypes.object.isRequired,\n tunnelDelete: PropTypes.func,\n reloadingTunnelsInProcess: PropTypes.bool,\n stoppingTunnelsInProcess: PropTypes.bool,\n devicesStatuses: PropTypes.object.isRequired\n};\n// selectDevicesStatusesData\nconst mapStateToProps = createStructuredSelector({\n devicesStatuses: selectDevicesStatusesData()\n});\n\nexport default connect(\n mapStateToProps,\n null\n)(TunnelItemHOC);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n// import { connect } from 'react-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport AddIcon from '@material-ui/icons/Add';\nimport EmptyLists from '../../components/EmptyLists';\n\nimport image from '../../assets/images/tunnel.jpg';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n height: `calc(100vh - 64px)`,\n justifyContent: 'center',\n alignItems: 'center',\n flex: 1\n },\n\n flexGrow: {\n flex: '1 1 auto'\n },\n\n addModalContent: {\n position: 'absolute',\n width: 500,\n top: '50%',\n left: '50%',\n transform: `translate(-50%, -50%)`,\n backgroundColor: '#fff'\n }\n});\n\nclass EmptyTunnels extends Component {\n handleAddClick = () => {\n const { onAddTunnel } = this.props;\n if (onAddTunnel) {\n onAddTunnel();\n }\n };\n\n render() {\n const { classes } = this.props;\n\n return (\n
\n ,\n \n \n \n ]}\n message=\"You do not seem to have any tunnel yet!\"\n messageTitle=\"\"\n image={image}\n mediaType=\"horizontal\"\n />\n
\n );\n }\n}\n\nEmptyTunnels.propTypes = {\n classes: PropTypes.object.isRequired,\n onAddTunnel: PropTypes.func\n};\n\nexport default withStyles(styles)(EmptyTunnels);\n","import React, { useMemo } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport {\n FormControl,\n InputLabel,\n Input,\n FormControlLabel,\n Checkbox,\n Select,\n MenuItem,\n Hidden\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { wrapActionCreators } from '../../../utils/container-util';\nimport {\n getFilters,\n getUiFilters,\n getSearchQuery\n} from '../../../selectors/tunnels-selectors';\nimport {\n updateTunnelUiFilters,\n updateTunnelFilter,\n updateTunnelSearch\n} from '../../../actions/tunnel-actions';\nimport { ALL_TUNNEL_TYPES } from '../../../constants/tunnels';\n\nconst styles = () => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n padding: '0 5px'\n },\n sectionRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: '5px 0',\n '@media (max-width: 959px)': {\n flexDirection: 'column'\n }\n },\n uiFilters: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n '@media (max-width: 959px)': {\n width: '100%'\n }\n }\n});\n\nconst Filters = ({\n classes,\n filters,\n uiFilters,\n searchQuery,\n actions: { updateTunnelFilter, updateTunnelUiFilters, updateTunnelSearch }\n}) => {\n // console.log('filters render');\n const existingFilters = useMemo(\n () =>\n filters.filter(f => f.property === 'type').map(f => f.values)[0] ||\n [],\n [filters]\n );\n // const [searchValue, setSearchValue] = useState(searchQuery);\n // const updateSearch = debounce(() => {\n // console.log(searchValue);\n // updateTunnelSearch(searchValue);\n // }, 3000);\n return (\n
\n
\n \n Search\n {\n updateTunnelSearch(e.target.value);\n }}\n />\n \n
\n
\n \n Filters:{' '}\n {ALL_TUNNEL_TYPES.map(type => (\n -1}\n onChange={() =>\n updateTunnelFilter({\n property: 'type',\n value: type\n })\n }\n value={type}\n />\n }\n label={type}\n />\n ))}\n
\n \n Devices\n f.property === 'deviceStatus'\n ).value\n }\n onChange={e =>\n updateTunnelUiFilters({\n property: 'deviceStatus',\n value: e.target.value\n })\n }\n >\n All\n Online\n Away\n Offline\n \n \n \n Tunnels\n f.property === 'tunnelStatus'\n ).value\n }\n onChange={e =>\n updateTunnelUiFilters({\n property: 'tunnelStatus',\n value: e.target.value\n })\n }\n >\n All\n Started\n Stopped\n \n \n
\n
\n \n \n }\n renderValue={() => existingFilters.join(', ')}\n >\n {ALL_TUNNEL_TYPES.map(type => (\n \n -1\n }\n onChange={() => {\n updateTunnelFilter({\n property: 'type',\n value: type\n });\n }}\n value={type}\n />\n }\n label={type}\n />\n \n ))}\n \n \n
\n \n f.property === 'deviceStatus'\n ).value\n }\n onChange={e =>\n updateTunnelUiFilters({\n property: 'deviceStatus',\n value: e.target.value\n })\n }\n >\n All devices\n \n Online devices\n \n Away devices\n \n Offline devices\n \n \n \n \n f.property === 'tunnelStatus'\n ).value\n }\n onChange={e =>\n updateTunnelUiFilters({\n property: 'tunnelStatus',\n value: e.target.value\n })\n }\n >\n All tunnels\n \n Started tunnels\n \n \n Stopped tunnels\n \n \n \n
\n
\n
\n
\n );\n};\n\nFilters.propTypes = {\n classes: PropTypes.object.isRequired,\n filters: PropTypes.array.isRequired,\n uiFilters: PropTypes.array.isRequired,\n searchQuery: PropTypes.string.isRequired,\n actions: PropTypes.shape({\n updateTunnelFilter: PropTypes.func.isRequired,\n updateTunnelUiFilters: PropTypes.func.isRequired,\n updateTunnelSearch: PropTypes.func.isRequired\n })\n};\n\nconst mapStateToProps = createStructuredSelector({\n filters: getFilters(),\n uiFilters: getUiFilters(),\n searchQuery: getSearchQuery()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n updateTunnelFilter,\n updateTunnelUiFilters,\n updateTunnelSearch\n});\n\nexport default withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Filters)\n);\n","// @flow\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport LoadingOverlay from 'react-loading-overlay';\nimport { withStyles } from '@material-ui/core/styles';\nimport Hidden from '@material-ui/core/Hidden';\nimport Button from '@material-ui/core/Button/Button';\nimport Fab from '@material-ui/core/Fab/Fab';\nimport AddIcon from '@material-ui/icons/Add';\nimport Menu from '@material-ui/core/Menu/Menu';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport IconButton from '@material-ui/core/IconButton/IconButton';\nimport MenuItem from '@material-ui/core/MenuItem/MenuItem';\nimport classNames from 'classnames';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport TunnelItem from '../../containers/shared/tunnelItem';\nimport EmptyTunnels from '../../containers/Tunnels/EmptyTunnels';\nimport AddOrEditTunnel from './Modal/AddOrEditTunnel';\nimport Authorities from '../../containers/Authorities';\nimport { ADD_TUNNEL_ACTION_AUTH } from '../../constants/authorities';\nimport Filters from './Filters/Filters';\nimport { getNoFilters } from '../../selectors/tunnels-selectors';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { resetAllTunnelFilters } from '../../actions/tunnel-actions';\nimport FilterIcon from '../../assets/svg/filter.svg';\n\nconst styles = theme => ({\n tunnelsPage: {\n width: '100vw',\n maxHeight: 'calc(100vh - 64px)',\n height: 'calc(100vh - 64px)',\n flexDirection: 'column'\n },\n formControl: {\n margin: '0px 5px'\n },\n tunnelPageWrapper: {\n flex: 1,\n overflowY: 'auto',\n overflowScrolling: 'touch',\n WebkitOverflowScrolling: 'touch',\n padding: '20px',\n maxWidth: 1200,\n margin: '0 auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n tunnelItemsWrapper: {\n maxWidth: 1200,\n margin: '0 auto',\n padding: '20px 0',\n display: 'flex',\n flexDirection: 'column'\n },\n tunnelItemsHeader: {\n flexDirection: 'row',\n display: 'flex',\n margin: '0',\n padding: '10px 0px',\n alignItems: 'center',\n backgroundColor: '#fafafa',\n fontSize: 18\n },\n tunnelItemsHeaderMobile: {\n fontSize: 15\n },\n columnHeader: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n padding: '5px 0px 5px 5px'\n },\n headerTunnelName: {\n flex: 2\n },\n headerDeviceName: {\n flex: 2\n },\n headerDeviceNameMobile: {\n flex: 3\n },\n headerUrl: {\n flex: 3\n },\n headerLocalPort: {\n width: 100\n },\n headerLocalPortMobile: {\n width: 50\n },\n headerActions: {\n width: 200,\n textAlign: 'center'\n },\n tunnelsHeaderActionsMobileIcon: {\n width: 34\n },\n tunnelItemsBody: {\n flex: 1,\n overflow: 'overlay',\n marginRight: '-20px',\n paddingRight: '20px',\n [theme.breakpoints.down('md')]: {\n paddingRight: 0,\n marginRight: '0px !important'\n }\n },\n noTunnelsFound: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '20px 0px'\n },\n noTunnelsFoundText: {\n fontWeight: 'bold',\n marginBottom: 10\n },\n resetButton: {\n marginBottom: 10\n },\n addButton: {\n position: 'fixed',\n right: 16,\n bottom: 16,\n [theme.breakpoints.down('md')]: {\n right: 5,\n bottom: 5\n }\n },\n tunnelPageHeader: {\n display: 'flex',\n flexDirection: 'column'\n },\n blankSpace: {\n height: 35\n },\n tunnelsHeaderActionsIcon: {\n marginRight: 8\n }\n});\n\nconst Tunnels = ({\n classes,\n allTunnelsCount,\n tunnels = [],\n getTunnelsError,\n getTunnelsLoading,\n tunnelDelete,\n onTunnelReady,\n stoppingTunnelsInProcess,\n reloadingTunnelsInProcess,\n onStopAllRunningTunnelsDone,\n onReloadAllRunningTunnelsDone,\n onStopAllRunningTunnels,\n onReloadAllRunningTunnels,\n noFilters,\n actions: { resetAllTunnelFilters }\n}) => {\n const [showAddTunnelModal, setShowAddTunnelModal] = useState(false);\n const [\n tunnelsHeaderActionsAnchorEl,\n setTunnelsHeaderActionsAnchorEl\n ] = useState(null);\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const [dialogMode, setDialogMode] = useState('');\n\n const closeAddTunnelModal = () => {\n setShowAddTunnelModal(false);\n };\n\n const renderTunnelItem = tunnel => {\n const { id } = tunnel;\n\n return (\n
\n \n
\n );\n };\n\n const handleShowAddTunnelModal = () => {\n setShowAddTunnelModal(true);\n };\n\n const stopAllRunningTunnelsClick = () => {\n setTunnelsHeaderActionsAnchorEl(null);\n setShowConfirmDialog(true);\n setDialogMode('stop');\n };\n\n const reloadAllRunningTunnelsClick = () => {\n setTunnelsHeaderActionsAnchorEl(null);\n setShowConfirmDialog(true);\n setDialogMode('reload');\n };\n\n const handleTunnelsHeaderMenuClick = event => {\n setTunnelsHeaderActionsAnchorEl(event.currentTarget);\n };\n\n const handleTunnelsHeaderMenuClose = () => {\n setTunnelsHeaderActionsAnchorEl(null);\n };\n\n const doDialogAction = () => {\n if (dialogMode === 'stop') {\n onStopAllRunningTunnels();\n setTimeout(() => {\n onStopAllRunningTunnelsDone();\n }, 0);\n } else if (dialogMode === 'reload') {\n onReloadAllRunningTunnels();\n setTimeout(() => {\n onReloadAllRunningTunnelsDone();\n }, 0);\n }\n setShowConfirmDialog(false);\n };\n\n const noResults = !getTunnelsLoading && tunnels.length === 0 && !noFilters;\n const showHeader = !(!getTunnelsLoading && !allTunnelsCount);\n const header = (\n
\n \n \n
\n \n Tunnel Name\n
\n \n Device Name\n
\n \n Connection properties\n \n \n Local port\n \n \n Actions\n \n \n \n \n \n \n Reload all running tunnels\n \n \n Stop all running tunnels\n \n \n \n \n \n \n \n Tunnel Name\n \n \n Device Name\n \n \n Port\n \n \n \n \n \n \n Reload all running tunnels\n \n \n Stop all running tunnels\n \n \n \n \n \n );\n const confirmDialogContent = (\n <>\n \n {dialogMode === 'stop' ? 'Stop tunnels' : 'Reload tunnels'}\n \n \n \n Are you sure want to{' '}\n {dialogMode === 'stop' ? 'stop all ' : 'reload all '}{' '}\n running tunnels?\n \n \n \n \n Ok\n \n setShowConfirmDialog(false)}\n >\n Close\n \n \n \n );\n return (\n \n
\n {!getTunnelsError && (\n
\n {showHeader ? (\n <>\n
\n {header}\n
\n {noResults && (\n \n \n No tunnels found\n \n \n Reset filters\n \n
\n )}\n {tunnels.map(tunnel =>\n renderTunnelItem(tunnel)\n )}\n \n \n \n
\n {allTunnelsCount !== tunnels.length && (\n \n \n \n
\n You have{' '}\n {`${allTunnelsCount -\n tunnels.length}`}{' '}\n filtered tunnel\n {allTunnelsCount -\n tunnels.length >\n 1 && 's'}\n .\n
\n {!!tunnels.length && (\n \n Reset filters\n \n )}\n
\n \n \n
\n {`${allTunnelsCount -\n tunnels.length}`}{' '}\n filtered tunnel\n {allTunnelsCount -\n tunnels.length >\n 1 && 's'}\n .\n
\n {!!tunnels.length && (\n \n Reset\n \n )}\n
\n
\n )}\n
\n \n ) : (\n \n )}\n \n )}\n \n \n \n \n \n {showAddTunnelModal && (\n \n )}\n \n {showConfirmDialog && (\n <>\n \n setShowConfirmDialog(false)}\n aria-labelledby=\"delete-device-title\"\n >\n {confirmDialogContent}\n \n {' '}\n \n setShowConfirmDialog(false)}\n aria-labelledby=\"delete-device-title\"\n >\n {confirmDialogContent}\n \n \n \n )}\n \n );\n};\n\nTunnels.propTypes = {\n classes: PropTypes.object.isRequired,\n allTunnelsCount: PropTypes.number,\n tunnels: PropTypes.array,\n getTunnelsError: PropTypes.string.isRequired,\n getTunnelsLoading: PropTypes.bool.isRequired,\n tunnelDelete: PropTypes.func.isRequired,\n onTunnelReady: PropTypes.func.isRequired,\n stoppingTunnelsInProcess: PropTypes.bool.isRequired,\n reloadingTunnelsInProcess: PropTypes.bool.isRequired,\n onStopAllRunningTunnels: PropTypes.func.isRequired,\n onReloadAllRunningTunnels: PropTypes.func.isRequired,\n onStopAllRunningTunnelsDone: PropTypes.func.isRequired,\n onReloadAllRunningTunnelsDone: PropTypes.func.isRequired,\n noFilters: PropTypes.bool.isRequired,\n actions: PropTypes.shape({\n resetAllTunnelFilters: PropTypes.func.isRequired\n })\n};\n\nconst mapStateToProps = createStructuredSelector({\n noFilters: getNoFilters()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n resetAllTunnelFilters\n});\n\nexport default withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Tunnels)\n);\n","// @flow\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { createStructuredSelector } from 'reselect';\nimport connect from 'react-redux/es/connect/connect';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport Tunnels from '../../components/Tunnels';\nimport { deleteCustomTunnel, getTunnels } from '../../api/tunnel-api';\nimport LoadingPane from '../../components/LoadingPane';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { getTunnelStatuses } from '../../actions/tunnel-actions';\nimport {\n getFilters,\n getSearchQuery,\n getUiFilters\n} from '../../selectors/tunnels-selectors';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport { selectDevicesStatusesData } from '../../selectors/devices-selectors';\nimport useUnmounted from '../../hooks/use-unmount';\n\nconst TunnelsHOC = ({\n searchQuery,\n uiFilters,\n filters,\n actions: { getTunnelStatuses, setGlobalMessageError },\n devicesStatuses\n}) => {\n const unMounted = useUnmounted();\n const [allTunnelsCount, setAllTunnelsCount] = useState(0);\n const [tunnels, setTunnels] = useState([]);\n const [getTunnelsError, setGetTunnelsError] = useState('');\n const [getTunnelsLoading, setGetTunnelsLoading] = useState(false);\n const [firstTime, setFirstTime] = useState(true);\n const [stoppingTunnelsInProcess, setStoppingTunnelsInProcess] = useState(\n false\n );\n const [reloadingTunnelsInProcess, setReloadingTunnelsInProcess] = useState(\n false\n );\n const [filteredTunnels, setFilteredTunnels] = useState(tunnels);\n const sortTunnels = tunnels =>\n tunnels.sort((t1, t2) => {\n if (\n (t1.favourite && t2.favourite) ||\n (!t1.favourite && !t2.favourite)\n ) {\n return 0;\n }\n if (!t1.favourite && t2.favourite) {\n return 1;\n }\n return -1;\n });\n useEffect(() => {\n getTunnelStatuses();\n const intervalId = setInterval(getTunnelStatuses, 60000);\n return () => {\n clearTimeout(intervalId);\n };\n }, []);\n\n const getTunnelsData = (s, f) => {\n setGetTunnelsLoading(true);\n getTunnels(s, f).subscribe(\n tunnels => {\n if (!unMounted.current) {\n setGetTunnelsError('');\n setGetTunnelsLoading(false);\n setFirstTime(false);\n if (tunnels && tunnels.data) {\n setTunnels(sortTunnels(tunnels.data.tunnels));\n setAllTunnelsCount(tunnels.data.allTunnelsCount);\n }\n }\n },\n err => {\n let message = 'Something went wrong';\n if (err) message = parseErrorMessage(err);\n setGlobalMessageError(constructGlobalErrorMessage(message));\n if (!unMounted.current) {\n setGetTunnelsError(message);\n setGetTunnelsLoading(false);\n setFirstTime(false);\n }\n }\n );\n };\n\n useEffect(() => {\n getTunnelsData(searchQuery, filters);\n }, []);\n\n const getTunnelsDataDebounce = useCallback(\n debounce((s, f) => {\n getTunnelsData(s, f);\n }, 300),\n []\n );\n\n useEffect(\n () => {\n if (firstTime) return;\n getTunnelsDataDebounce(searchQuery, filters);\n },\n [searchQuery, filters]\n );\n\n const determineAvailability = lastSeen => {\n const newDate = Date.now();\n\n if (!lastSeen) {\n return 'offline';\n }\n\n const diffMs = newDate - lastSeen;\n const diffMins = Math.round(diffMs / (1000 * 60));\n if (diffMins > 10) {\n return 'offline';\n }\n if (diffMins > 3) {\n return 'away';\n }\n return 'online';\n };\n\n const uiFilterFn = t => {\n const tunnelStatusFilter = uiFilters.find(\n uiF => uiF.property === 'tunnelStatus'\n ).value;\n const deviceStatusFilter = uiFilters.find(\n uiF => uiF.property === 'deviceStatus'\n ).value;\n const { status } = t;\n let deviceStatus = 'offline';\n let lastSeen;\n try {\n const statuses = devicesStatuses[t.deviceId];\n if (statuses) {\n const data = JSON.parse(statuses);\n lastSeen = data ? data.lastSeen : undefined;\n }\n } catch {\n //\n }\n if (lastSeen) {\n deviceStatus = determineAvailability(lastSeen);\n }\n return (\n (tunnelStatusFilter === status || tunnelStatusFilter === 'all') &&\n (deviceStatusFilter === deviceStatus ||\n deviceStatusFilter === 'all')\n );\n };\n\n useEffect(\n () => {\n setFilteredTunnels(tunnels.filter(uiFilterFn));\n },\n [tunnels, uiFilters]\n );\n\n const onStopAllRunningTunnels = () => {\n setStoppingTunnelsInProcess(true);\n };\n\n const onReloadAllRunningTunnels = () => {\n setReloadingTunnelsInProcess(true);\n };\n\n const onReloadAllRunningTunnelsDone = () => {\n setReloadingTunnelsInProcess(false);\n };\n\n const onStopAllRunningTunnelsDone = () => {\n setStoppingTunnelsInProcess(false);\n };\n\n const tunnelDelete = tunnelId =>\n deleteCustomTunnel(tunnelId).subscribe(\n () => {\n const newTunnels = [...tunnels];\n const deletedTunnelIndex = newTunnels.indexOf(\n newTunnels.find(t => t.id === tunnelId)\n );\n if (deletedTunnelIndex > -1) {\n newTunnels.splice(deletedTunnelIndex, 1);\n }\n setTunnels(newTunnels);\n setAllTunnelsCount(allTunnelsCount - 1);\n },\n err => {\n let message = 'Something went wrong';\n if (err) message = parseErrorMessage(err);\n setGlobalMessageError(constructGlobalErrorMessage(message));\n }\n );\n\n const onTunnelReady = tunnel => {\n if (tunnel) {\n setTunnels([tunnel.data.tunnel, ...tunnels]);\n setAllTunnelsCount(allTunnelsCount + 1);\n }\n };\n\n // const mergeUpdatedTunnels = updatedTunnels => {\n // const newTunnels = [...tunnels];\n // updatedTunnels.forEach(tunnel => {\n // const updatedTunnelIndex = newTunnels.indexOf(\n // newTunnels.find(t => t.id === tunnel.id)\n // );\n // if (updatedTunnelIndex > -1) {\n // newTunnels.splice(updatedTunnelIndex, 1, tunnel);\n // }\n // });\n // setTunnels(newTunnels);\n // setStoppingTunnelsInProcess(false);\n // };\n\n return (\n <>\n {firstTime && getTunnelsLoading ? (\n \n
Loading
\n
\n ) : (\n \n )}\n \n );\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser(),\n searchQuery: getSearchQuery(),\n filters: getFilters(),\n uiFilters: getUiFilters(),\n devicesStatuses: selectDevicesStatusesData()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError,\n getTunnelStatuses\n});\n\nTunnelsHOC.propTypes = {\n actions: PropTypes.shape({\n getTunnelStatuses: PropTypes.func.isRequired,\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired,\n searchQuery: PropTypes.string.isRequired,\n loggedInUser: PropTypes.object.isRequired,\n filters: PropTypes.array.isRequired,\n uiFilters: PropTypes.array.isRequired,\n devicesStatuses: PropTypes.object.isRequired\n};\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(TunnelsHOC)\n);\n","// @flow\nimport { api, makeGet } from '../utils/http-util';\n\nconst API_URL = {\n GET_ORG_ROLES: () => api`v1/roles/organization`\n};\n\nexport default function getOrganizationRoles() {\n return makeGet(API_URL.GET_ORG_ROLES());\n}\n","// @flow\nimport React, { useState, useEffect } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport TextField from '@material-ui/core/es/TextField/TextField';\nimport DialogActions from '@material-ui/core/es/DialogActions/DialogActions';\nimport Button from '@material-ui/core/es/Button/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport FormControl from '@material-ui/core/es/FormControl/FormControl';\nimport InputLabel from '@material-ui/core/es/InputLabel/InputLabel';\nimport Select from '@material-ui/core/es/Select/Select';\nimport MenuItem from '@material-ui/core/es/MenuItem/MenuItem';\nimport Input from '@material-ui/core/es/Input/Input';\nimport PropTypes from 'prop-types';\nimport { Checkbox, ListItemText, Popover, Typography } from '@material-ui/core';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport { connect } from 'react-redux';\nimport HelpIcon from '@material-ui/icons/HelpOutline';\nimport getOrganizationRoles from '../../api/role-api';\nimport { getDevices } from '../../api/device-api';\nimport { getTunnels } from '../../api/tunnel-api';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\nimport { validateEmail } from '../../utils/validations';\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n minWidth: 500\n },\n formControl: {\n flex: 1,\n marginLeft: 5,\n marginRight: 5\n },\n dialogActions: {\n padding: '13px 20px',\n margin: 0\n }\n};\nconst EditInviteUser = ({\n classes,\n close,\n mode,\n onInvite,\n onEdit,\n userForEdit,\n actions: { setGlobalMessageError }\n}) => {\n const [email, setEmail] = useState(userForEdit.email || '');\n const [roles, setRoles] = useState([]);\n const [role, setRole] = useState(userForEdit.roleId || '');\n const [devices, setDevices] = useState([]);\n const [tunnels, setTunnels] = useState([]);\n const [selectedDevices, setSelectedDevices] = useState(\n userForEdit.devices || []\n );\n const [selectedTunnels, setSelectedTunnels] = useState(\n userForEdit.tunnels || []\n );\n const [accessAllDevices, setAccessAllDevices] = useState(\n userForEdit.accessAllDevices || false\n );\n const [accessAllTunnels, setAccessAllTunnels] = useState(\n userForEdit.accessAllTunnels || false\n );\n const [helpAnchorEl, setHelpAnchorEl] = useState(null);\n\n useEffect(() => {\n let canceled = false;\n getOrganizationRoles().subscribe(\n data => {\n if (!canceled) {\n setRoles(data.data);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n useEffect(() => {\n let canceled = false;\n getDevices().subscribe(\n data => {\n if (!canceled) {\n setDevices(data.data.devices);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n useEffect(() => {\n let canceled = false;\n getTunnels().subscribe(\n data => {\n if (!canceled) {\n setTunnels(data.data.tunnels);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n }, []);\n const handleEmailChange = event => {\n setEmail(event.target.value);\n };\n\n const handleSave = () => {\n if (mode === 'invite') {\n onInvite({\n email,\n roleId: role,\n devices: selectedDevices,\n tunnels: selectedTunnels,\n accessAllDevices,\n accessAllTunnels\n });\n } else {\n onEdit({\n email,\n roleId: role,\n tunnels: selectedTunnels,\n devices: selectedDevices,\n accessAllDevices,\n accessAllTunnels\n });\n }\n };\n const renderTunnelsMenuItems = () => {\n const allItem = (\n \n \n \n \n );\n const items = tunnels.map(t => (\n \n -1}\n />\n \n \n ));\n items.unshift(allItem);\n return items;\n };\n const renderDevicesMenuItems = () => {\n const allItem = (\n \n \n \n \n );\n const items = devices.map(d => (\n \n -1}\n />\n \n \n ));\n items.unshift(allItem);\n return items;\n };\n return (\n \n \n {mode === 'invite' ? `Invite user` : `Edit user`}\n \n \n
\n \n \n \n \n \n Role\n setRole(e.target.value)}\n input={}\n >\n {roles.map(r => (\n \n {r.name}\n \n ))}\n \n \n \n
\n \n Devices\n }\n multiple\n value={selectedDevices}\n renderValue={selected =>\n `${selected.length} devices selected`\n }\n onChange={(e, child) => {\n if (child.key === 'all') {\n if (\n selectedDevices.length !==\n devices.length\n ) {\n setSelectedDevices(\n devices.map(d => d._id)\n );\n } else {\n setSelectedDevices([]);\n }\n } else {\n setSelectedDevices(e.target.value);\n }\n }}\n >\n {renderDevicesMenuItems()}\n \n \n \n Tunnels\n }\n multiple\n value={selectedTunnels}\n renderValue={selected =>\n `${selected.length} tunnels selected`\n }\n onChange={(e, child) => {\n if (child.key === 'all') {\n if (\n selectedTunnels.length !==\n tunnels.length\n ) {\n setSelectedTunnels(\n tunnels.map(t => t._id)\n );\n } else {\n setSelectedTunnels([]);\n }\n } else {\n setSelectedTunnels(e.target.value);\n }\n }}\n >\n {renderTunnelsMenuItems()}\n \n \n
\n
\n \n {\n setAccessAllDevices(checked);\n }}\n name=\"checkedB\"\n color=\"primary\"\n />\n }\n label=\"Access to all devices\"\n />\n setHelpAnchorEl(e.currentTarget)}\n id=\"devices\"\n />\n
\n \n {\n setAccessAllTunnels(checked);\n }}\n name=\"checkedB\"\n color=\"primary\"\n />\n }\n label=\"Access to all tunnels\"\n />\n setHelpAnchorEl(e.currentTarget)}\n />\n
\n {!!helpAnchorEl && (\n setHelpAnchorEl(null)}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center'\n }}\n >\n \n {`If checked, all ${\n helpAnchorEl.id\n } (including which will be added later) will be allowed.`}\n \n \n )}\n \n \n
\n \n \n Save\n \n \n \n \n );\n};\nEditInviteUser.propTypes = {\n classes: PropTypes.object.isRequired,\n close: PropTypes.func.isRequired,\n mode: PropTypes.string.isRequired,\n onInvite: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n userForEdit: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default withMobileDialog()(\n withStyles(styles)(\n connect(\n null,\n mapDispatchToProps\n )(EditInviteUser)\n )\n);\n","import React from 'react';\nimport { createStyles, WithStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport { Theme } from '@material-ui/core/styles/createMuiTheme';\nimport { withStyles } from '@material-ui/core/styles';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\nimport {\n AutoSizer,\n Column,\n Index,\n RowMouseEventHandlerParams,\n SortDirection,\n Table,\n TableCellProps,\n TableCellRenderer,\n TableHeaderProps\n} from 'react-virtualized';\nimport type { IGridColumn } from '../../../interface/Grid';\n\nconst styles = (theme: Theme) =>\n createStyles({\n table: {\n fontFamily: theme.typography.fontFamily,\n '& *': {\n outline: 'none'\n }\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n boxSizing: 'border-box'\n },\n tableRow: {\n cursor: 'pointer'\n },\n tableRowHover: {\n '&:hover': {\n backgroundColor: theme.palette.grey[200]\n }\n },\n tableCell: {\n width: '100%',\n flex: 1,\n [theme.breakpoints.down('sm')]: {\n padding: '2px 4px!important'\n },\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '& *': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }\n },\n noClick: {\n cursor: 'initial'\n }\n });\n\ninterface IMuiVirtualizedTableProps {\n rowCount: number;\n columns: IGridColumn[];\n headerHeight?: number;\n rowHeight?: number;\n onRowClick: (info: RowMouseEventHandlerParams) => void;\n rowClassName?: string | ((info: Index) => string);\n sort?: () => void;\n rowGetter: (index: { index: number }) => any;\n}\n\nconst MuiVirtualizedTable = ({\n classes,\n columns,\n rowCount,\n headerHeight = 56,\n rowHeight = 56,\n onRowClick,\n rowClassName,\n sort,\n rowGetter\n}: WithStyles & IMuiVirtualizedTableProps) => {\n const getRowClassName = ({ index }: Index) =>\n classNames(classes.tableRow, classes.flexContainer, rowClassName, {\n [classes.tableRowHover]: index !== -1 && onRowClick !== null\n });\n const cellRenderer = ({\n cellData,\n columnIndex\n }: {\n cellData: any,\n columnIndex: number | null\n }) => (\n \n {cellData}\n \n );\n const headerRenderer = ({\n label,\n columnIndex,\n dataKey,\n sortBy,\n sortDirection = 'ASC'\n }: { columnIndex: number } & TableHeaderProps) => {\n const direction: { ASC: 'asc', DESC: 'desc' } = {\n [SortDirection.ASC]: 'asc',\n [SortDirection.DESC]: 'desc'\n };\n\n const inner =\n !columns[columnIndex].disableSort && sort !== null ? (\n \n {label}\n \n ) : (\n label\n );\n\n return (\n \n {inner}\n \n );\n };\n return (\n \n {({ height, width }) => (\n \n {columns.map(\n (\n {\n cellContentRenderer = null,\n className,\n dataKey,\n ...other\n },\n index\n ) => {\n let renderer: TableCellRenderer;\n if (cellContentRenderer !== null) {\n renderer = (\n cellRendererProps: TableCellProps\n ) =>\n cellRenderer({\n cellData: cellContentRenderer(\n cellRendererProps\n ),\n columnIndex: index\n });\n } else {\n renderer = cellRenderer;\n }\n\n return (\n \n headerRenderer({\n ...headerProps,\n columnIndex: index\n })\n }\n className={classNames(\n classes.flexContainer,\n className\n )}\n cellRenderer={renderer}\n dataKey={dataKey}\n {...other}\n />\n );\n }\n )}\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(MuiVirtualizedTable);\n","import { IconButton, Theme, withStyles } from '@material-ui/core';\nimport React from 'react';\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\nimport createStyles from '@material-ui/core/styles/createStyles';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport LastPageIcon from '@material-ui/icons/LastPage';\nimport type { IGridPagination } from '../../../interface/Grid';\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n width: '100%',\n overflowY: 'auto'\n },\n table: {\n minWidth: 1020\n },\n tableWrapper: {\n overflowX: 'auto'\n },\n deviceOrTunnelsLength: {\n width: 50,\n fontWeight: 800,\n float: 'left',\n paddingTop: 15\n },\n pagingActionsStyles: {\n flexShrink: 0,\n color: theme.palette.text.secondary,\n marginLeft: 5 * 2.5\n }\n });\n\nconst TablePaginationActions = ({\n classes,\n count,\n page,\n rowsPerPage,\n onChangePage\n}: IGridPagination) => {\n const handleFirstPageButtonClick = event => {\n onChangePage(event, 0);\n };\n const handleBackButtonClick = event => {\n onChangePage(event, page - 1);\n };\n const handleNextButtonClick = event => {\n onChangePage(event, page + 1);\n };\n const handleLastPageButtonClick = event => {\n onChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\n };\n\n return (\n
\n \n \n \n \n \n \n = Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"Next Page\"\n >\n \n \n = Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"Last Page\"\n >\n \n \n
\n );\n};\n\nexport default withStyles(styles)(TablePaginationActions);\n","import { IconButton, Theme, withStyles } from '@material-ui/core';\nimport React from 'react';\nimport classNames from 'classnames';\nimport createStyles from '@material-ui/core/styles/createStyles';\nimport { lighten } from '@material-ui/core/styles/colorManipulator';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport TextField from '@material-ui/core/es/TextField/TextField';\nimport type { IGridToolbar } from '../../../interface/Grid';\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n paddingRight: 5,\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n borderBottom: '1px solid rgba(224, 224, 224, 1)'\n },\n highlight:\n theme.palette.type === 'light'\n ? {\n color: theme.palette.primary.dark,\n backgroundColor: lighten(theme.palette.primary.main, 0.85)\n }\n : {\n color: theme.palette.text.primary,\n backgroundColor: theme.palette.secondary.dark\n },\n spacer: {\n flex: '1 1 100%'\n },\n actions: {\n color: theme.palette.text.secondary,\n display: 'flex'\n },\n title: {\n flex: '0 0 auto'\n },\n searchTextField: {\n margin: '0 20px',\n minWidth: 200\n }\n });\n\nconst GridToolbar = ({\n classes,\n numSelected,\n title = '',\n searchValue,\n onSearchValueChange,\n selectedGridToolbarElements\n}: IGridToolbar) => (\n 0\n })}\n >\n
\n {numSelected > 0 ? (\n \n {numSelected} selected\n \n ) : (\n \n {title}\n \n )}\n
\n \n
\n
\n {numSelected > 0 ? (\n <>\n {selectedGridToolbarElements}\n \n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n
\n \n);\n\nexport default withStyles(styles)(GridToolbar);\n","import { createStyles, withStyles } from '@material-ui/core';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Paper from '@material-ui/core/Paper';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport React, { useEffect, useState } from 'react';\nimport { ColumnProps, TableCellProps } from 'react-virtualized';\nimport MuiVirtualizedTable from './VirtualizedTable';\nimport { IGridProps } from '../../../interface/Grid';\nimport TablePaginationActions from './PaginationActions';\nimport GridToolbar from './Toolbar';\n\nconst styles = () =>\n createStyles({\n pagination: {\n position: 'absolute',\n right: 10,\n bottom: 10,\n padding: 0,\n border: 0\n },\n loaderWrapper: {\n display: 'flex',\n justifyContent: 'center',\n padding: '30px'\n }\n });\n\nexport interface IGridColumn extends ColumnProps {\n flexGrow?: number;\n label: string;\n dataKey: string;\n cellContentRenderer?: (\n cellRendererProps: TableCellProps\n ) => React.ReactNode;\n numeric?: boolean;\n}\n\nconst Grid = ({\n classes,\n data,\n isDataLoading,\n columns,\n allDataCount = 0,\n enablePagination = false,\n rowsPerPage = 0,\n rowsPerPageOptions,\n page = 0,\n onChangePage = () => {},\n onChangeRowsPerPage,\n gridToolbarTitle,\n searchValueChange,\n searchValueChangeTimeOutForCall = 1000,\n labelRowsPerPage = 'Rows Per Page',\n showCheckBoxes = false,\n providedTableRowHeight,\n selectedGridToolbarElements,\n rowSelectionChange,\n enableToolbar = false,\n style = {\n height: '100%',\n width: '100%'\n },\n paper = false\n}: IGridProps) => {\n const [isEverSearchValueChanged, setIsEverSearchValueChanged] = useState(\n false\n );\n const [selected, setSelected] = useState([]);\n const [searchValue, setSearchValue] = useState('');\n const [tableRowHeight, setTableRowHeight] = useState(50);\n useEffect(\n () => {\n const handleResize = () => {\n if (providedTableRowHeight) {\n setTableRowHeight(providedTableRowHeight);\n } else if (window.innerWidth < 768) {\n setTableRowHeight(35);\n } else {\n setTableRowHeight(50);\n }\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n },\n [providedTableRowHeight]\n );\n\n useEffect(\n () => {\n let canceled = false;\n let tId: any;\n if (isEverSearchValueChanged) {\n tId = setTimeout(() => {\n if (!canceled) {\n searchValueChange(searchValue.toLowerCase());\n }\n }, searchValueChangeTimeOutForCall);\n }\n return () => {\n if (tId) {\n clearTimeout(tId);\n }\n canceled = true;\n };\n },\n [\n isEverSearchValueChanged,\n searchValue,\n searchValueChange,\n searchValueChangeTimeOutForCall\n ]\n );\n useEffect(\n () => {\n setSelected([]);\n },\n [data]\n );\n\n const rowGetter = ({ index }: { index: number }) => data[index];\n const rowClick = () => {};\n function selectRow(props: TableCellProps) {\n const { rowIndex } = props;\n const selectedIndex = selected.indexOf(rowIndex);\n let newSelected: number[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selected, rowIndex);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selected.slice(1));\n } else if (selectedIndex === selected.length - 1) {\n newSelected = newSelected.concat(selected.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selected.slice(0, selectedIndex),\n selected.slice(selectedIndex + 1)\n );\n }\n setSelected(newSelected);\n if (rowSelectionChange && typeof rowSelectionChange === 'function') {\n rowSelectionChange(props.rowData);\n }\n }\n\n const checkboxCellRenderer: (\n cellRendererProps: TableCellProps\n ) => React.ReactNode = props => {\n const { rowIndex } = props;\n return (\n -1}\n onChange={() => selectRow(props)}\n value=\"checkedB\"\n color=\"primary\"\n />\n );\n };\n\n const firstColumn: IGridColumn = {\n dataKey: 'checkboxes',\n width: 100,\n label: '',\n cellContentRenderer: checkboxCellRenderer\n };\n\n const paddingBottom = enablePagination ? '60px' : 0;\n const paddingTop = enableToolbar ? '64px' : 0;\n const onSearchValueChange = (e: React.ChangeEvent) => {\n const val = e.target.value;\n setSearchValue(val);\n setIsEverSearchValueChanged(true);\n };\n\n if (!paper) {\n return (\n
\n {enableToolbar && (\n \n )}\n {isDataLoading ? (\n
\n \n
\n ) : (\n \n )}\n {enablePagination && (\n \n \n \n \n \n \n
\n )}\n
\n );\n }\n\n return (\n \n {enableToolbar && (\n \n )}\n {isDataLoading ? (\n
\n \n
\n ) : (\n \n )}\n {enablePagination && (\n \n \n \n \n \n \n
\n )}\n
\n );\n};\n\nexport default withStyles(styles)(Grid);\n","// @flow\nimport React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport PropTypes from 'prop-types';\nimport { TableCellProps } from '@material-ui/core/es/TableCell';\nimport Tooltip from '@material-ui/core/es/Tooltip/Tooltip';\nimport { IconButton } from '@material-ui/core';\nimport type { IGridColumn } from '../../interface/Grid';\nimport Grid from '../shared/Grid/Grid';\n\nconst styles = {\n gridWrapper: {\n flex: 1\n },\n actionIcon: {\n // marginRight: 5\n }\n};\n\nconst OrganizationUsers = ({\n classes,\n organizationUsers,\n handelDeleteOrgUser,\n onEditOrgUserClick,\n resendInvitation\n}) => {\n const gridActionsContextRenderer: (\n cellRendererProps: TableCellProps\n ) => React.ReactNode = contextProps => {\n const data = (\n
\n onEditOrgUserClick(contextProps.rowData)}\n >\n \n \n \n handelDeleteOrgUser(contextProps.rowData.email)\n }\n >\n \n \n {contextProps.rowData.status !== 'Accepted' ? (\n {\n const { email } = contextProps.rowData;\n resendInvitation({\n email\n });\n }}\n >\n \n \n ) : (\n ''\n )}\n
\n );\n return data;\n };\n\n const gridEmailContextRenderer: (\n cellRendererProps: TableCellProps\n ) => React.ReactNode = contextProps => {\n const { invitationEmail } = contextProps.rowData;\n const data = (\n
\n {contextProps.cellData}\n {invitationEmail &&\n invitationEmail !== contextProps.cellData && (\n / Invitation Email: {invitationEmail}\n )}\n
\n );\n if (window.innerWidth < 768) {\n return (\n \n {data}\n \n );\n }\n return data;\n };\n\n const gridDefaultContextRenderer: (\n cellRendererProps: TableCellProps\n ) => React.ReactNode = contextProps => {\n const data =
{contextProps.cellData}
;\n if (window.innerWidth < 768) {\n return (\n \n {data}\n \n );\n }\n return data;\n };\n\n const columns: IGridColumn[] = [\n {\n dataKey: 'email',\n width: 300,\n label: 'Email',\n flexGrow: 1,\n flexShrink: 1,\n cellContentRenderer: gridEmailContextRenderer\n },\n {\n dataKey: 'username',\n width: 180,\n label: 'Username',\n flexGrow: 1,\n flexShrink: 1,\n cellContentRenderer: gridDefaultContextRenderer\n },\n {\n dataKey: 'status',\n width: 160,\n label: 'Status',\n flexGrow: 1,\n flexShrink: 1,\n cellContentRenderer: gridDefaultContextRenderer\n },\n {\n dataKey: 'role',\n width: 250,\n label: 'Role',\n flexGrow: 1,\n flexShrink: 1,\n cellContentRenderer: gridDefaultContextRenderer\n },\n {\n dataKey: 'actions',\n width: 150,\n label: 'Actions',\n flexGrow: 1,\n flexShrink: 0,\n cellContentRenderer: gridActionsContextRenderer\n }\n ];\n\n return (\n
\n \n
\n );\n};\nOrganizationUsers.propTypes = {\n classes: PropTypes.object.isRequired,\n organizationUsers: PropTypes.array.isRequired,\n handelDeleteOrgUser: PropTypes.func.isRequired,\n onEditOrgUserClick: PropTypes.func.isRequired,\n resendInvitation: PropTypes.func.isRequired\n};\nexport default withStyles(styles)(OrganizationUsers);\n","// @flow\nimport React, { useState, useEffect } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport {\n Hidden,\n DialogContent,\n DialogTitle,\n Dialog,\n DialogContentText,\n DialogActions,\n Button\n} from '@material-ui/core';\nimport Fab from '@material-ui/core/Fab/Fab';\nimport AddIcon from '@material-ui/icons/Add';\nimport { connect } from 'react-redux';\nimport { updateOrgUserAccess } from '../../api/organization-api';\nimport {\n getOrganizationUser,\n inviteOrgUser,\n deleteOrganizationUser,\n resendInvitationOrgUser\n} from '../../api/users-api';\nimport EditInviteUser from './EditInviteUser';\nimport OrganizationUsers from './OrganizationUsers';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { setGlobalMessageError } from '../../actions/app-actions';\nimport {\n constructGlobalErrorMessage,\n parseErrorMessage\n} from '../../utils/global-message-util';\n\nconst styles = {\n root: {\n display: 'flex',\n // display: 'grid',\n flexDirection: 'column',\n maxHeight: `calc(100vh - 64px)`,\n height: `calc(100vh - 64px)`,\n width: '100vw'\n },\n addButton: {\n position: 'fixed',\n right: 16,\n bottom: 16\n },\n addButtonMobile: {\n position: 'fixed',\n right: 5,\n bottom: 5\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n paddingTop: 5\n },\n dialogActions: {\n padding: '13px 20px',\n margin: 0\n },\n organizationList: {\n width: 150,\n overflowY: 'auto',\n overflowX: 'none'\n },\n noUsersContent: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '28px',\n justifyContent: 'center',\n flex: 1\n },\n flex_1: {\n flex: 1\n }\n};\n\nconst Organization = ({ classes, actions: { setGlobalMessageError } }) => {\n const [doGetOraganizationUsers, setDoGetOraganizationUsers] = useState(\n true\n );\n const [isInviteUserDialogOpen, setIsInviteUserDialogOpen] = useState(false);\n const [organizationUsers, setOrganizationUsers] = useState([]);\n const [editInviteUserPopUpMode, setEditInviteUserPopUpMode] = useState('');\n const [userForEdit, setUserForEdit] = useState({});\n const [emailForDeleteUser, setEmailForDeleteUser] = useState('');\n\n useEffect(\n () => {\n let canceled = false;\n getOrganizationUser().subscribe(\n data => {\n if (!canceled) {\n setOrganizationUsers(data.data);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n return () => {\n canceled = true;\n };\n },\n [doGetOraganizationUsers]\n );\n\n const onInviteUserSave = data => {\n setIsInviteUserDialogOpen(false);\n inviteOrgUser(data).subscribe(\n data => {\n if (data && data.data) {\n setDoGetOraganizationUsers(!doGetOraganizationUsers);\n }\n },\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n const resendInvitation = data => {\n resendInvitationOrgUser(data).subscribe(\n data => {},\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n const onDeleteOrgUserClick = email => {\n setEmailForDeleteUser(email);\n };\n\n const handelDeleteOrgUser = () => {\n deleteOrganizationUser(emailForDeleteUser).subscribe(\n data => {\n if (data && data.data) {\n setEmailForDeleteUser('');\n setDoGetOraganizationUsers(!doGetOraganizationUsers);\n }\n },\n error => {\n setEmailForDeleteUser('');\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n const onEditOrgUserClick = user => {\n setUserForEdit(user);\n setEditInviteUserPopUpMode('edit');\n setIsInviteUserDialogOpen(true);\n };\n\n const onEditOrgUserSave = data => {\n setEditInviteUserPopUpMode('');\n setIsInviteUserDialogOpen(false);\n setUserForEdit({});\n updateOrgUserAccess({ userId: userForEdit.userId, ...data }).subscribe(\n d => {},\n error => {\n setGlobalMessageError(\n constructGlobalErrorMessage(parseErrorMessage(error))\n );\n }\n );\n };\n\n return (\n
\n \n \n {\n setEditInviteUserPopUpMode('invite');\n setIsInviteUserDialogOpen(true);\n }}\n >\n \n \n \n \n {\n setEditInviteUserPopUpMode('invite');\n setIsInviteUserDialogOpen(true);\n }}\n >\n \n \n \n\n {isInviteUserDialogOpen && (\n {\n setEditInviteUserPopUpMode('');\n setUserForEdit({});\n setIsInviteUserDialogOpen(false);\n }}\n />\n )}\n {emailForDeleteUser && (\n setEmailForDeleteUser('')}\n aria-labelledby=\"delete-device-title\"\n >\n Delete user\n \n \n Are you sure want to delete user with{' '}\n {emailForDeleteUser} email?\n \n \n \n \n Delete\n \n setEmailForDeleteUser('')}\n >\n Close\n \n \n \n )}\n
\n );\n};\nOrganization.propTypes = {\n classes: PropTypes.object.isRequired,\n actions: PropTypes.shape({\n setGlobalMessageError: PropTypes.func.isRequired\n }).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError\n});\n\nexport default withStyles(styles)(\n connect(\n null,\n mapDispatchToProps\n )(Organization)\n);\n","// getNetDataReport\nimport { api, makeGet } from '../utils/http-util';\n\nconst API_URL = {\n GET_NET_DATA_REPORT: (type, query) =>\n api`v1/reports/data/net/${type}?${query}`\n};\n\nexport default function getNetDataReport(type, filters, byType) {\n // type: 'devices' | 'tunnels' | 'organizations'\n // query wiil be 'filters[0][property]=type&filters[0][value][0]=http&filters[0][value][1]=rdp&'\n let query = filters.reduce((total, el, i) => {\n const q = `filters[${i}][property]=${el[0]}&filters[${i}][value]=${\n el[1]\n }&`;\n return total + q;\n }, '');\n if (query.charAt(query.length - 1) === '&')\n query = query.slice(0, query.length - 1);\n if (byType) {\n query += `&byType=${byType}`;\n }\n return makeGet(API_URL.GET_NET_DATA_REPORT(type, query));\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable no-plusplus */\n/* eslint-disable no-bitwise */\nexport function lightenDarkenColor(col, amt) {\n let usePound = false;\n\n if (col[0] === '#') {\n col = col.slice(1);\n usePound = true;\n }\n\n const num = parseInt(col, 16);\n\n let r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n let b = ((num >> 8) & 0x00ff) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n let g = (num & 0x0000ff) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function getRandomColor() {\n const letters = '0123456789ABCDEF';\n let color = '#';\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n}\n","export default [\n '#ff0029',\n '#377eb8',\n '#66a61e',\n '#984ea3',\n '#00d2d5',\n '#ff7f00',\n '#7f80cd',\n '#b3e900',\n '#c42e60',\n '#8dd3c7',\n '#80b1d3',\n '#fdb462',\n '#fccde5',\n '#bc80bd',\n '#ffed6f',\n '#c4eaff',\n '#cf8c00',\n '#1b9e77',\n '#d95f02',\n '#e7298a',\n '#e6ab02',\n '#a6761d',\n '#0097ff',\n '#00d067',\n '#f43600',\n '#4ba93b',\n '#5779bb',\n '#927acc',\n '#97ee3f',\n '#bf3947',\n '#9f5b00',\n '#f48758',\n '#8caed6',\n '#f2b94f',\n '#eff26e',\n '#e43872',\n '#d9b100',\n '#9d7a00',\n '#698cff',\n '#d9d9d9',\n '#00d27e',\n '#d06800',\n '#009f82',\n '#c49200',\n '#cbe8ff',\n '#c27eb6',\n '#8cd2ce',\n '#c4b8d9',\n '#f883b0',\n '#a49100',\n '#f48800',\n '#27d0df',\n '#a04a9b'\n];\n","// @flow\nimport React from 'react';\nimport 'date-fns';\nimport PropTypes from 'prop-types';\nimport {\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ComposedChart,\n Cell\n} from 'recharts';\nimport { bytesToSize } from '../../utils/helpers';\n\nconst MainBarChart = ({\n width = 600,\n height = 400,\n data,\n tunnels,\n netDataType,\n animationDuration = 1500\n}) => {\n function withEllipsis(text) {\n if (text && text.length > 9) {\n return `${text.slice(0, 7)}...`;\n }\n return text;\n }\n const CustomizedAxisTickBar = ({ x, y, stroke, payload }) => (\n \n \n {withEllipsis(payload.value)}\n \n \n );\n const CustomTooltip = ({ active, payload, label }) => {\n if (active) {\n const name =\n (payload &&\n payload[0] &&\n payload[0].payload &&\n payload[0].payload.name) ||\n '';\n const usage = bytesToSize(\n (payload && payload[0] && payload[0].value) || 0\n );\n const deviceName =\n (payload &&\n payload[0] &&\n payload[0].payload &&\n tunnels.find(t => t._id === payload[0].payload._id) &&\n tunnels.find(t => t._id === payload[0].payload._id)\n .deviceName) ||\n '';\n\n return (\n \n

{`${\n netDataType === 'tunnels'\n ? 'Tunnel name'\n : 'Device name'\n }: ${name}`}

\n {netDataType === 'tunnels' && (\n

{`Device name: ${deviceName}`}

\n )}\n

{`Usage: ${usage}`}

\n
\n );\n }\n\n return null;\n };\n const getPath = (x, y, width, height) => `M${x},${y + height}\n C${x + width / 3},${y + height} ${x + width / 2},${y +\n height / 3} ${x + width / 2}, ${y}\n C${x + width / 2},${y + height / 3} ${x + (2 * width) / 3},${y +\n height} ${x + width}, ${y + height}\n Z`;\n const TriangleBar = props => {\n const { fill, x, y, width, height } = props;\n\n return (\n \n );\n };\n return (\n \n \n }\n interval={Math.floor(data.length / ((width - 80) / 25))}\n />\n \n } />\n }\n animationDuration={animationDuration}\n >\n {data.map((entry, index) => (\n \n ))}\n \n {/* */}\n \n );\n};\nMainBarChart.propTypes = {\n data: PropTypes.array.isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n tunnels: PropTypes.array.isRequired,\n netDataType: PropTypes.string.isRequired,\n animationDuration: PropTypes.number\n};\n\nexport default MainBarChart;\n","// @flow\nimport React from 'react';\nimport 'date-fns';\nimport PropTypes from 'prop-types';\nimport {\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n AreaChart,\n Area\n} from 'recharts';\nimport { bytesToSize } from '../../utils/helpers';\nimport { lightenDarkenColor } from '../../utils/css-utils';\n\nconst MainAreaChart = ({\n width = 600,\n height = 400,\n data,\n tunnels,\n devices,\n netDataType,\n areaData,\n animationDuration = 1500\n}) => {\n const CustomTooltip = ({ active, payload, label }) => {\n if (active) {\n return (\n \n
\n {new Date(label).toLocaleDateString()}\n
\n {!!payload && payload.length > 10 && (\n
\n {netDataType === 'tunnels' ? 'tunnels' : 'devices'}{' '}\n with the most usage\n
\n )}\n {payload &&\n payload\n .sort(\n (a, b) => (!!a && !!b && b.value - a.value) || 0\n )\n .slice(0, Math.ceil((height - 62) / 18))\n .map((p, i) => {\n const target =\n netDataType === 'tunnels'\n ? tunnels\n : devices;\n const current = target.find(\n t =>\n t._id ===\n (p &&\n p.dataKey &&\n p.dataKey.split('_')[0])\n );\n return (\n {`${(current && current.name) ||\n ''} / ${(current &&\n current.deviceName) ||\n ''} : ${bytesToSize(\n p.value || 0\n )}`}\n );\n })}\n \n );\n }\n\n return null;\n };\n const CustomizedAxisTick = ({ x, y, stroke, payload }) => (\n \n \n {new Date(payload.value).toLocaleDateString(undefined, {\n month: '2-digit',\n day: '2-digit',\n year: '2-digit'\n })}\n \n \n );\n\n return (\n \n } />\n \n }\n interval={Math.floor(data.length / ((width - 80) / 25))}\n dataKey=\"unit\"\n // tickCount={10}\n />\n \n \n {areaData.map((current, i) => {\n const stroke =\n (data && data[0] && data[0][`${current._id}_color`]) || '';\n const fill = lightenDarkenColor(stroke, 20);\n return (\n \n );\n })}\n \n );\n};\nMainAreaChart.propTypes = {\n data: PropTypes.array.isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n tunnels: PropTypes.array.isRequired,\n devices: PropTypes.array.isRequired,\n areaData: PropTypes.array.isRequired,\n netDataType: PropTypes.string.isRequired,\n animationDuration: PropTypes.number\n};\n\nexport default MainAreaChart;\n","// @flow\nimport React, { useEffect, useState, useRef } from 'react';\nimport 'date-fns';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport {\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n CircularProgress,\n Card,\n Typography,\n Checkbox,\n FormControlLabel\n} from '@material-ui/core';\nimport { MuiPickersUtilsProvider, DatePicker } from 'material-ui-pickers';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport getNetDataReport from '../../api/reports';\nimport { getTunnels } from '../../api/tunnel-api';\nimport { getDevices } from '../../api/device-api';\nimport useUnmounted from '../../hooks/use-unmount';\nimport useElementSize from '../../hooks/element-size';\nimport useWindowSize from '../../hooks/window-size';\nimport { getRandomColor } from '../../utils/css-utils';\nimport colors from '../../constants/chart-color-palette';\nimport MainBarChart from './main-bar-chart';\nimport MainAreaChart from './main-area-chart';\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'row',\n maxHeight: `calc(100vh - 64px)`,\n height: `calc(100vh - 64px)`,\n width: '100vw',\n padding: 20,\n alignItems: 'flex-start'\n },\n filters: {\n height: '100%',\n flex: 1,\n display: 'flex',\n flexDirection: 'column'\n },\n formControl: {\n margin: 5\n },\n charts: {\n height: '100%',\n flex: 4,\n display: 'flex',\n width: '100%',\n justifyContent: 'space-around',\n flexWrap: 'wrap',\n overflowY: 'auto'\n },\n cardTop: {\n marginBottom: 10,\n height: 'fit-content'\n },\n cardOnBottom: {\n marginTop: 10,\n height: 'fit-content'\n }\n};\nconst Usage = ({ classes, actions: {} }) => {\n const unMounted = useUnmounted();\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState([]);\n const [barChartData, setBarChartData] = useState([]);\n const [lineChartData, setLineChartData] = useState([]);\n const [netDataType, setNetDataType] = useState('tunnels');\n const [devices, setDevices] = useState([]);\n const [tunnels, setTunnels] = useState([]);\n const [deviceId, setDeviceId] = useState('-1');\n const [tunnelId, setTunnelId] = useState('-1');\n const [startDate, setStartDate] = useState(\n Date.now() - 1000 * 60 * 60 * 24 * 30 * 3\n );\n const [byType] = useState('day');\n const [endtDate, setEndtDate] = useState(Date.now());\n const [advancedFiltersData, setAdvancedFiltersData] = useState([]);\n const [\n advancedFiltersSelectedData,\n setAdvancedFiltersSelectedData\n ] = useState([]);\n const chartContainerRef = useRef(null);\n const {\n elementHeight: chartContainerHeight,\n elementWidth: chartContainerWidth\n } = useElementSize(chartContainerRef && chartContainerRef.current);\n const { windowWidth } = useWindowSize();\n useEffect(\n () => {\n setLoading(true);\n const filters = [['startDate', startDate], ['endDate', endtDate]];\n if (deviceId !== '-1') {\n filters.push(['deviceId', deviceId]);\n }\n if (tunnelId !== '-1') {\n filters.push(['tunnelId', tunnelId]);\n }\n\n getNetDataReport(netDataType, filters, byType).subscribe(\n d => {\n if (!unMounted.current) {\n setData((d && d.data) || []);\n setLoading(false);\n }\n },\n () => {\n if (!unMounted.current) {\n setLoading(false);\n }\n }\n );\n },\n [netDataType, deviceId, tunnelId, startDate, endtDate, byType]\n );\n useEffect(() => {\n getDevices().subscribe(d => {\n if (!unMounted.current) {\n setDevices((d && d.data && d.data.devices) || []);\n }\n });\n }, []);\n useEffect(() => {\n getTunnels().subscribe(d => {\n if (!unMounted.current) {\n setTunnels((d && d.data && d.data.tunnels) || []);\n }\n });\n }, []);\n\n useEffect(\n () => {\n if (!devices.length || !tunnels.length || !data.length) {\n setBarChartData([]);\n setLineChartData([]);\n setAdvancedFiltersData([]);\n setAdvancedFiltersSelectedData([]);\n return;\n }\n const target = netDataType === 'tunnels' ? tunnels : devices;\n let chartData = data.reduce((chartD, el) => {\n const current = target.find(t => t._id === el._id._id);\n const chartDataItem = chartD.find(d => d._id === current._id);\n if (chartDataItem) {\n chartD.splice(chartD.indexOf(chartDataItem), 1, {\n ...chartDataItem,\n bytes: chartDataItem.bytes + Math.abs(el.usage)\n });\n } else {\n chartD.push({\n _id: current._id,\n bytes: el.usage,\n // unit: el._id[byType],\n name: current.name,\n deviceName: current.deviceName\n });\n }\n return chartD;\n }, []);\n const lineData = data.map(d => ({\n _id: d._id._id,\n usage: d.usage,\n unit: new Date(\n `${d._id.month}/${d._id.day}/${d._id.year}`\n ).getTime()\n }));\n const uniques = data\n .map(d => d._id._id)\n .filter((el, i, arr) => arr.indexOf(el) === i);\n const allDays = data\n .map(d =>\n new Date(\n `${d._id.month}/${d._id.day}/${d._id.year}`\n ).getTime()\n )\n .sort((a, b) => a - b)\n .filter((el, i, arr) => arr.indexOf(el) === i);\n const finalLineData = allDays.map(d => {\n const res = {\n unit: d\n };\n uniques.forEach((u, i) => {\n const datum = lineData.find(\n ld => ld._id === u && ld.unit === d\n );\n res[`${u}_usage`] = datum ? Math.abs(datum.usage) : 0;\n res[`${u}_color`] = colors[i] || getRandomColor();\n });\n return res;\n });\n chartData = chartData.map(d => ({\n ...d,\n color: finalLineData.length\n ? finalLineData[0][`${d._id}_color`]\n : getRandomColor()\n }));\n setAdvancedFiltersData(\n [...chartData].sort((a, b) => b.bytes - a.bytes).slice(0, 5)\n );\n setAdvancedFiltersSelectedData(\n [...chartData].sort((a, b) => b.bytes - a.bytes).slice(0, 5)\n );\n setLineChartData(finalLineData);\n setBarChartData(chartData);\n },\n [data, devices, tunnels]\n );\n\n const onCheckbocChange = (e, id) => {\n const newData = [...advancedFiltersSelectedData];\n if (e.target.checked) {\n newData.push(advancedFiltersData.find(datum => datum._id === id));\n } else {\n const ind = newData.findIndex(datum => datum._id === id);\n newData.splice(ind, 1);\n }\n setAdvancedFiltersSelectedData(newData);\n };\n return (\n
\n
\n \n
Basic filters
\n \n Usage per\n setNetDataType(e.target.value)}\n >\n Devices\n Tunnels\n \n \n \n Device\n setDeviceId(e.target.value)}\n >\n \n All\n \n {devices.map(d => (\n \n {d.name}\n \n ))}\n \n \n \n Tunnel\n setTunnelId(e.target.value)}\n >\n \n All\n \n {tunnels.map(t => (\n \n {t.name} / {t.deviceName}\n \n ))}\n \n \n \n setStartDate(d.getTime())}\n />\n setEndtDate(d.getTime())}\n />\n \n \n {!!advancedFiltersData.length && (\n \n
Advanced filters
\n \n {netDataType === 'tunnels' ? 'tunnels' : 'devices'}\n {' with the most usage'}\n \n \n {advancedFiltersData.map((d, i) => (\n datum._id === d._id\n )\n }\n onChange={e =>\n onCheckbocChange(e, d._id)\n }\n />\n }\n label={\n netDataType === 'tunnels'\n ? `${d.name}/${d.deviceName}`\n : d.name\n }\n />\n ))}\n
\n \n )}\n
\n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n {data.length ? (\n <>\n \n \n \n \n \n \n \n ) : (\n
No Data
\n )}\n {!!advancedFiltersSelectedData.length && (\n <>\n \n \n \n \n \n \n \n )}\n \n )}\n
\n \n );\n};\nUsage.propTypes = {\n classes: PropTypes.object.isRequired,\n actions: PropTypes.shape({}).isRequired\n};\n\nconst mapDispatchToProps = wrapActionCreators({});\n\nexport default withStyles(styles)(\n connect(\n null,\n mapDispatchToProps\n )(Usage)\n);\n","import { useEffect, useState } from 'react';\n\nexport default function useElementSize(el) {\n const [elementWidth, setElementWidth] = useState(\n (el && el.offsetWidth) || 0\n );\n const [elementHeight, setElementHeight] = useState(\n (el && el.offsetHeight) || 0\n );\n\n useEffect(\n () => {\n const handleResize = () => {\n setElementWidth((el && el.offsetWidth) || 0);\n setElementHeight((el && el.offsetHeight) || 0);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n },\n [el]\n );\n useEffect(\n () => {\n setElementWidth((el && el.offsetWidth) || 0);\n setElementHeight((el && el.offsetHeight) || 0);\n },\n [el]\n );\n return { elementWidth, elementHeight };\n}\n","import { useEffect, useState } from 'react';\n\nexport default function useWindowSize() {\n const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\n\n useEffect(() => {\n const handleResize = () => {\n setWindowWidth(window.innerWidth);\n setWindowHeight(window.innerHeight);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n });\n\n return { windowWidth, windowHeight };\n}\n","// @flow\nimport React, { Component } from 'react';\nimport { Route, Switch, Redirect } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport connect from 'react-redux/es/connect/connect';\nimport { createStructuredSelector } from 'reselect';\nimport Header from '../Header';\nimport Devices from '../Devices';\nimport Tunnels from '../Tunnels';\nimport OrgUsers from '../../components/OrganizationUsers';\nimport ChangeDeviceOwner from '../Devices/ChangeDeviceOwner';\nimport { wrapActionCreators } from '../../utils/container-util';\nimport { getStatuses } from '../../actions/device-actions';\nimport Usage from '../../components/Usage';\nimport { getDefaultRoute, isComponentAllowed } from '../Authorities';\nimport { getLoggedInUser } from '../../selectors/app-selectors';\nimport {\n ROUTES_DEVICES_AUTH,\n ROUTES_TUNNELS_AUTH,\n ROUTES_CHANGEDEVICEOWNER_AUTH,\n ROUTES_USERS_AUTH,\n ROUTES_USAGE_AUTH\n} from '../../constants/authorities';\nimport WithHelmet from '../WithHelmet';\n\nimport tunnelinDevicesImage from '../../assets/images/tunnelin_devices.jpg';\nimport tunnelinTunnelsImage from '../../assets/images/tunnelin_tunnels.jpg';\n\nconst DevicesWithHelmet = WithHelmet({\n title: 'Devices',\n meta: [\n { name: 'og:url', content: '/devices' },\n ],\n image: {\n src: tunnelinDevicesImage,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - Access your devices from the web to view CPU usage, heartbeat, etc... Create tunnels (SSH, VNC, RDP, and HTTPS) from this page.`\n});\n\nconst TunnelsWithHelmet = WithHelmet({\n title: 'Tunnels',\n meta: [\n { name: 'og:url', content: '/tunnels' },\n ],\n image: {\n src: tunnelinTunnelsImage,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - Create reliable TCP tunnels to expose protocols like SSH, VNC, RDP, HTTPS. Use a cloud-based firewall for access control.`\n});\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1\n }\n});\n\nclass WithHeader extends Component<\n {\n classes: { root: string },\n actions: {\n getStatuses: () => void\n },\n loggedInUser: any\n },\n {}\n> {\n componentDidMount() {\n this.fetchDeviceStatuses();\n this.intervalId = setInterval(this.fetchDeviceStatuses, 60000);\n }\n\n componentWillUnmount() {\n clearInterval(this.intervalId);\n }\n\n fetchDeviceStatuses = () => {\n const {\n actions: { getStatuses }\n } = this.props;\n getStatuses();\n };\n\n render = () => {\n const { classes, loggedInUser } = this.props;\n return (\n
\n
\n \n {isComponentAllowed(ROUTES_DEVICES_AUTH, loggedInUser) && (\n \n )}\n {isComponentAllowed(ROUTES_TUNNELS_AUTH, loggedInUser) && (\n \n )}\n {isComponentAllowed(\n ROUTES_CHANGEDEVICEOWNER_AUTH,\n loggedInUser\n ) && (\n \n )}\n {isComponentAllowed(ROUTES_USERS_AUTH, loggedInUser) && (\n \n )}\n {isComponentAllowed(ROUTES_USAGE_AUTH, loggedInUser) && (\n \n )}\n \n \n
\n );\n };\n}\n\nWithHeader.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired\n }).isRequired,\n actions: PropTypes.shape({\n getStatuses: PropTypes.func.isRequired\n }).isRequired,\n loggedInUser: PropTypes.object.isRequired\n};\n\nconst mapStateToProps = createStructuredSelector({\n loggedInUser: getLoggedInUser()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n getStatuses\n});\n\nexport default withStyles(styles)(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(WithHeader)\n);\n","import React from 'react';\nimport { withRouter, Redirect } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { isAuthenticated, isEmailVerified } from '../selectors/app-selectors';\n\nconst styles = () => ({\n authenticatedRoot: {\n flex: '1 1 0%',\n display: 'flex'\n },\n unAuthenticatedRoot: {\n display: 'flex',\n flex: '1 1 0%',\n alignItems: 'center',\n justifyContent: 'center'\n }\n});\n\nexport default (\n options = {\n authenticatedGuard: true\n }\n) => Component => {\n function WithAuthGuard(props) {\n const { authenticatedGuard } = options;\n const { isAuthenticated, location } = props;\n const { classes, ...propsWithOutClasses } = props;\n\n if (authenticatedGuard) {\n if (isAuthenticated) {\n return (\n
\n \n
\n );\n }\n return (\n \n );\n }\n\n if (!isAuthenticated) {\n return (\n
\n \n
\n );\n }\n return ;\n }\n\n WithAuthGuard.propTypes = {\n location: PropTypes.shape({\n search: PropTypes.string.isRequired\n }).isRequired,\n classes: PropTypes.object.isRequired,\n isAuthenticated: PropTypes.bool.isRequired\n };\n\n const mapStateToProps = createStructuredSelector({\n isEmailVerified: isEmailVerified(),\n isAuthenticated: isAuthenticated()\n });\n\n WithAuthGuard.displayName = `WithAuthGuard(${Component.displayName ||\n Component.name})`;\n return withRouter(\n connect(\n mapStateToProps,\n null\n )(withStyles(styles)(WithAuthGuard))\n );\n};\n","// @flow\nimport React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport Terminal from '../Terminal';\nimport WithHeader from './WithHeader';\nimport withAuthGuard from '../WithAuthenticationGuard';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1\n }\n});\n\nconst Main = ({ classes: { root } }) => (\n
\n \n \n \n \n
\n);\n\nMain.propTypes = {\n classes: PropTypes.shape({\n root: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default withAuthGuard()(withStyles(styles)(Main));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport InfoIcon from '@material-ui/icons/Info';\nimport CloseIcon from '@material-ui/icons/Close';\nimport green from '@material-ui/core/colors/green';\nimport amber from '@material-ui/core/colors/amber';\nimport IconButton from '@material-ui/core/IconButton';\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\nimport WarningIcon from '@material-ui/icons/Warning';\n\nconst variantIcon = {\n success: CheckCircleIcon,\n warning: WarningIcon,\n error: ErrorIcon,\n info: InfoIcon\n};\n\nconst styles = theme => ({\n root: {\n flexWrap: 'nowrap'\n },\n success: {\n backgroundColor: green[600]\n },\n error: {\n backgroundColor: theme.palette.error.dark\n },\n info: {\n backgroundColor: theme.palette.primary.dark\n },\n warning: {\n backgroundColor: amber[700]\n },\n icon: {\n fontSize: 20\n },\n iconVariant: {\n opacity: 0.9,\n marginRight: theme.spacing.unit\n },\n message: {\n display: 'flex',\n alignItems: 'center'\n }\n});\n\nfunction SnackbarContentWrapper(props) {\n const { classes, className, message, onClose, variant, ...other } = props;\n const Icon = variantIcon[variant];\n\n return (\n \n \n {message}\n \n }\n action={[\n \n \n \n ]}\n {...other}\n />\n );\n}\n\nSnackbarContentWrapper.propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n message: PropTypes.node,\n onClose: PropTypes.func,\n variant: PropTypes.oneOf(['success', 'warning', 'error', 'info']).isRequired\n};\n\nexport default withStyles(styles)(SnackbarContentWrapper);\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Snackbar from '@material-ui/core/Snackbar';\n\nimport SnackbarContentWrapper from '../shared/Snackbar/snackbarContentWrapper';\nimport { GLOBAL_COOKIE_MESSAGE } from '../../constants/message-constants';\n\nclass Message extends React.Component<\n {\n actions: {\n setGlobalMessageError: (message: any) => void,\n setGlobalMessageSuccess: (message: any) => void,\n setGlobalMessageCookies: (message: any) => void\n },\n location: { search: string },\n history: { action: string, replace: (path: string) => void },\n errorMessage: string,\n successMessage: string,\n cookiesMessage: string\n },\n {\n successMessages: string[],\n errorMessages: string[]\n }\n> {\n constructor(props) {\n super(props);\n const { successMessage, errorMessage } = this.props;\n this.state = {\n successMessages: successMessage ? [successMessage] : [],\n errorMessages: errorMessage ? [errorMessage] : []\n };\n }\n\n static getDerivedStateFromProps(props, state) {\n let { successMessages, errorMessages } = state;\n const { successMessage, errorMessage } = props;\n if (successMessage) {\n if (successMessages.indexOf(successMessage) === -1) {\n successMessages = [...successMessages, successMessage];\n } else {\n successMessages = [];\n }\n } else {\n successMessages = [];\n }\n if (errorMessage) {\n if (errorMessages.indexOf(errorMessage) === -1) {\n errorMessages = [...errorMessages, errorMessage];\n } else {\n errorMessages = [];\n }\n } else {\n errorMessages = [];\n }\n return {\n successMessages,\n errorMessages\n };\n }\n\n handleErrorSnackbarClose = () => {\n const {\n actions: { setGlobalMessageError }\n } = this.props;\n setGlobalMessageError('');\n };\n\n handleSuccessSnackbarClose = () => {\n const {\n actions: { setGlobalMessageSuccess }\n } = this.props;\n setGlobalMessageSuccess('');\n };\n\n handleCookiesSnackbarClose = () => {\n const {\n actions: { setGlobalMessageCookies },\n cookiesMessage\n } = this.props;\n setGlobalMessageCookies('');\n if (cookiesMessage === GLOBAL_COOKIE_MESSAGE) {\n localStorage.setItem('cookiesMessageShowed', true);\n }\n };\n\n render() {\n const { cookiesMessage } = this.props;\n const { successMessages, errorMessages } = this.state;\n let successMessage = '';\n let errorMessage = '';\n if (successMessages.length === 1) {\n [successMessage] = successMessages;\n } else if (successMessages.length > 1) {\n successMessage = (\n
    \n {successMessages.map(el => (\n
  • {el}
  • \n ))}\n
\n );\n }\n if (errorMessages.length === 1) {\n [errorMessage] = errorMessages;\n } else if (errorMessages.length > 1) {\n errorMessage = (\n
    \n {errorMessages.map(el => (\n
  • {el}
  • \n ))}\n
\n );\n }\n\n const cookiesSnackbar = (\n \n \n \n );\n\n const errorSnackbar = (\n \n \n \n );\n\n const successSnackbar = (\n \n \n \n );\n\n return (\n <>\n {cookiesSnackbar}\n {errorSnackbar}\n {successSnackbar}\n \n );\n }\n}\n\nMessage.propTypes = {\n errorMessage: PropTypes.node.isRequired,\n successMessage: PropTypes.node.isRequired,\n cookiesMessage: PropTypes.node.isRequired\n};\n\nexport default Message;\n","// @flow\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\nimport { wrapActionCreators } from '../../utils/container-util';\nimport {\n setGlobalMessageError,\n setGlobalMessageSuccess,\n setGlobalMessageCookies\n} from '../../actions/app-actions';\nimport {\n getErrorMessage,\n getSuccessMessage,\n getCookiesMessage\n} from '../../selectors/app-selectors';\n\nimport Message from '../../components/App/Message';\n\nconst mapStateToProps = createStructuredSelector({\n errorMessage: getErrorMessage(),\n successMessage: getSuccessMessage(),\n cookiesMessage: getCookiesMessage()\n});\n\nconst mapDispatchToProps = wrapActionCreators({\n setGlobalMessageError,\n setGlobalMessageSuccess,\n setGlobalMessageCookies\n});\n\nconst MessageWrapper = connect(\n mapStateToProps,\n mapDispatchToProps\n)(Message);\n\nexport default MessageWrapper;\n","// @flow\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Route, Switch, withRouter } from 'react-router-dom';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport { DragDropContext } from 'react-dnd';\n\nimport withMaterial from '../withMaterial';\nimport Login from '../../containers/Authentication/Login';\nimport Signup from '../../containers/Authentication/Signup';\nimport OrganizationInvitation from '../../containers/OrganizationInvitation';\nimport PasswordRecovery from '../../containers/Authentication/PasswordRecovery';\nimport SetNewPasswordHOC from '../../containers/Authentication/SetNewPassword';\nimport ChangeDeviceOwner from '../../containers/Devices/ChangeDeviceOwner';\nimport VerifyEmail from '../../containers/Authentication/VerifyEmail';\nimport Main from '../../containers/Main';\n// import ActivateAccount from '../../containers/Users/ActivateAccount';\nimport Message from '../../containers/App/Message';\nimport { getAuthToken, clearAuthToken } from '../../utils/http-util';\nimport Loader from '../LoadingPane/Loader';\nimport {\n logoutSuccess,\n getLoggedInUserLoading,\n getLoggedInUserSuccess,\n getLoggedInUserError\n} from '../../actions/authentication-actions';\nimport store from '../../store/get-store';\nimport { setConnectivityStatus } from '../../actions/app-actions';\nimport { getLoggedInUser } from '../../api/authentication-api';\nimport { parseErrorMessage } from '../../utils/global-message-util';\nimport WithAuthGuard from '../../containers/WithAuthenticationGuard';\nimport WithHelmet from '../../containers/WithHelmet';\n\nimport tunnelinMainImagePath from '../../assets/images/tunnelin_main.jpg';\n\nconst LoginWithHelmet = WithHelmet({\n title: 'Login',\n meta: [\n { name: 'og:url', content: '/login' },\n ],\n image: {\n src: tunnelinMainImagePath,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: 'Tunnel In - Login to manage your devices and tunnels (SSH, VNC, RDP, or HTTPS). You can also configure a firewall for your tunnels with various rules.'\n});\n\nconst SignupWithHelmet = WithHelmet({\n title: 'Sign up',\n meta: [\n { name: 'og:url', content: '/signup' },\n ],\n image: {\n src: tunnelinMainImagePath,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: 'Tunnel In - Create an account, add devices and tunnels (SSH, VNC, RDP, or HTTPS). Create Organizations, invite users, and share devices, tunnels with them.'\n});\n\nconst PasswordRecoveryWithHelmet = WithHelmet({\n title: 'Password Recovery',\n meta: [\n { name: 'og:url', content: '/passwordrecovery' },\n ],\n image: {\n src: tunnelinMainImagePath,\n width: 1200,\n height: 630,\n type: 'image/jpeg'\n },\n description: `Tunnel In - Forget password page. The password recovery link and instructions will be sent to the provided email address.`\n});\n\nconst { dispatch } = store;\n\nclass App extends React.Component<\n {\n location: { search: string },\n history: { action: string, replace: (path: string) => void }\n },\n {\n afterDidMount: boolean,\n onLine: boolean,\n isAuthenticating: boolean\n }\n > {\n constructor(props) {\n super(props);\n this.state = {\n afterDidMount: false,\n onLine: navigator.onLine,\n isAuthenticating: false\n };\n }\n\n componentDidMount() {\n this.doInitApp();\n this.onLineInterval = setInterval(() => {\n const { onLine } = navigator;\n const { onLine: stateOnLine } = this.state;\n\n if (stateOnLine !== onLine) {\n this.setState({\n onLine\n });\n }\n }, 1000);\n this.setState({\n afterDidMount: true\n });\n }\n\n componentWillUnmount() {\n clearInterval(this.onLineInterval);\n }\n\n // eslint-disable-next-line no-undef\n onLineInterval: IntervalID;\n\n doInitApp() {\n const authToken = getAuthToken();\n if (!authToken) {\n dispatch(logoutSuccess());\n this.setState({ isAuthenticating: false });\n } else {\n dispatch(setConnectivityStatus({ loading: true }));\n dispatch(getLoggedInUserLoading(true));\n\n this.setState({ isAuthenticating: true });\n getLoggedInUser().subscribe(\n user => {\n const { data } = user;\n // eslint-disable-next-line no-multi-assign\n const _hsq = (window._hsq = window._hsq || []);\n if (Array.isArray(_hsq)) {\n _hsq.push([\n 'identify',\n {\n email: data.email\n }\n ]);\n _hsq.push(['trackPageView']);\n setTimeout(() => {\n // eslint-disable-next-line no-unused-expressions\n window.HubSpotConversations &&\n window.HubSpotConversations.widget.refresh();\n }, 1000);\n }\n dispatch(setConnectivityStatus({ loading: false }));\n dispatch(getLoggedInUserSuccess(data));\n dispatch(getLoggedInUserLoading(false));\n this.setState({\n isAuthenticating: false\n });\n },\n error => {\n dispatch(setConnectivityStatus({ loading: false }));\n dispatch(getLoggedInUserError(parseErrorMessage(error)));\n dispatch(getLoggedInUserLoading(false));\n clearAuthToken();\n this.setState({\n isAuthenticating: false\n });\n }\n );\n }\n }\n\n render() {\n const { afterDidMount, isAuthenticating } = this.state;\n\n if (!afterDidMount) {\n return null;\n }\n if (isAuthenticating) {\n return ;\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nApp.propTypes = {\n location: PropTypes.shape({\n search: PropTypes.string.isRequired\n }).isRequired,\n history: PropTypes.shape({\n action: PropTypes.string.isRequired,\n replace: PropTypes.func.isRequired\n }).isRequired\n};\n\nexport default withRouter(DragDropContext(HTML5Backend)(withMaterial(App)));\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log(\n 'New content is available; please refresh.'\n );\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') ===\n -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Router } from 'react-router';\nimport { Provider } from 'react-redux';\n\nimport 'typeface-roboto';\n\nimport './index.css';\nimport browserHistory from './store/history';\nimport store from './store/get-store';\nimport App from './components/App';\nimport * as serviceWorker from './registerServiceWorker';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\nserviceWorker.unregister();\n","module.exports = __webpack_public_path__ + \"static/media/tunnelin_main.e662b433.jpg\";","module.exports = __webpack_public_path__ + \"static/media/filter.b1689a27.svg\";","export const BASE_DOMAIN = process.env.REACT_APP_API_URL;\n\nexport const TERMINAL_URL = process.env.REACT_APP_TERMINAL_URL;\n\nexport const MQTT_SERVER_URL = process.env.REACT_APP_MQTT_SERVER_URL;\n\nexport const MQTT_ENV = process.env.REACT_APP_MQTT_ENV;\n\nexport const PYTHON_CLIENT_URL = process.env.REACT_APP_PYTHON_CLIENT_URL;\n\nexport const MAIN_TITLE = process.env.REACT_APP_MAIN_TITLE || 'Tunnel In -';\nexport const PROXY_HELP_URL =\n process.env.REACT_APP_PROXY_HELP_URL ||\n 'https://tunnelin.com/blog/tag/proxy';\nexport const RDP_HELP_URL =\n process.env.REACT_APP_RDP_HELP_URL || 'https://tunnelin.com/blog/tag/rdp';\nexport const VNC_HELP_URL =\n process.env.REACT_APP_VNC_HELP_URL || 'https://tunnelin.com/blog/tag/vnc';\nexport const SSH_HELP_URL =\n process.env.REACT_APP_SSH_HELP_URL || 'https://tunnelin.com/blog/tag/ssh';\n","import { SheetsRegistry } from 'jss';\nimport {\n createMuiTheme,\n createGenerateClassName\n} from '@material-ui/core/styles';\nimport { purple, green } from '@material-ui/core/colors';\n\nconst theme = createMuiTheme({\n palette: {\n primary: purple,\n secondary: green\n },\n typography: {\n useNextVariants: true\n }\n});\n\nfunction createPageContext() {\n return {\n theme,\n // This is needed in order to deduplicate the injection of CSS in the page.\n sheetsManager: new Map(),\n // This is needed in order to inject the critical CSS.\n sheetsRegistry: new SheetsRegistry(),\n // The standard class name generator.\n generateClassName: createGenerateClassName()\n };\n}\n\nexport default function getPageContext() {\n // Make sure to create a new context for every server-side request so that data\n // isn't shared between connections (which would be bad).\n if (!process.browser) {\n return createPageContext();\n }\n\n // Reuse context on the client-side.\n if (!global.__INIT_MATERIAL_UI__) {\n global.__INIT_MATERIAL_UI__ = createPageContext();\n }\n\n return global.__INIT_MATERIAL_UI__;\n}\n"],"sourceRoot":""}