Help
RSS
API
Feed
Maltego
Contact
Domain > www.3ithelp.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2017-03-31
52.206.163.161
(
ClassC
)
2017-07-07
52.7.233.242
(
ClassC
)
2024-10-06
176.35.140.210
(
ClassC
)
Port 80
HTTP/1.1 200 OKCache-Control: privateContent-Length: 102439Content-Type: text/html; charsetutf-8Server: ScreenConnect/24.2.10.8991-3824113029 Microsoft-HTTPAPI/2.0P3P: CPNON CUR OUR STP STA PREDate: Sun, 06 Oct 2024 05:21:03 GMT !DOCTYPE html>html>head>meta http-equivX-UA-Compatible contentIEedge />meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1, user-scalableno /> script> function setTaggedSessionInfo(tag, taggedSessionInfo) { var oldTaggedSessionInfo window._taggedSessionInfostag; window._taggedSessionInfostag taggedSessionInfo; if (!oldTaggedSessionInfo || taggedSessionInfo.SessionID ! oldTaggedSessionInfo.SessionID || taggedSessionInfo.Code ! oldTaggedSessionInfo.Code) SC.livedata.notifyDirty(); } // backwards compatibility with extensions function setTaggedSessionID(tag, sessionID) { window.setTaggedSessionInfo(tag, { SessionID: sessionID }); } function getTaggedSessionInfo(tag) { return window._taggedSessionInfostag; } function getSessionInfo() { var liveData SC.livedata.get(); return liveData && liveData.ResponseInfoMap && liveData.ResponseInfoMapGuestSessionInfo } /script>script srcScript.ashx?__Cacheaf51b2c5-57c2-4ca7-96a8-a00838422b28 iddefaultScript>/script>script srcScripts/SC.polyfill.ts?ScriptImportTypeNoModule&__Cached46b2bcd-26a1-4779-b603-59df521e0479 nomodulenomodule>/script>script srcScripts/SC.main.ts?ScriptImportTypeNoModule&__Cache1c9e4e91-6e10-430d-9df5-de2dfd5980a6 nomodulenomodule>/script>script srcScripts/SC.main.ts?ScriptImportTypeClassic&__Cache1c9e4e91-6e10-430d-9df5-de2dfd5980a6>/script>link hrefApp_Themes/SolidWithBlue/Default.css?__Cachecc662620-68ad-4f8d-8315-5a42d5ea7a85 typetext/css relstylesheet />link hrefFavIcon.axd?__Cache97a48843-ae38-4288-ba33-06ee21772d0f relshortcut icon />script>SC.util.mergeIntoContext({focusedControlID:null,userName:,userDisplayName:,isUserAuthenticated:false,antiForgeryToken:7fARaRg25Ld2Qo/cQ+RKz+0Nk0nv9w0TWd4TUtlL5nABAABi2n4qKL0tQg,isUserAdministrator:false,canManageSharedToolbox:false,pageBaseFileName:Guest,notifyActivityFrequencyMilliseconds:600000,loginAfterInactivityMilliseconds:36000000,canChangePassword:false,controlPanelUrl:null,pageType:GuestPage,processType:2,userAgentOverride:null,sessionTypeInfos:,imports:{SC.editor:Scripts/SC.editor.ts?ScriptImportTypeEsModule\u0026__Cache2c15a7ff-c646-428c-8147-05e471ff4a0f}});/script>script>SC.extension.addInitializeProc(fa369545-ba27-4670-b053-a9f65f3269b0, function (extensionContext) {if (SC.context.pageType AdministrationPage && SC.context.isUserAuthenticated) SC.service.GetThemeInfo(function (themeInfo) { SC.util.includeStyleSheet(extensionContext.baseUrl + css/Style.css); });SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case WebConfigSave: SC.dialog.showModalButtonDialog( Prompt, SC.resAdvancedConfig.ApplyChanges, OK, Default, function (container) { SC.ui.setContents(container, eventArgs.commandArgument WebConfigRestore ? $p(SC.resAdvancedConfig.RestoreDefaults.WebConfigWarning) : $p(SC.resAdvancedConfig.RestartInstanceWarning) ); }, function () { var appSettings JSON.parse(sessionStorage.getItem(WebConfigAppSettings)); var pageSettings JSON.parse(JSON.stringify(appSettings.location)); delete appSettings.location; SC.service.WriteChangesToWebConfig(appSettings, pageSettings, function (result) { if (result OK) { sessionStorage.removeItem(WebConfigAppSettings); SC.dialog.showModalActivityAndReload(Save, true, window.location.href.split(#)0); } else { SC.dialog.showModalMessageBox(SC.resAdvancedConfig.SaveError.Title, SC.resAdvancedConfig.SaveError.WebConfigDescription + + result); } }); } ); break; case AppConfigSave: SC.dialog.showModalButtonDialog( Prompt, SC.resAdvancedConfig.ApplyChanges, OK, Default, function (container) { SC.ui.setContents(container, eventArgs.commandArgument AppConfigRestore ? $p(SC.resAdvancedConfig.RestoreDefaults.AppConfigWarning) : $p(SC.resAdvancedConfig.ReinstallWarning) ); }, function () { var systemSettings JSON.parse(sessionStorage.getItem(AppConfigAppSettings)).SystemSettings; var userInterfaceSettings JSON.parse(sessionStorage.getItem(AppConfigAppSettings)).UserInterfaceSettings; SC.service.WriteChangesToAppConfig(systemSettings, userInterfaceSettings, AppConfigDefaults, function (result) { if (result OK) { sessionStorage.removeItem(AppConfigAppSettings); window.location.reload(); } else { SC.dialog.showModalMessageBox(SC.resAdvancedConfig.SaveError.Title, SC.resAdvancedConfig.SaveError.AppConfigDescription + + result); } }); } ); break; }});});/script>script>SC.extension.addInitializeProc(c42e9fe5-f4aa-4698-bb71-ae68b8a23890, function (extensionContext) {/** Advanced SMTP Settings (1.2.3.0) **/var extensionId extensionContext.baseUrl.split(/).slice(-2)0;IS_CLOUD /^.*\.(screenconnect|hostedrmm)\.com$/.test(SC.context.clp.h);EMPTY_PASSWORD \ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd;/***** Extension Help Option *****/var helpLink https://help.screenconnect.com/Extension:Advanced_SMTP_Settings;var extensionResourceID EditSMTPSettings;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { switch (eventArgs.commandName) { case EditExtensionSettings: if (eventArgs.commandContext.extensionInfo.ExtensionID extensionId && eventArgs.commandElement._commandName EditExtensionSettings) SC.ui.addElement(eventArgs.target.parentElement, A, { href: #, _commandName: (SC.context.scriptBaseUrl.indexOf(https://) helpLink.indexOf(https://) ? ShowHelpLink_ : OpenHelpLink_) + extensionId, _innerText: SC.resCommand.Help.Text.replace( ▽, ) }); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case ShowHelpLink_ + extensionId: SC.dialog.showModalPage(SC.resCommand.Help.Text.replace( ▽, ), helpLink, null); break; case OpenHelpLink_ + extensionId: window.open(helpLink, _blank); break; }});/*********************************/SC.service.GetMailConfigurationInfo SC.service.GetAdvancedMailConfigurationInfo;SC.resCommand.EditAdvancedMailConfiguration.Text SC.resCommand.EditMailConfiguration.Text;SC.event.addGlobalHandler(SC.event.PageDataRefreshed, function () { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Mail) { var mailConfiguration SC.pagedata.get(); SC.types.SmtpDeliveryMethod mailConfiguration.SmtpDeliveryMethod; SC.ui.setContents($(.MailPanel), $dt( $h3({_textResource: MailPanel.MailTitle}), $p({className: CommandList}, SC.command.createCommandButtons({commandName: EditAdvancedMailConfiguration})), ), $dd( $dl( $dt({_textResource: MailPanel.MailDeliveryText}), $dd(mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod.Network ? SC.util.isNullOrEmpty(mailConfiguration.smtpRelayServerHostName) ? SC.resMailPanel.SmtpDirectRadioButtonText : SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.RelaySettingsTextFormat, mailConfiguration.smtpRelayServerHostName, mailConfiguration.smtpRelayServerPort 25 ? null : : + mailConfiguration.smtpRelayServerPort, mailConfiguration.enableSSL ? SC.resExtension.SMTPSettings.MailPanel.UseSSLText : null, mailConfiguration.smtpUseDefaultCredentials ? SC.util.formatString( SC.resExtension.SMTPSettings.MailPanel.UsingDefaultCredentialsTextFormat, (!SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkTargetName) ? SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.SPNLabelTextFormat, mailConfiguration.smtpNetworkTargetName) : ) ) : !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword) ? SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.UsernameLabelTextFormat, mailConfiguration.smtpNetworkUserName) : null ) : mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod.PickupDirectoryFromIis ? SC.resExtension.SMTPSettings.MailPanel.UsingIISPickupDirectoryText : SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.UsingSpecifiedPickupDirectoryTextFormat, mailConfiguration.smtpPickupDirectoryLocation) ), $dt({_textResource: MailPanel.DefaultFromAddressLabelText}), $dd(mailConfiguration.defaultMailFromAddress || SC.resMailPanel.UnsetLabelText), $dt({_textResource: MailPanel.DefaultToAddressLabelText}), $dd(mailConfiguration.defaultMailToAddress || SC.resMailPanel.UnsetLabelText), ), ), ); }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case EditAdvancedMailConfiguration: var mailConfiguration SC.pagedata.get(); function getControlsForDeliveryMethod(deliveryMethodName) { var setRadioButtonChecked function () { SC.dialog.getModalDialog().querySelector(. + deliveryMethodName + RadioButton).checked true; }; var setBothRadioButtonsChecked function (eventArgs) { setRadioButtonChecked(); SC.ui.findDescendantBreadthFirst(SC.ui.findAncestorByTag(eventArgs.target, DD), function (_) { return _.name SmtpAuthenticationType }).checked true; }; switch (deliveryMethodName) { case Relay: // this isnt a value of SmtpDeliveryMethod, just Network with extra parameters return $dl({className: SmtpRelaySettingsList}, $dt(SC.resExtension.SMTPSettings.NetworkSettingsLabelText), $dd( $label( $span(SC.resExtension.SMTPSettings.RelayServerLabelText), $input({ type: text, className: SmtpRelayServerBox, value: mailConfiguration.smtpRelayServerHostName, _eventHandlerMap: {focus: setRadioButtonChecked}, }), ), ), $dd( $label( $span(SC.resExtension.SMTPSettings.RelayServerPortLabelText), $input({ type: number, className: SmtpRelayServerPortBox, value: mailConfiguration.smtpRelayServerPort, _eventHandlerMap: {focus: setRadioButtonChecked}, _attributeMap: { max: 65535, min: 1, placeholder: 25, }, }), ), ), $dd( $label( $input({ type: checkbox, className: SmtpRelayServerEnableSSLCheckbox, checked: mailConfiguration.enableSSL, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.UseSSLLabelText), ), ), $dt(SC.resExtension.SMTPSettings.AuthenticationSettingsLabelText), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: None, checked: (SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) || SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword)) && !mailConfiguration.smtpUseDefaultCredentials, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.AnonymousCredentialsLabelText), ), ), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: Windows, checked: mailConfiguration.smtpUseDefaultCredentials, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.DefaultCredentialsLabelText), ), $label( $span(SC.resExtension.SMTPSettings.NetworkTargetNameLabelText), $input({ type: text, className: SmtpAuthSPNBox, value: mailConfiguration.smtpNetworkTargetName, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), ), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: Credentials, checked: !mailConfiguration.smtpUseDefaultCredentials && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword), _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), $span(SC.resExtension.SMTPSettings.AccountCredentialsLabelText), ), $label( $span(SC.resExtension.SMTPSettings.UsernameLabelText), $input({ type: text, className: SmtpAuthUsernameBox, value: mailConfiguration.smtpNetworkUserName, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), $label( $span(SC.resExtension.SMTPSettings.PasswordLabelText), $input({ type: password, className: SmtpAuthPasswordBox, value: mailConfiguration.smtpNetworkPassword, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), $label( $span(SC.resExtension.SMTPSettings.ConfirmPasswordLabelText), $input({ type: password, className: SmtpAuthConfirmPasswordBox, value: mailConfiguration.smtpNetworkPassword, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), ), ); case SpecifiedPickupDirectory: return $input({ type: text, className: SmtpPickupDirectoryLocationBox, value: mailConfiguration.smtpPickupDirectoryLocation, _eventHandlerMap: {focus: setRadioButtonChecked}, }); default: // network, iispickup return null; } } SC.dialog.showModalDialog(EditMailConfiguration, { titleResourceName: EditMailConfigurationPanel.Title, content: $dl( $dt({_textResource: MailPanel.MailDeliveryText}), $dd( Network, PickupDirectoryFromIis, SpecifiedPickupDirectory, Relay.filter(function (_) { return !IS_CLOUD || _ Network || _ Relay }).map(function (_) { return $label( $input({ type: radio, name: MailDelivery, className: _ + RadioButton, value: _, checked: _ Relay ? !SC.util.isNullOrEmpty(mailConfiguration.smtpRelayServerHostName) : mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod_, }), $span({_textResource: MailPanel.Smtp + (_ Network ? Direct : _) + RadioButtonText}), ), getControlsForDeliveryMethod(_), ; }) ), $dt({_textResource: MailPanel.DefaultFromAddressLabelText}), $dd( $input({ type: text, className: DefaultMailFromAddressBox, value: mailConfiguration.defaultMailFromAddress, }), ), $dt({_textResource: MailPanel.DefaultToAddressLabelText}), $dd( $div( $input({ type: text, className: DefaultMailToAddressBox, value: mailConfiguration.defaultMailToAddress, }), $button({ className: SecondaryButton, _textResource: MailPanel.SendTestMailButtonText, _commandName: SendAdvancedTestEmail, }), ), ), ), $p({className: ResultPanel}), , buttonTextResourceName: EditMailConfigurationPanel.ButtonText, onExecuteCommandProc: function (dialogEventArgs, dialog, closeDialogProc, setDialogErrorProc) { var authenticationMethod SC.ui.getSelectedRadioButtonValue(dialog.querySelector(.SmtpRelaySettingsList)); var smtpDeliveryMethodName SC.ui.getSelectedRadioButtonValue(dialog); var useExtraNetworkSettings false; if (smtpDeliveryMethodName Relay) { smtpDeliveryMethodName Network; // convert to valid SmtpDeliveryMethod value useExtraNetworkSettings true; } var defaultMailFromAddress dialog.querySelector(.DefaultMailFromAddressBox).value.trim(); var defaultMailToAddress dialog.querySelector(.DefaultMailToAddressBox).value.trim(); var smtpRelayServerHostName useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerBox).value.trim() || null : null; var smtpRelayServerPort useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerPortBox).value.trim() || null : null; var enableSSL useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerEnableSSLCheckbox).checked : null; var smtpPickupDirectoryLocation smtpDeliveryMethodName SpecifiedPickupDirectory ? dialog.querySelector(.SmtpPickupDirectoryLocationBox).value.trim() || null : null; var smtpUseDefaultCredentials useExtraNetworkSettings && authenticationMethod Windows || null; var smtpNetworkTargetName useExtraNetworkSettings && authenticationMethod Windows ? dialog.querySelector(.SmtpAuthSPNBox).value.trim() || null : null; var smtpNetworkUserName useExtraNetworkSettings && authenticationMethod Credentials ? dialog.querySelector(.SmtpAuthUsernameBox).value.trim() || null : null; var smtpNetworkPassword useExtraNetworkSettings && authenticationMethod Credentials ? dialog.querySelector(.SmtpAuthPasswordBox).value.trim() || null : null; var resultPanel dialog.querySelector(.ResultPanel); function validateSettings(forSave) { if (smtpDeliveryMethodName Network && useExtraNetworkSettings) { if (!smtpRelayServerHostName) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.EmptyRelayServerBoxErrorText}); return false; } else if (authenticationMethod Credentials) { if (SC.util.isNullOrEmpty(smtpNetworkUserName) || SC.util.isNullOrEmpty(smtpNetworkPassword)) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.MissingCredentialsErrorText}); return false; } if (smtpNetworkPassword ! dialog.querySelector(.SmtpAuthConfirmPasswordBox).value.trim()) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.PasswordMismatchErrorText}); return false; } } } else if (smtpDeliveryMethodName SpecifiedPickupDirectory) { if (SC.util.isNullOrEmpty(smtpPickupDirectoryLocation)) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.EmptyPickupDirectoryBoxErrorText}); return false; } } return true; } switch (dialogEventArgs.commandName) { case Default: if (validateSettings(true)) SC.service.SaveAdvancedMailConfiguration( defaultMailFromAddress, defaultMailToAddress, smtpRelayServerHostName, smtpRelayServerPort, enableSSL, smtpDeliveryMethodName, smtpPickupDirectoryLocation, smtpUseDefaultCredentials, smtpNetworkTargetName, smtpNetworkUserName, smtpNetworkPassword, function () { SC.dialog.showModalActivityAndReload(Save, true, window.location.href); }, setDialogErrorProc ); break; case SendAdvancedTestEmail: if (validateSettings(false)) { SC.service.SendAdvancedTestEmail( defaultMailFromAddress, smtpRelayServerHostName, defaultMailToAddress, smtpDeliveryMethodName, smtpPickupDirectoryLocation, smtpRelayServerPort, enableSSL, smtpUseDefaultCredentials, smtpNetworkTargetName, smtpNetworkUserName, smtpNetworkPassword, function () { SC.css.ensureClass(resultPanel, Success, true); SC.css.ensureClass(resultPanel, Failure, false); SC.ui.setContents(resultPanel, SC.resCommand.SendEmail.SuccessMessage); setTimeout(function () { SC.css.ensureClass(resultPanel, Success, false); }, 3000); }, function (error) { SC.css.ensureClass(resultPanel, Failure, true); SC.css.ensureClass(resultPanel, Success, false); SC.ui.setContents(resultPanel, error.message); setTimeout(function () { SC.css.ensureClass(resultPanel, Failure, false); }, 30000); } ); } break; } }, }); }});SC.event.addGlobalHandler(SC.event.PreRender, function (eventArgs) { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Mail) SC.util.includeStyleSheet(extensionContext.baseUrl + AdvancedMailStyle.css);});});/script>script>SC.extension.addInitializeProc(443da44f-06c7-4a60-bae8-bb4f01f49131, function (extensionContext) {/** Edit Web.Config AppSettings 2.0.3 **//** Global Extension Variables and Constants **/const extensionId extensionContext.baseUrl.split(/).slice(-2)0;var serverEnvironment local;var settingsChanged false;var userIPAddress null;var currentURIs {};var dataUri;var showAdvancedSettings extensionContext.settingValues.ShowAdvancedSettings.toLowerCase() true;const numberRegex new RegExp(/(^0-9$)|(^1-90-9+$)/);const webServerListenUriRegex new RegExp(/^(http|https):\/\/((\+)|((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})(\/0-9a-zA-Z-+)?\/$/i);const relayListenUriRegex new RegExp(/^relay:\/\/((\+)|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})\/$/i);const webServerAddressableUriRegex new RegExp(/^(http|https):\/\/(((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})?(\/0-9a-zA-Z-+)?\/$/i);const relayAddressableUriRegex new RegExp(/^relay:\/\/(((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})\/$/i);const regExIPv4 /^((0-9|1-90-9|10-9{2}|20-40-9|250-5)\.){3}(0-9|1-90-9|10-9{2}|20-40-9|250-5)(\/(0-9|1-20-9|30-2))?$/;const regExIPv6 /^s*(((0-9A-Fa-f{1,4}:){7}(0-9A-Fa-f{1,4}|:))|((0-9A-Fa-f{1,4}:){6}(:0-9A-Fa-f{1,4}|((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3})|:))|((0-9A-Fa-f{1,4}:){5}(((:0-9A-Fa-f{1,4}){1,2})|:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3})|:))|((0-9A-Fa-f{1,4}:){4}(((:0-9A-Fa-f{1,4}){1,3})|((:0-9A-Fa-f{1,4})?:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){3}(((:0-9A-Fa-f{1,4}){1,4})|((:0-9A-Fa-f{1,4}){0,2}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){2}(((:0-9A-Fa-f{1,4}){1,5})|((:0-9A-Fa-f{1,4}){0,3}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){1}(((:0-9A-Fa-f{1,4}){1,6})|((:0-9A-Fa-f{1,4}){0,4}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|(:(((:0-9A-Fa-f{1,4}){1,7})|((:0-9A-Fa-f{1,4}){0,5}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:)))(%.+)?s*(\/(d|dd|10-1d|120-8))?$/;const cloudRegEx new RegExp(/:\/\/.*\.(screenconnect)\.com/i);const hostedrmmRegEx new RegExp(/:\/\/.*\.(hostedrmm)\.com/i);/** JavaScript Libraries **/if (typeof ipaddr undefined) SC.util.includeScript(extensionContext.baseUrl + ipaddr.min.js); // See javascript file for Copyright information and permission notice./**************************//** Custom top modal dialog to show alert type messages in modal dialog on top of existing modal dialogs **/function setupTopModalDialog(disable){ if (!disable) { eval(SC.dialog.showModalDialogRawOnTop + SC.dialog.showModalDialogRaw.toString().replace(SC.dialog.hideModalDialog();,).replace(/hideModalDialog/g,hideTopModalDialog)); eval(SC.dialog.hideTopModalDialog + SC.dialog.hideModalDialog.toString().replace(/getModalDialog/g,getTopModalDialog)); SC.dialog.getTopModalDialog function() { return Array.prototype.map.call(window.document.querySelectorAll(#dialog),function(_){return _;}).pop(); }; } else { delete SC.dialog.showModalDialogRawOnTop; delete SC.dialog.hideTopModalDialog; delete SC.dialog.getTopModalDialog; }}function alertModal(message){ if (!SC.dialog.showModalDialogRawOnTop) setupTopModalDialog(); SC.dialog.showModalDialogRawOnTop( message.subClass || MessageBox, message.titlePanel || SC.dialog.createTitlePanel(message.title || SC.resErrorPanel.Title), message.contentPanel || SC.dialog.createContentPanel($div(message.content || message)), message.buttonPanel || SC.dialog.createButtonPanel(message.button || OK,message.extraButtons || null) , message.onExecProc || function(eventArgs){ SC.dialog.hideTopModalDialog(); }, message.onQueryProc || null, message.onHideProc || function(){ if (SC.dialog.getTopModalDialog() SC.dialog.getModalDialog()) setupTopModalDialog(true); } );}/**********************************************//** Cookie Settings Management Functions **/function loadExtCookieSettings(){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); for (var cs in cookieSettings) { extensionContext.settingValuescs cookieSettingscs; }}function saveExtCookieSetting(settingName){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); if (!cookieSettings) cookieSettings {}; cookieSettingssettingName extensionContext.settingValuessettingName; SC.util.setCookieValue(extensionId,JSON.stringify(cookieSettings),3650);}function deleteExtCookieSetting(settingName){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); if (!cookieSettings) cookieSettings {}; delete cookieSettingssettingName; SC.util.setCookieValue(extensionId,JSON.stringify(cookieSettings),3650);}function clearExtCookieSettings(){ SC.util.setCookieValue(extensionId,,-1);}/******************************************//** Table Sorting Functions **/var sortBy {};function sortTable(table, col) { if (sortBy.table) { var oldSortCol document.querySelector(# + sortBy.table).tHead.rows0.cellssortBy.col || 0; SC.css.removeClass(oldSortCol, Ascending); SC.css.removeClass(oldSortCol, Descending); } if (sortBy.table table.id && sortBy.col col) { sortBy.dir -((+sortBy.dir) || -1); } else { sortBy.table table.id; sortBy.col col; sortBy.dir 1; } if (sortBy.dir ! 0) { Array.prototype.forEach.call(table.tHead.rows0.cells, (td, index) > { if (col index) { SC.css.ensureClass(td, sortBy.dir > 0 ? Ascending : Descending, true); SC.css.removeClass(td, sortBy.dir > 0 ? Descending : Ascending); } else { SC.css.removeClass(td, Ascending); SC.css.removeClass(td, Descending); } }); } var tb table.tBodies0; var tr Array.prototype.slice.call(tb.rows, 0); tr tr.sort(function (a, b) { var aVal a.cellscol.order ? a.cellscol.order : a.cellscol.textContent; var bVal b.cellscol.order ? b.cellscol.order : b.cellscol.textContent; return sortBy.dir * (typeof aVal number ? aVal - bVal : aVal.localeCompare(bVal)); }); for(var i0; itr.length; ++i){ tb.appendChild(tri); }}function makeSortable(table) { var th table.tHead, i; th && (th th.rows0) && (th th.cells); if (th) i th.length; else return; // if no `thead>` then do nothing while (--i > 0) (function (i) { SC.css.ensureClass(thi,Sortable,true); thi.addEventListener(click, function () {sortTable(table, i)}); }(i));}function makeAllSortable(parent) { parent parent || document.body; var t parent.getElementsByTagName(table), i t.length; while (--i > 0) makeSortable(ti);}/*****************************//** General Extension Functions **/function checkVersion(minVer, curVer) { if (typeof curVer + typeof minVer ! stringstring) return false; var acurVer.split(.), bminVer.split(.), i0, lenMath.max(a.length, b.length); for (; ilen; i++) { if ((ai && !bi && parseInt(ai) > 0) || (parseInt(ai) > parseInt(bi))) return true; else if ((bi && !ai && parseInt(bi) > 0) || (parseInt(ai) parseInt(bi))) return false; } return true;}function browserSupportsNumberInput(){ var i document.createElement(input),r; i.typenumber; i.setAttribute(value, t); return i.value ! i.getAttribute(value);}function addCacheBuster(url) { var cachebuster ?__CacheBuster + new Date().getTime(); if (url.indexOf(?) ! -1) return url.replace(?,cachebuster + &); if (url.indexOf(#) ! -1) return url.replace(#,cachebuster + #); return url + cachebuster;}function httpRequestJSONObjectAsync(theUrl, callback) { var r new XMLHttpRequest(); r.onreadystatechange function() { if (r.readyState 4 && r.status 200) { callback(JSON.parse(r.responseText)); } else if (r.readyState 4) { console.warn(Metaquery failed. (Extension: + extensionId + )); } }; r.open(GET, addCacheBuster(theUrl), true); r.send();}function getValueSetForMaxVersion(settings, maxVersion) { var rv ; var maxDVver 0.0; for (var v in settings){ if (checkVersion(v,maxVersion) && checkVersion(maxDVver,v)) { maxDVver v; rv settingsv; } } return rv;}function checkIPList(str) { var tokens str.split(,); for (var i0; itokens.length; ++i){ if (!regExIPv4.test(tokensi) && !regExIPv6.test(tokensi)) return false; } return true;}function cleanKeyName(keyName){ return keyName.replace(/\./g,_).replace(/\//g,_);}function displayNotice(title,noticeTextOrContentProc,buttonText,buttonCommand,buttonPanelErrorOrContentProc){ var titlePanel SC.dialog.createTitlePanel(title); var mainContentPanel SC.dialog.createContentPanel(typeof noticeTextOrContentProc string ? $div(noticeTextOrContentProc) : null); if (typeof noticeTextOrContentProc function) noticeTextOrContentProc(mainContentPanel); var buttonPanel SC.dialog.createButtonPanel(); var button SC.ui.addElement(buttonPanel, INPUT, { type: button, value: buttonText, _commandName: buttonCommand || Close }); switch (typeof buttonPanelErrorOrContentProc){ case string: SC.dialog.setButtonPanelError(buttonPanel,buttonPanelErrorOrContentProc); break; case function: buttonPanelErrorOrContentProc(buttonPanel); break; } SC.dialog.showModalDialogRaw(MessageBox,titlePanel, mainContentPanel, buttonPanel); button.focus();}function userIPIsInIPList(ipList, userIP) { if (typeof ipaddr ! object) { return null; } var addr ipaddr.parse(userIP); var ips ipList.split(,); for (var ip of ips){ if (ip.indexOf(/) 0) { var checkIP ipaddr.parse(ip); if (addr.kind() checkIP.kind() && addr.match(checkIP,addr.kind() ipv6 ? 128 : 32)) return true; } else { var subnet ipaddr.parseCIDR(ip); if (addr.kind() subnet0.kind() && addr.match(subnet)) return true; } } return false;}function getValidationClass(element){ var e element; var v e.value, n e.id, s e.getAttribute(savedValue), d e.getAttribute(defaultValue), t e.getAttribute(keyType); if (v s && v d) return IsDefault; if (v s) return Unchanged; if (v d) return ToDefault; switch (t){ case WebServerAddressableUri: if (!webServerAddressableUriRegex.test(v)) return Invalid; break; case RelayAddressableUri: if (!relayAddressableUriRegex.test(v)) return Invalid; break; case WebServerListenUri: case WebServerAlternateListenUri: if (!webServerListenUriRegex.test(v)) return Invalid; break; case RelayListenUri: if (!relayListenUriRegex.test(v)) return Invalid; break; case IPList: if (!checkIPList(v)) return Invalid; else if (userIPIsInIPList(v,userIPAddress) (n.indexOf(Block) > -1)) return PartialValidation; else return Validated; break; case Number: if (!numberRegex.test(v)) return Invalid; break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: break; } return Changed;}function validateEntry(event){ if (!event.srcElement.getAttribute(keyType)) return; var validationClasses NoValidation, IsDefault, ToDefault, Unchanged, Changed, Validated, PartialValidation, Invalid ; var validation ; validation0 getValidationClass(event.srcElement); for (var cn in validationClasses){ SC.css.ensureClass(event.srcElement,validationClassescn,validation.indexOf(validationClassescn) > -1); }}function addRowsToTable (table,keys,keyInfo,location){ var sectionName location ? location.replace(/^0-9a-zA-Z+/g,-) + _ : ; var rowNum 0; for (var key in keys) { if (keyInfokey.show.indexOf(serverEnvironment) -1) continue; if (keyInfokey.isAdvanced true && !showAdvancedSettings) continue; if (!checkVersion(keyInfokey.minVer,SC.context.productVersion)) continue; var keyValue keyskey #KeyNotPresent ? : keyskey; var keyValueType keyInfokey.valueType; var keyValueEditor ; var keyDV keyInfokey.defaultValue; var keyDVText keyDV && keyInfokey.defaultValueInfo ? keyInfokey.defaultValueInfo : keyDV; var valueTip SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.CurrentValueString,keyValue) + \n + SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.DefaultValueString,keyDVText); var keyTip keyInfokey.toolTip.replace(/\\n/g,\n) + \n + valueTip; rowNum++; switch (keyValueType) { case IPList: valueTip SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.IPListTipMessageFormat,key.indexOf(Block) > -1 ? NOT : ,userIPAddress) + \n + valueTip + \n + SC.resExtension.EditWebConfigAppSettings.IPListTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(TEXTAREA,{rows:1}); break; case Number: keyValueEditor SC.ui.createElement(INPUT,{id:sectionName + key,type:number,keyType:keyValueType,min:0}); break; case Select: keyValueEditor SC.ui.createElement(SELECT,{title:valueTip}); if (keyskey #KeyNotPresent) SC.ui.addElement(keyValueEditor,OPTION,{ value:, _innerText:Not Present, selected:true, title:Not Present }); var kvOptions getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); for(var kvo in kvOptions) { SC.ui.addElement(keyValueEditor,OPTION,{ value:kvo, _innerText:kvo, selected:(keyValuekvo), title:kvOptionskvo }); } break; case CommaSeparatedValues: keyValueEditor SC.ui.createElement(ul,{className:csvEditor}); var validValues getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); for(var v in validValues) { var varCheck SC.ui.createElement(INPUT,{ type:checkbox, initChecked:false, setting:v, id:sectionName + key+v, keyType:keyValueType }); if (keyValue.split(,).indexOf(v) > 0){ varCheck.checkedtrue; varCheck.initChecked true; } var cbLabel SC.ui.createElement(LABEL,{_innerText: v, title:validValuesv}); if (keyDV.split(,).indexOf(v) > 0) { cbLabel.style.fontWeight bold; } SC.ui.addElement(keyValueEditor, li,varCheck,cbLabel); } break; case SessionTypeDisplayOrder: keyValueEditor SC.ui.createElement(INPUT,{id:sectionName + key,type:text,keyType:keyValueType}); break; case WebServerListenUri: case WebServerAlternateListenUri: case RelayListenUri: valueTip valueTip + \n + SC.resExtension.EditWebConfigAppSettings.UriTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(INPUT,{type:url}); break; case WebServerAddressableUri: case RelayAddressableUri: valueTip valueTip + \n + SC.resExtension.EditWebConfigAppSettings.UriTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(INPUT,{type:url}); break; case CryptoKey: if (!SC.context.enableCryptoKeySetting) continue; keyValueEditor SC.ui.createElement(TEXTAREA,{type:CryptoKey}); keyValueEditor.style.height 100px; break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: keyValueEditor SC.ui.createElement(INPUT, { type:text }); break; default: keyValueEditor SC.ui.createElement(INPUT,{type:text,disabled:true,title:key + is not expected.}); } keyValueEditor.setAttribute(id,sectionName + key); keyValueEditor.setAttribute(title,valueTip); keyValueEditor.setAttribute(value,keyValue); keyValueEditor.setAttribute(keyType,keyValueType); keyValueEditor.setAttribute(defaultValue,keyDV); keyValueEditor.setAttribute(savedValue,keyValue); if (Select,CommaSeparatedValues.indexOf(keyValueType) 0) SC.ui.setInnerText(keyValueEditor,keyValue); var row SC.ui.addElement(table,tr, {id:sectionName + key + Row}); var keyNameCol SC.ui.addElement(row,td,SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var keyValueCol SC.ui.addElement(row,td,keyValueEditor); if (extensionContext.settingValues.ShowDefaultValueColumn true){ var keyDefaultCol SC.ui.addElement(row,td,{_innerText:typeof(keyDV) ! undefined ? keyDV : ,title:valueTip}); } var keyExampleCol SC.ui.addElement(row,td,{ _innerText: (keyskey #KeyNotPresent ? SC.resExtension.EditWebConfigAppSettings.KeyNotPresentText : ) + add key + key + value + (keyValue.length > 100 ? keyValue.replace(keyValue.slice(16,-16),...) : keyValue) + />, title:keyTip }); keyValueCol.order rowNum; }}function getChangedItems (keys, keyInfo, location) { var sectionName ; if (location) sectionName location.replace(/^0-9a-zA-Z+/g,-) + _; var jsObj {}; for (var key in keys){ var keyElement $(sectionName + key); if (keyElement null) { continue; } var newValue keyElement.value; var oldValue keyskey; var keyType keyElement.getAttribute(keyType); var keyName (location ? location + > : ) + key; if (keyType ! CommaSeparatedValues){ if (newValue && oldValue #KeyNotPresent) { continue; } if (newValue oldValue) { continue; } } if (keyInfokey.show.indexOf(serverEnvironment) -1) continue; if (keyInfokey.isAdvancedtrue && !showAdvancedSettings) continue; var isCritical keyInfokey.isCritical true; switch (keyType){ case CommaSeparatedValues: newValue Array.prototype.filter.call(keyElement.querySelectorAll(input),function(i){return i.checked;}).map(function(e){return e.setting;}).join(,); if (newValue oldValue || (newValue && oldValue #KeyNotPresent)) continue; if (newValue ) { isCritical false; newValue #RemoveKey; } break; case SessionTypeDisplayOrder: var values newValue.split(,); var validValues getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); if(!values || values.length ! validValues.length || values.find(_ > !validValues.includes(_.trim())) || new Set(values).size ! validValues.length) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.SessionTypeDisplayOrderInvalidMessage, validValues)); return false; } break; case Select: var kvOptions getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); if (!kvOptionsnewValue) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.InvalidSelectionAlertMessage,keyName,Object.keys(kvOptions).join(, ))); return false; } break; case IPList: if (newValue ) { isCritical false; newValue #BlankValue; break; } if (!checkIPList(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.InvalidIPListAlertMessage,keyName)); return false; } if ((key.indexOf(Block) > -1) userIPIsInIPList(newValue,userIPAddress)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.IPListDoesNotContainCurrentIPAlertMessage,keyName,userIPAddress)); return false; } break; case Number: if (!numberRegex.test(newValue)){ alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.NumberAlertMessage,keyName)); return false; } break; case WebServerAddressableUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } if (!webServerAddressableUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.AddressableUriAlertMessage,keyName,\n + currentURIs.WebServer)); return false; } break; case RelayAddressableUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } if (!relayAddressableUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.AddressableUriAlertMessage,keyName,\n + currentURIs.Relay)); return false; } break; case WebServerAlternateListenUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } case WebServerListenUri: if (newValue || !webServerListenUriRegex.test(newValue)) { alertModal(SC.util.formatString( SC.resExtension.EditWebConfigAppSettings.ListenUriAlertMessage,keyName,\n + currentURIs.WebServerUri.protocol + //+: + (currentURIs.WebServerUri.port ? ( currentURIs.WebServerUri.protocol http: ? 80 : 443 ) : currentURIs.WebServerUri.port ) + /)); return false; } isCritical true; break; case RelayListenUri: if (newValue || !relayListenUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.ListenUriAlertMessage,keyName,\nrelay://+: + SC.context.clp.p + /)); return false; } isCritical true; break; case CryptoKey: if (!SC.context.enableCryptoKeySetting) return false; isCritical true; if (newValue || newValue #RemoveKey) { alertModal(SC.resExtension.EditWebConfigAppSettings.EmptyAsymmetricKey); return false; } else { if(!confim(SC.resExtension.EditWebConfigAppSettings.ChangeAsymmetricKeyWarning)) { return false; } } break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: if (newValue ) { newValue #RemoveKey; break; } break; default: alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.UnknownTypeAlertMessage,keyName)); return false; } if (isCritical){ if(!confirm(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.CriticalSettingUpdateConfirmationMessage,keyName,oldValue,newValue).replace(/\\n/g,\n))){ return false; } } jsObjkey newValue; settingsChanged true; } return jsObj;}/***** Event Handlers *****/SC.event.addGlobalHandler(SC.event.QueryCommandButtons,function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType AdministrationPage) { eventArgs.buttonDefinitions.push( { commandName: command_ + extensionId, text: SC.resExtension.EditWebConfigAppSettings.CommandText} ); } break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch(eventArgs.commandName) { case SelectTab_ + extensionId: var tabcontent document.getElementsByClassName(TabContent); for (i 0; i tabcontent.length; i++) { SC.ui.setVisible(tabcontenti,false); } var tablinks document.getElementsByClassName(TabLink); for (i 0; i tablinks.length; i++) { SC.ui.setSelected(tablinksi,false); } SC.ui.setSelected(eventArgs.commandElement,true); var activeContent document.querySelector(# + eventArgs.commandArgument + .TabContent); SC.ui.setVisible(activeContent,true); break; case command_ + extensionId: loadExtCookieSettings(); if (extensionContext.settingValues.HideServiceRestartNotice ! true) { displayNotice( SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeTitle, SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeMessage, SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeButton, noticeAccepted_ + extensionId, function(buttonPanel){ var checkbox SC.ui.createElement(input,{type:checkbox}); SC.event.addHandler(checkbox,change,function(eventArgs){ buttonPanel.querySelector(inputtypebutton)._commandArgumenteventArgs.target.checked ? true : null; }); SC.ui.addContent(buttonPanel,$span(checkbox,SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeDoNotShowText)); } ); break; } case noticeAccepted_ + extensionId: if (eventArgs.commandArgument) { extensionContext.settingValues.HideServiceRestartNotice true; saveExtCookieSetting(HideServiceRestartNotice); } case displaySettings_ + extensionId: SC.util.includeStyleSheet(extensionContext.baseUrl + Style.css); SC.service.EditWebConfigAppSettings_GetUserIPAddress(function(returnedIP){ userIPAddress returnedIP; SC.service.EditWebConfigAppSettings_GetUris(function(uriJSON){ var uris JSON.parse(uriJSON); currentURIs.WebServer uris.WebServerUri; currentURIs.WebServerUri SC.ui.createElement(A,{id:WebServerUri,href:uris.WebServerUri}); currentURIs.Relay uris.RelayUri; currentURIs.RelayUri SC.ui.createElement(A,{id:RelayUri,href:uris.RelayUri}); if (cloudRegEx.test(currentURIs.WebServer) || cloudRegEx.test(currentURIs.Relay)) serverEnvironment hosted; else if (hostedrmmRegEx.test(currentURIs.WebServer) || hostedrmmRegEx.test(currentURIs.Relay)) serverEnvironment hostedrmm; else serverEnvironment local; SC.service.EditWebConfigAppSettings_GetWebConfigFileContents(function(WebConfigContents){ dataUri SC.ui.createDataUri(SC.util.isCapable(SC.util.Caps.Safari) ? attachment/config : text/config, WebConfigContents); httpRequestJSONObjectAsync(extensionContext.baseUrl + Defaults.json,function(keyInfo){ var validKeys Object.keys(keyInfo) .filter(function(x){ return x ! LocationSettings && checkVersion(keyInfox.minVer,SC.context.productVersion) && keyInfox.show.indexOf(serverEnvironment) > 0 && (keyInfox.isAdvanced true ? showAdvancedSettings : true ) && (x ! AsymmetricKey || SC.context.enableCryptoKeySetting); }); SC.service.EditWebConfigAppSettings_GetEditableWebConfigAppSettingKeysAndValues(validKeys,keyInfo.LocationSettings.EditableSettings, function(json){ var allKeys JSON.parse(json); var keys allKeys.AppSettings; var lkeys allKeys.Locations; var showAdvancedSettingsButton SC.ui.createElement(a,{_innerText:SC.resExtension.EditWebConfigAppSettings.ShowAdvancedSettingsText}); showAdvancedSettingsButton.addEventListener(click,function(){ showAdvancedSettings true; SC.event.dispatchEvent(null,SC.event.ExecuteCommand,{commandName:displaySettings_ + extensionId}); }); var instructions $p(SC.resExtension.EditWebConfigAppSettings.DialogInstructions, (browserSupportsNumberInput() ? : + SC.resExtension.EditWebConfigAppSettings.NoNumberSupportMessage), (!showAdvancedSettings ? $span( , showAdvancedSettingsButton, .) : + SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.YourIPAddressMessage,userIPAddress)) ); SC.dialog.showModalButtonDialog( EditWebConfigAppSettings, SC.resExtension.EditWebConfigAppSettings.DialogTitle, SC.resExtension.EditWebConfigAppSettings.DialogButtonText, Default, function (container) { container.addEventListener(keyup,function(event){validateEntry(event);}); container.addEventListener(mouseup,function(event){validateEntry(event);}); SC.ui.addContent(container, instructions); var WebConfigLinksContainer SC.ui.addElement(container, ul,{}); var WebConfigHelpLink SC.ui.createElement(A,{href:SC.resExtension.EditWebConfigAppSettings.WebConfigSettingsLinkHref,target:_blank, _innerText:SC.resExtension.EditWebConfigAppSettings.WebConfigSettingsLinkText}); var WebConfigDownloadLink SC.ui.createElement(A,{download:web.config,href:dataUri,_innerText:SC.resExtension.EditWebConfigAppSettings.WebConfigLinkText}); SC.ui.addElement(WebConfigLinksContainer,li,WebConfigDownloadLink); SC.ui.addElement(WebConfigLinksContainer,li,WebConfigHelpLink); if (showAdvancedSettings) { // Need to add tabs for Main AppSettings and individual Location AppSetting sections var tabs SC.ui.addElement(container,ul,{className:SectionTabs}); SC.ui.addElement(tabs,li,{innerText:AppSettings,id:TabLink_AppSettings,className:TabLink Selected,_commandName:SelectTab_ + extensionId,_commandArgument:AppSettings}); SC.ui.addElement(tabs,li,{innerText:Per-Page Settings,id:TabLink_PerPageSettings,className:TabLink,_commandName:SelectTab_ + extensionId,_commandArgument:PerPageSettings}); var pageSettingContainer SC.ui.addElement(container,dl,{id:PerPageSettings,className:TabContent}); for (var i0; i Object.keys(lkeys).length; i++){ // Avoid find and findIndex being provided as keys in IE when using Object.keys(obj) var lkeyName Object.keys(lkeys)i; var dt SC.ui.addElement(pageSettingContainer,dt,$span({innerText:lkeyName,id:SectionHeader_ + cleanKeyName(lkeyName),className:SectionHeader})); var dd SC.ui.addElement(pageSettingContainer,dd,{}); var dddiv SC.ui.addElement(dd,div,{}); var table SC.ui.addElement(dddiv,TABLE,{id:cleanKeyName(lkeyName)}); var thead SC.ui.addElement(table,thead,{}); var headerRow SC.ui.addElement(thead,tr,{}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.KeyColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.ValueColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.SettingColumnTitle}); var tbody SC.ui.addElement(table,tbody,{}); addRowsToTable( tbody, lkeyslkeyName, keyInfo.LocationSettings.LocationslkeyName.AppSettings, lkeyName ); } SC.ui.setVisible(pageSettingContainer,false); } var tablecontainer SC.ui.addElement(container,DIV,{id:AppSettings,className:TabContent}) var table SC.ui.addElement(tablecontainer,TABLE,{}); var thead SC.ui.addElement(table,thead,{}); var headerRow SC.ui.addElement(thead,tr, {}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.KeyColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.ValueColumnTitle}); if (extensionContext.settingValues.ShowDefaultValueColumn true){ SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.DefaultColumnTitle}); } SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.SettingColumnTitle}); var tbody SC.ui.addElement(table,tbody,{}); addRowsToTable(tbody,keys,keyInfo); SC.ui.setVisible(tablecontainer,true); }, function (eventArgs) { if (eventArgs.commandName SelectTab_ + extensionId) return; var appSettingsJsObj getChangedItems(keys,keyInfo); if (appSettingsJsObj false) return; var locationJsObj {}; for (var i0; i Object.keys(lkeys).length; i++){ var lkeyName Object.keys(lkeys)i; var thisLocObj getChangedItems(lkeyslkeyName,keyInfo.LocationSettings.LocationslkeyName.AppSettings,lkeyName); if (thisLocObj false) return; if (Object.keys(thisLocObj).length > 0) locationJsObjlkeyName thisLocObj; }; if (settingsChanged) { SC.service.EditWebConfigAppSettings_SetWebConfigAppSettingValues( JSON.stringify(appSettingsJsObj), JSON.stringify(locationJsObj), function () { SC.dialog.showModalActivityAndReload(Save, true, window.location.href); } ); } else { SC.dialog.hideModalDialog(); } } ); makeAllSortable($(dialog)); SC.dialog.setButtonPanelError(SC.ui.findDescendent(SC.dialog.getModalDialog(),function(_){return _.className && _.className.indexOf(ButtonPanel) > -1;}),{message:SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeTitle}); }); }); }); }); }); break; }});/** Extend Extension Options **/var extendedExtensionOptions {};/* Option Settings Below */extendedExtensionOptions.helpUrl https://help.screenconnect.com/Extension:Edit_Web.Config_AppSettings;extendedExtensionOptions.extensionResourceID EditWebConfigAppSettings;/* Option Settings Above */extendedExtensionOptions.extensionIdextensionContext.baseUrl.split(/).slice(-2)0;SC.resHelpPanel.Link+extendedExtensionOptions.extensionId+.UrlextendedExtensionOptions.helpUrl;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState,function(eventArgs){ if(eventArgs.commandNameEditExtensionSettings&&eventArgs.commandContext.extensionInfo.ExtensionIDextendedExtensionOptions.extensionId&&eventArgs.commandElement._commandNameEditExtensionSettings){ if(extendedExtensionOptions.extensionResourceID&&extendedExtensionOptions.extensionResourceID.length) SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:command_+extensionId,_innerText:SC.resExtension.+extendedExtensionOptions.extensionResourceID+.CommandText}); SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:NavigateHelpLink,_commandArgument:extendedExtensionOptions.extensionId,_innerText:SC.resCommand.Help.Text.replace( ▽,)}); }});/******************************/});/script>script>SC.extension.addInitializeProc(8e90bccf-06b3-4f40-a08d-263d9b1e973e, function (extensionContext) {const extensionID extensionContext.baseUrl.split(/).slice(-2)0;window.sessionStorage.setItem(sessionCreated, false);window.sessionStorage.setItem(isSessionNameTextboxInFocus, false);SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType ! GuestPage && SC.context.isUserAdministrator) { eventArgs.buttonDefinitions.push({ commandName: toggleJoinModes, text: SC.resDefaultSession.PopoutPanel.Button.Text }); } break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case toggleJoinModes: displayToggleJoinModesModal(); break; case CreateSession: window.sessionStorage.setItem(sessionCreated, true); break; }});SC.event.addGlobalHandler(SC.event.PageDataRefreshed, function (eventArgs) { if ($(sessionNameTextbox) && window.sessionStorage.getItem(isSessionNameTextboxInFocus) false) { $(sessionNameTextbox).focus(); SC.event.addHandler(SC.dialog.getModalDialog(), keyup, function (eventArgs) { if (SC.event.isEnterKey(eventArgs)) { SC.command.dispatchExecuteCommand(SC.dialog.getModalDialog(), SC.dialog.getModalDialog(), SC.dialog.getModalDialog(), Default); eventArgs.stopPropagation(); } }); window.sessionStorage.setItem(isSessionNameTextboxInFocus, true); } if (window.sessionStorage.getItem(sessionCreated) true) { var sessionInfo SC.pagedata.get(); var selectedRows Array.prototype.filter.call($(.DetailTableContainer table).rows, function (r) { return SC.ui.isSelected(r); }); if (selectedRows.length 1 && (selectedRows0._dataItem.SessionType SC.types.SessionType.Support || selectedRows0._dataItem.SessionType SC.types.SessionType.Meeting)) { var legacySessionInfo { SessionGroupPath: sessionInfo.SessionGroupPath0, SessionID: selectedRows0._dataItem.SessionID, Name: selectedRows0._dataItem.Name, SessionType: selectedRows0._dataItem.SessionType, Code: null }; if (extensionContext.settingValues.CreateAndJoin true) { displayCreateAndJoinConfigModal(legacySessionInfo); } } window.sessionStorage.setItem(sessionCreated, false); } //hack! if (SC.context.pageType GuestPage) { SC.service.HasPrivateSessions(function (hasPrivateSession) { if (!hasPrivateSession) { SC.ui.setVisible(SC.ui.findAncestorByTag(SC.ui.findDescendentByTag($(.ActionPanel), INPUT), DIV, false)); } }); }});function displayCreateAndJoinConfigModal(sessionInfo) { SC.dialog.showModalButtonDialog( Prompt, SC.resDefaultSession.CreateModal.Title, SC.resDefaultSession.CreateModal.Button.Text, Default, function (container) { buildCreateSessionModal(container); }, function (eventArgs) { var sessionName $(#sessionNameTextbox).value ? Untitled Session : $(#sessionNameTextbox).value; var sessionCode extensionContext.settingValues.DefaultCodeToSessionName true ? sessionName : $(#sessionCodeTextbox) ! null ? $(#sessionCodeTextbox).value ? null : $(#sessionCodeTextbox).value : null; sessionInfo.Name sessionName; sessionInfo.Code sessionCode; if (extensionContext.settingValues.DefaultSessionMode private) { updateAndLaunchPrivateSession(sessionInfo, eventArgs); } else if (extensionContext.settingValues.DefaultSessionMode public) { updateAndLaunchPublicSession(sessionInfo, eventArgs); } window.sessionStorage.setItem(isSessionNameTextboxInFocus, false); } );}function updateAndLaunchPrivateSession(sessionInfo, eventArgs) { SC.service.UpdateSessionName( sessionInfo.SessionGroupPath, sessionInfo.SessionID, sessionInfo.Name, function () { if (sessionInfo.Code ! null) { SC.service.UpdateSessionCode( sessionInfo.SessionGroupPath, sessionInfo.SessionID, sessionInfo.Code, function () { launchCreateAndJoinSession(sessionInfo, eventArgs); } ) } else { launchCreateAndJoinSession(sessionInfo, eventArgs); } } );}function updateAndLaunchPublicSession(sessionInfo, eventArgs) { SC.service.UpdateSessionName( sessionInfo.SessionGroupPath, sessionInfo.SessionID, sessionInfo.Name, function () { launchCreateAndJoinSession(sessionInfo, eventArgs); } );}function buildCreateSessionModal(container) { var sessionCodeTextbox SC.ui.createTextBox({ id: sessionCodeTextbox }, false, false, ); var sessionNameTextbox SC.ui.createTextBox({ id: sessionNameTextbox }, false, false, ); if (SC.util.Caps.InternetExplorer().major > 0) { var codeDiv SC.ui.createElement(div); SC.ui.addContent(codeDiv, $label({ for: sessionCodeTextBox, textContent: Session Code }, sessionCodeTextbox ) ); SC.ui.setContents(container, $div({}, $label({ for: sessionNameTextbox, textContent: Session Name }, sessionNameTextbox ) ), extensionContext.settingValues.DefaultSessionMode private ? codeDiv : null ); if (extensionContext.settingValues.DefaultCodeToSessionName true) { codeDiv.style.setAttribute(display, none); } else { codeDiv.style.setAttribute(display, block); } } else { SC.ui.setContents(container, $div({}, $label({ for: sessionNameTextbox, textContent: Session Name }, sessionNameTextbox ) ), extensionContext.settingValues.DefaultSessionMode private ? $div({ style: extensionContext.settingValues.DefaultCodeToSessionName true ? display:none : display:block }, $label({ for: sessionCodeTextBox, textContent: Session Code }, sessionCodeTextbox ) ) : null ); }}function launchCreateAndJoinSession(sessionInfo, eventArgs) { SC.launch.startJoinSession( null, function (userData, promptFieldMap, onSuccess, onFailure) { SC.http.performWithServiceContext(SC.util.doesBrowserNeedSyncServiceContextForLaunch(), function () { SC.service.GetAccessToken( sessionInfo.SessionGroupPath, sessionInfo.SessionID, function (accessToken) { onSuccess( SC.util.getClientLaunchParameters( sessionInfo.SessionID, sessionInfo.SessionType, sessionInfo.Name, null, null, accessToken, SC.types.ProcessType.Host, eventArgs.isAdvanced ? SC.types.ClientLaunchAttributes.SuspendedInput : SC.types.ClientLaunchAttributes.None ) ); } ); }); }, false, null, null, null );}function displayToggleJoinModesModal() { SC.dialog.showModalButtonDialog( Prompt, SC.resDefaultSession.ToggleModal.Title, SC.resDefaultSession.ToggleModal.SaveButton.Text, Default, function (container) { buildToggleJoinModesModal(container); }, function (eventArgs) { var settings { DefaultSessionMode: $(#session_private).checked ? private : public, CreateAndJoin: $(#join_false).checked ? false : true, DefaultCodeToSessionName: $(#code_false).checked ? false : true }; SC.service.SaveSessionSettings(JSON.stringify(settings), function () { SC.dialog.hideModalDialog(); SC.dialog.showModalActivityAndReload(null, false, window.location.origin + window.location.pathname); }); });}function buildToggleJoinModesModal(container) { var validatedSettings assertCorrectSettings( extensionContext.settingValues.DefaultSessionMode, extensionContext.settingValues.DefaultCodeToSessionName, extensionContext.settingValues.CreateAndJoin ); var currentSessionMode validatedSettings.sessionModeSetting; var currentDefaultCode validatedSettings.defaultCodeSetting; var currentJoinMode validatedSettings.joinModeSetting; var sessionModeOption1 SC.ui.createRadioButtonOption( div, Private, session_, private, currentSessionMode.toLowerCase() private ? true : false, true, null ); var sessionModeOption2 SC.ui.createRadioButtonOption( div, Public, session_, public, currentSessionMode.toLowerCase() public ? true : false, true, null ); var defaultCodeOption1 SC.ui.createRadioButtonOption( div, False, code_, false, currentDefaultCode.toLowerCase() false ? true : false, true, null ); var defaultCodeOption2 SC.ui.createRadioButtonOption( div, True, code_, true, currentDefaultCode.toLowerCase() true ? true : false, currentSessionMode.toLowerCase() private ? true : false, null ); var joinModeOption1 SC.ui.createRadioButtonOption( div, False, join_, false, currentJoinMode.toLowerCase() false ? true : false, true, null ); var joinModeOption2 SC.ui.createRadioButtonOption( div, True, join_, true, currentJoinMode.toLowerCase() true ? true : false, true, null ); SC.ui.setContents(container, $h3({ innerHTML: SC.resDefaultSession.ToggleModal.Warning.Text }), $div({ id: sessionModeDiv, onchange: function (event) { if (event.target.value public) { $(#code_true).disabled true; $(#code_false).checked true; } else { $(#code_true).disabled false; } } }, $p({ innerHTML: b> + SC.resDefaultSession.ToggleModal.SessionModeOptions.Label + /b> }), sessionModeOption1, sessionModeOption2 ), $div({ id: defaultCodeDiv, }, $p({ innerHTML: b> + SC.resDefaultSession.ToggleModal.DefaultCodeOptions.Label + /b> }), defaultCodeOption1, defaultCodeOption2 ), $div({ id: joinModeDiv }, $p({ innerHTML: b> + SC.resDefaultSession.ToggleModal.JoinModeOptions.Label + /b> }), joinModeOption1, joinModeOption2 ) );}function assertCorrectSettings(currentSessionMode, currentDefaultCode, currentJoinMode) { switch (currentSessionMode.toLowerCase()) { case private: case public: break; default: currentSessionMode private; } switch (currentDefaultCode.toLowerCase()) { case false: case true: break; default: currentDefaultCode false } switch (currentJoinMode.toLowerCase()) { case false: case true: break; default: currentJoinMode false } return { sessionModeSetting: currentSessionMode, defaultCodeSetting: currentDefaultCode, joinModeSetting: currentJoinMode }}});/script>script>SC.extension.addInitializeProc(f3ae653f-bdca-471f-80c3-eaa4a0f7d540, function (extensionContext) {var helpLink https://help.screenconnect.com/Extension:List_Published_Sessions;var extensionId f3ae653f-bdca-471f-80c3-eaa4a0f7d540;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function(eventArgs){ switch(eventArgs.commandName) { case EditExtensionSettings: if (eventArgs.commandContext.extensionInfo.ExtensionID extensionId && eventArgs.commandElement._commandName EditExtensionSettings){ SC.ui.addElement( eventArgs.target.parentElement, A,{ href:helpLink, innerHTML:SC.resCommand.Help.Text.replace( ▽,), target: _blank } ); } break; }});SC.util.includeStyleSheet(extensionContext.baseUrl + Style.css);SC.event.addGlobalHandler(SC.event.QueryPanels, function (eventArgs) { switch(eventArgs.area){ case GuestActionPanel: eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ innerHTML: SC.resGuestActionPanel.PublicSession.Heading}), $table({id: publicTable}), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 5 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).length > 0; }, refreshProc: function (container, sessionInfo, wasMadeVisible) { SC.ui.clear($(publicTable)); for (var i 0; i sessionInfo.Sessions.length; i++) { var rowClass; if (i % 2 0) rowClass tableDataAlt; else rowClass tableDataPrime; var displayOrNot true; if (sessionInfo.Sessionsi.ActiveConnections.length > 0) { for (var j 0; j sessionInfo.Sessionsi.ActiveConnections.length; j++) { if ((sessionInfo.Sessionsi.ActiveConnectionsj.ProcessType 2) && (extensionContext.settingValues.HideSessionsWhereGuestIsConnected true)) displayOrNot false; } } if (displayOrNot) { SC.ui.addElement($(publicTable), tr, {id: publicRow + i}); SC.ui.addElement($(publicRow + i), td, {id: publicSessionName + i, innerHTML: sessionInfo.Sessionsi.Name, className: rowClass}); if (extensionContext.settingValues.ShowSessionHostIfKnown true && sessionInfo.Sessionsi.Host ! null) SC.ui.addElement($(publicRow + i), td, {id: publicSessionHost + i, innerHTML: sessionInfo.Sessionsi.Host, className: rowClass}); SC.ui.addElement($(publicRow + i), td, {id: publicSessionJoin + i}); SC.ui.addElement($(publicSessionJoin + i), a, { id: publicJoinButton + i, className: GoLink Small, _commandName: JoinBySessionID, _commandArgument: sessionInfo.Sessionsi.SessionID }); } } //hack attack SC.ui.setVisible(SC.ui.findAncestorByTag(SC.ui.findDescendentByTag($(.ActionPanel), SELECT), DIV, false)); } }); break; }});});/script>script>SC.extension.addInitializeProc(4e60fa95-d5a2-4f94-864d-f45b585178df, function (extensionContext) {SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { switch (eventArgs.commandName) { case DisableLockWorkStationOnDisconnect: case LockWorkStationOnDisconnect: if (extensionContext.settingValues.ShouldUseNotes.toLowerCase() ! true && (eventArgs.commandContext.permissions & SC.types.SessionPermissions.Edit) 0) eventArgs.isEnabled eventArgs.isVisible false; else if (extensionContext.settingValues.ShouldUseNotes.toLowerCase() true && (eventArgs.commandContext.permissions & SC.types.SessionPermissions.AddNote) 0) eventArgs.isEnabled eventArgs.isVisible false; break; }});SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case HostDetailPanel: case HostDetailPopoutPanel: if (window.getSessionTypeUrlPart() SC.types.SessionType.Access) eventArgs.buttonDefinitions.push( { commandName: LockWorkStationOnDisconnect, className: AlwaysOverflow, text: SC.resLockWorkStationOnDisconnect.Enable }, { commandName: DisableLockWorkStationOnDisconnect, className: AlwaysOverflow, text: SC.resLockWorkStationOnDisconnect.Disable } ); break; }});var getCheckedOrSelectedSessionIDs function () { var checkedOrSelectedSessionIDs ; var rows $(.DetailTableContainer table).rows; Array.prototype.find.call(rows, function (row) { if (row._dataItem) { var isChecked SC.ui.isChecked(row); var isSelected SC.ui.isSelected(row); if (isChecked || isSelected) checkedOrSelectedSessionIDs.push(row._dataItem.SessionID); } }); return checkedOrSelectedSessionIDs;};SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch(eventArgs.commandName) { case LockWorkStationOnDisconnect: var checkedOrSelectedSessionIDsToLock getCheckedOrSelectedSessionIDs(); SC.dialog.showModalActivityBox(SC.resLockWorkStationOnDisconnect.Processing, SC.resLockWorkStationOnDisconnect.Enabling.Message); SC.service.TagAccessSessionsForLockOnDisconnect( window.getSessionGroupUrlPart(), checkedOrSelectedSessionIDsToLock, function () { SC.dialog.hideModalDialog(); } ); break; case DisableLockWorkStationOnDisconnect: var checkedOrSelectedSessionIDsToDisableLock getCheckedOrSelectedSessionIDs(); SC.dialog.showModalActivityBox(SC.resDisableLockWorkStationOnDisconnect.Processing, SC.resDisableLockWorkStationOnDisconnect.Enabling.Message); SC.service.UntagAccessSessionsForLockOnDisconnect( window.getSessionGroupUrlPart(), checkedOrSelectedSessionIDsToDisableLock, function () { SC.dialog.hideModalDialog(); } ); break; }});});/script>title> ConnectWise ScreenConnect Remote Support Software/title>/head>body>div classHiddenPanel>/div>script> SC.ui.setVisible(document.body, false); /script>div classOuterPanel> div classHeaderPanel>/div> div classNavigationPanel ArrowNavigation tabindex10>/div> div classMainPanel> div classContentPanel> div> div classWelcomePanel>/div> div classActionPanel>/div> /div> div classInfoPanel>/div> /div> /div>/div>script> SC.context.scriptBaseUrl SC.util.getBaseUrl($(defaultScript).src);/script> script> SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { var session null; var hostAccessToken null; switch (eventArgs.commandName) { case JoinBySessionID: session window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID eventArgs.commandArgument; })0; break; case JoinByTag: var taggedSessionInfo window.getTaggedSessionInfo(eventArgs.commandArgument); hostAccessToken taggedSessionInfo.HostAccessToken; session window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID taggedSessionInfo.SessionID || (taggedSessionInfo.Code && s.Code.toLowerCase() taggedSessionInfo.Code.toLowerCase()); })0; break; } // older IE only allows launching urls on actual clicks and this could be sent by a keystroke if (session && (SC.command.doesClickDispatch(eventArgs.commandElement) || !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 }))) { SC.launch.startJoinSession( { session: session, hostAccessToken: hostAccessToken, processType: hostAccessToken ? SC.types.ProcessType.Host : SC.types.ProcessType.Guest }, function (joinInfo, _, onSuccess, onFailure) { onSuccess( SC.util.getClientLaunchParameters( joinInfo.session.SessionID, joinInfo.session.SessionType, joinInfo.session.Name, joinInfo.fieldMap.participantName.value, null, joinInfo.hostAccessToken, joinInfo.processType ) ); } ); } }); SC.event.addGlobalHandler(SC.event.QueryJoinInfo, function (eventArgs) { if (eventArgs.session) { eventArgs.shouldShowPrompt SC.util.getSessionTypeBooleanResource(JoinPanel.{0}PromptVisible, eventArgs.session.SessionType); eventArgs.promptText SC.util.getSessionTypeResource(JoinPanel.{0}PromptMessage, eventArgs.session.SessionType); eventArgs.buttonText SC.util.getSessionTypeResource(JoinPanel.{0}PromptButtonText, eventArgs.session.SessionType); eventArgs.fieldMap.participantName { labelText: SC.util.getSessionTypeResource(JoinPanel.{0}ParticipantNameLabelText, eventArgs.session.SessionType), value: , visible: SC.util.getSessionTypeBooleanResource(JoinPanel.{0}PromptParticipantNameVisible, eventArgs.session.SessionType), }; } }); SC.event.addGlobalHandler(SC.event.QueryParticipantJoinedCount, function (eventArgs) { var sessionInfo window.getSessionInfo(); var session sessionInfo.Sessions.find(function (s) { return s.SessionID eventArgs.clientLaunchParameters.s; }); if (session ! undefined) eventArgs.participantJoinedCount session.ActiveConnections.filter(function (ac) { if (eventArgs.clientLaunchParameters.n) return ac.ProcessType SC.types.ProcessType.Host; return ac.ProcessType SC.types.ProcessType.Guest && ac.ParticipantName eventArgs.clientLaunchParameters.r; }).length; }); SC.event.addGlobalHandler(SC.event.QueryPanels, function (eventArgs) { switch (eventArgs.area) { case GuestActionPanel: eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $div({ className: Loading })); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 1 && sessionInfo null; } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $a({ _commandName: JoinByTag, _commandArgument: DefaultSession, className: GoLink Large, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), $h2({ _htmlResource: GuestActionPanel.InvitationSession.Heading }), $p({ _htmlResource: GuestActionPanel.InvitationSession.Message }), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 3 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.Sessions.find(function (s) { return s.SessionID window.getTaggedSessionInfo(DefaultSession).SessionID; }); } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.CodeSession.Heading }), $p({ _htmlResource: GuestActionPanel.CodeSession.Message }), $p({ className: GuestActionBar }, SC.ui.createSearchTextBox({ _commandName: JoinByTag, _commandArgument: DefaultCode, value: window.getTaggedSessionInfo(DefaultCode).Code || }, function (eventArgs) { var sessionCode SC.util.getTrimmedOrNull(SC.event.getElement(eventArgs).value); window.setTaggedSessionInfo(DefaultCode, { Code: sessionCode }); }), $a({ _commandName: JoinByTag, _commandArgument: DefaultCode, className: GoLink Medium, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), ), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 5 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.DoNonPublicCodeSessionsExist; }, refreshProc: function (container, sessionInfo, wasMadeVisible) { var taggedSessionInfo window.getTaggedSessionInfo(DefaultCode); SC.ui.setDisabled( SC.ui.findDescendentByTag(container, A), !sessionInfo.Sessions.find(function (s) { return taggedSessionInfo.Code && s.Code.toLowerCase() taggedSessionInfo.Code.toLowerCase(); }) ); if (wasMadeVisible) SC.ui.findDescendentByTag(container, INPUT).focus(); } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.PublicSession.Heading }), $p({ _htmlResource: GuestActionPanel.PublicSession.Message }), $p({ className: GuestActionBar }, $select(), $a({ _commandName: JoinBySessionID, className: GoLink Medium, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), ), ); SC.event.addHandler(SC.ui.findDescendentByTag(container, SELECT), change, function (eventArgs) { var selectBox SC.event.getElement(eventArgs); SC.ui.findDescendentByTag(container, A)._commandArgument selectBox.optionsselectBox.selectedIndex.value; }); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 5 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).length > 0; }, refreshProc: function (container, sessionInfo, wasMadeVisible) { var selectBox SC.ui.findDescendentByTag(container, SELECT); var link SC.ui.findDescendentByTag(container, A); SC.ui.setContents(selectBox, sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).map(function (s) { return $option({ value: s.SessionID }, s.Name); }) ); var optionIndex Array.prototype.findIndex.call(selectBox.options, function (o) { return o.value link._commandArgument; }); if (optionIndex ! -1) selectBox.selectedIndex optionIndex; else link._commandArgument selectBox.optionsselectBox.selectedIndex.value; } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.NoAvailableSessions.Heading }), $p({ _htmlResource: GuestActionPanel.NoAvailableSessions.Message }), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 8 && previousPassVisibleCount 0; } }); break; } }); SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) { var getTaggedValuesFunc function (propertyName) { return Object.keys(window._taggedSessionInfos) .map(function (key) { return window._taggedSessionInfoskey; }) .filter(function (_) { return _propertyName; }) .map(function (_) { return _propertyName; }); } eventArgs.requestInfoMapGuestSessionInfo { sessionCodes: getTaggedValuesFunc(Code), sessionIDs: getTaggedValuesFunc(SessionID), }; }); SC.event.addGlobalHandler(SC.event.PreRender, function () { window._taggedSessionInfos {}; SC.css.ensureClass(document.documentElement, ShowMenu, false); var queryStringMap SC.util.parseQueryString(window.location.search); window.setTaggedSessionInfo(DefaultCode, { Code: queryStringMap.Code }); window.setTaggedSessionInfo(DefaultSession, { SessionID: queryStringMap.Session, HostAccessToken: queryStringMap.HostAccessToken }); var welcomePanel $(.WelcomePanel); var actionPanel $(.ActionPanel); SC.ui.setVisible(welcomePanel, SC.util.getBooleanResource(GuestWelcomePanel.Visible)); SC.ui.setContents(welcomePanel, $h2({ _htmlResource: GuestWelcomePanel.Heading }), $p({ _htmlResource: GuestWelcomePanel.Message }), ); SC.panellist.queryAndInitializePanels(actionPanel); SC.panellist.refreshPanels(actionPanel, null); }); SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () { SC.panellist.refreshPanels($(.ActionPanel), window.getSessionInfo()); if (!window._hasJoinedDefault && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 })) { SC.command.dispatchExecuteCommand(window.document.body, window.document.body, window.document.body, JoinByTag, DefaultSession); window._hasJoinedDefault true; } }); /script>script> SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case TrayIconPanel: eventArgs.buttonDefinitions.push( { commandName: ActionCenter, imageUrl: Images/ActionCenter.svg }, { commandName: Extras, imageUrl: Images/Extras.svg }, { commandName: Applications, imageUrl: Images/Applications.svg } ); break; case ExtrasNavigationPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: NavigateExtensionBrowser } ); break; case ToolsPanel: eventArgs.buttonDefinitions.push( { commandName: Extras, imageUrl: Images/Extras.svg }, { commandName: Login } ); break; case UserPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: NavigateControlPanel }, { commandName: ChangePassword }, { commandName: Logout } ); break; case UserHelpPopoutPanel: if (SC.context.pageType ! GuestPage && SC.context.pageType ! LoginPage) { eventArgs.buttonDefinitions.push({ commandName: GiveFeedback }); for (var i 1; ; i++) { var resourceValue SC.resHelpPanel.Link + i + .Text; if (resourceValue undefined || resourceValue ) break; var url SC.util.sanitizeUrl(SC.resHelpPanel.Link + i + .Url); eventArgs.buttonDefinitions.push({ commandName: NavigateHelpLink, commandArgument: url, text: resourceValue, title: url }); } } break; } }); SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { switch (eventArgs.commandName) { case User: case ActionCenter: eventArgs.isVisible SC.context.isUserAuthenticated; break; case Login: eventArgs.isVisible SC.context.pageType ! SetupWizardPage && !SC.context.isUserAuthenticated && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 12 }); // Login page doesnt support IE break; case NavigateControlPanel: eventArgs.isVisible !!SC.context.controlPanelUrl; break; case ChangePassword: eventArgs.isVisible SC.context.canChangePassword; break; case Extras: eventArgs.isVisible SC.popout.computePopoutCommandsVisible(eventArgs, , Navigation); break; case Applications: case Help: eventArgs.isVisible SC.popout.computePopoutCommandsVisible(eventArgs); break; case NavigateExtensionBrowser: eventArgs.isVisible SC.context.isUserAdministrator; break; } }); SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case Extras: SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: , Navigation }); break; case Applications: SC.popout.showPanelFromCommand(eventArgs); break; case ActionCenter: SC.popout.showPanelFromCommand(eventArgs, null, { buildProc: function (popoutPanel) { var actionCenterInfo SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo); SC.ui.setContents(popoutPanel, $div({ className: ActionCenterPanel }, $h2({ _textResource: ActionCenterPanel.Text }), $ul({ className: List, _visible: SC.util.any(actionCenterInfo.ActionItems) }, (actionCenterInfo.ActionItems || ) .map(function (it) { var parsedEventData SC.util.parseEventData(it.Data); return $li({ _eventHandlerMap: { click: function() { window.location.href SC.nav.getHostUrl({ sessionType: it.SessionType, sessionID: it.SessionID, tabName: SC.nav.getHostTabName(it.EventType), tabContext: it.EventID }); }, } }, $img({ src: Images/Notification + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + .svg }), $h3({ className: Type }, SC.resSessionEvent. + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + .Title), $p({ className: Name, title: it.Name }, it.Name), $p({ className: DataContent, title: parsedEventData.content }, parsedEventData.content), $p({ className: Time }, SC.util.formatDateTime(it.Time, { includeRelativeDate: true })), ) }) ), $div({ className: EmptyPanel, _visible: !SC.util.any(actionCenterInfo.ActionItems) }, $p($img({ src: images/EmptyActionCenter.svg })), $h4({ _textResource: ActionCenterPanel.EmptyHeader }), $p({ _textResource: ActionCenterPanel.EmptyText }), ), )); }}); break; case Login: SC.util.sendToLogin(SC.types.LoginReason.None, false); break; case Logout: SC.util.sendToLogin(SC.types.LoginReason.Logout, false); break; case User: SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: Help, }); break; case NavigateControlPanel: window.open(SC.util.sanitizeUrl(SC.context.controlPanelUrl)); break; case ChangePassword: var params {}; paramsSC.context.loginUserNameParameterName eventArgs.commandArgument; window.location.href SC.context.changePasswordPageUrl + SC.util.getQueryString(params); break; case NavigateHelpLink: window.open(eventArgs.commandArgument); break; case ToggleMenu: SC.css.toggleClass(document.documentElement, ShowMenu); break; case GiveFeedback: SC.dialog.showModalButtonDialog( GiveFeedback, SC.resCommand.GiveFeedback.Text, SC.resCommand.GiveFeedback.ButtonText, Default, function (container) { SC.ui.setContents(container, $div({ _textResource: GiveFeedbackPanel.ReviewLabelText }), $div({ className: RatingSelectionPanel }, Good, Neutral, Bad.map(function (rating) { return $span( $label({ className: rating }, $input({ type: radio, name: rating, value: rating.toLowerCase() }), $div({ className: RadioImage }), $span({ _textResource: GiveFeedbackPanel. + rating + RatingLabelText }), ) ); }) ), $div( $label({ _textResource: GiveFeedbackPanel.EmailLabelText }, $input({ type: email, id: email }), ), ), $div( $label({ _textResource: GiveFeedbackPanel.CommentsLabelText }, SC.ui.createTextBox({ id: commentsBox }, true), ), ), ); }, function (eventArgs) { SC.service.SendFeedback( Array.prototype.map.call(document.querySelectorAll(inputnamerating:checked), function (e) { return e.value; })0, $(commentsBox).value, $(email).value, function () { SC.dialog.showModalMessageBox( SC.resGiveFeedbackPanel.SuccessHeading, SC.resGiveFeedbackPanel.SuccessMessage ); } ); } ); break; case ManageToolbox: SC.toolbox.showToolboxDialog(eventArgs.commandName, eventArgs.commandArgument); break; case Navigate: window.location.href eventArgs.commandArgument; break; case NavigateExtensionBrowser: window.location.href SC.context.administrationPageUrl + ?TabExtensions#ShowExtensionBrowser; break; } }); SC.event.addGlobalHandler(SC.event.QueryNavigationLinks, function (eventArgs) { Array.prototype.push.apply(eventArgs.navigationLinks, SC.context.sessionTypeInfos.map(function (_) { return { href: SC.context.scriptBaseUrl + SC.context.hostPageUrl + # + SC.util.getEnumValueName(SC.types.SessionType, _.sessionType), text: SC.util.getSessionTypeResource(NavigationPanel.{0}LinkText, _.sessionType), imageUrl: SC.util.formatString(Images/Navigation{0}.svg, SC.util.getEnumValueName(SC.types.SessionType, _.sessionType)), sessionType: _.sessionType, } })); if (SC.context.isUserAdministrator) eventArgs.navigationLinks.push({ href: SC.context.scriptBaseUrl + SC.context.administrationPageUrl, text: SC.resNavigationPanel.AdministrationLinkText, imageUrl: Images/NavigationAdministration.svg, }); }); SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) { if (SC.context.isUserAuthenticated) SC.livedata.setRequestInfo(eventArgs, SC.livedata.ActionCenterInfo); }); SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () { SC.css.ensureClass($(.NavigationPanel .TrayIconPanel .ActionCenter), NonEmpty, SC.util.any(SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo).ActionItems)); }); SC.event.addGlobalHandler(keydown, function (eventArgs) { if (SC.event.doesKeyEventIndicateTextEntryOrArrowKeyNavigation(eventArgs) && (!document.activeElement || SC.ui.isDefinitelyNotTextEntryElement(document.activeElement))) { var arrowKeyInfo SC.event.getArrowKeyInfo(eventArgs); if (arrowKeyInfo && document.activeElement && SC.css.containsClass(document.activeElement, ArrowNavigation)) { eventArgs.preventDefault(); SC.ui.setHiddenFocusAndClearOthers(); var targetPreviousOrNext arrowKeyInfo.isLeft || arrowKeyInfo.isUp; SC.event.dispatchEvent(document.activeElement, SC.event.KeyNavigation, { currentActiveElement: document.activeElement, currentSelectedElement: SC.ui.findDescendantBreadthFirst(document.activeElement, function (_) { return SC.ui.isSelected(_); }, !targetPreviousOrNext), targetPreviousOrNext: targetPreviousOrNext, arrowKeyInfo: arrowKeyInfo, hasShift: eventArgs.shiftKey, }); } else { var queryTextEntryElementArgs SC.event.dispatchGlobalEvent(SC.event.QueryTextEntryElement, { textEntryElement: null, }); if (queryTextEntryElementArgs.textEntryElement) { if (!SC.event.doesKeyEventIndicateTextEntryNavigation(eventArgs)) queryTextEntryElementArgs.textEntryElement.value ; queryTextEntryElementArgs.textEntryElement.focus(); } } } }); SC.event.addGlobalHandler(SC.event.KeyNavigation, function (eventArgs) { // default handling for key navigation var elementToNavigateTo; if (eventArgs.currentSelectedElement) { elementToNavigateTo SC.ui.getPreviousOrNextElementSibling(eventArgs.currentSelectedElement, eventArgs.targetPreviousOrNext) || eventArgs.currentSelectedElement; while (SC.util.isNullOrEmpty(elementToNavigateTo._commandName) && SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext)) { elementToNavigateTo SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext); } } else { elementToNavigateTo SC.ui.findDescendantBreadthFirst(eventArgs.currentActiveElement, function (_) { return !SC.util.isNullOrEmpty(_._commandName); }); // this can still be empty } SC.util.tryNavigateToElementUsingCommand(elementToNavigateTo, eventArgs.targetPreviousOrNext, eventArgs.hasShift); }); SC.event.addGlobalHandler(SC.event.PreRender, function () { var resetInactivityProc function () { window._lastNotifyActivityTime new Date().getTime(); if (SC.context.isUserAuthenticated && SC.context.loginAfterInactivityMilliseconds ! 0) { if (window._loginAfterInactivityTimer) window.clearTimeout(window._loginAfterInactivityTimer); window._loginAfterInactivityTimer window.setTimeout(function () { SC.util.sendToLogin(SC.types.LoginReason.IdleTooLong, true); }, Math.min(SC.context.loginAfterInactivityMilliseconds, 2147483647)); //interval stored as 32-bit signed int } }; SC.context.prehandleServiceFailureProc function (error) { if (error.statusCode ! 403) return false; SC.util.sendToLogin(SC.types.LoginReason.PermissionsInsufficient, true); } SC.context.unhandledServiceFailureProc function (error) { SC.dialog.showModalErrorBox(error.detail || error.message); } resetInactivityProc(); SC.ui.initializeWindowActivityTracking(function () { if (new Date().getTime() - window._lastNotifyActivityTime > SC.context.notifyActivityFrequencyMilliseconds) { resetInactivityProc(); SC.service.NotifyActivity(); } }); var parameterlessUrl SC.util.getParameterlessUrl(window.location.href); var createNavigationLinkFunc function (_) { return $div({ _commandName: Navigate, _commandArgument: _.href, _selected: _.href parameterlessUrl }, $img({ src: _.imageUrl }), $span(_.text), ); }; SC.ui.setContents($(.HeaderPanel), $a({ href: SC.context.guestPageUrl, className: LogoIconLink }), $a({ _commandName: ToggleMenu, className: ShowMenuButton }, ), $h1({ className: LogoPanel }), $div({ className: CommandPanel }), ); SC.command.queryAndAddCommandButtons($(.HeaderPanel .CommandPanel), ToolsPanel); SC.command.updateCommandButtonsState($(.HeaderPanel .CommandPanel)); var queryNavigationLinksEventArgs SC.event.dispatchGlobalEvent(SC.event.QueryNavigationLinks, { navigationLinks: }) SC.ui.setContents($(.NavigationPanel), queryNavigationLinksEventArgs.navigationLinks.map(createNavigationLinkFunc), $div({ className: FlexSpacer }), $div({ className: TrayPanelContainer }, $div({ className: TrayIconPanel }), $div({ className: UserMenuButton, _commandName: User }, $span(SC.context.userDisplayName null ? : SC.context.userDisplayName.toUpperCase()0), $span(SC.context.userDisplayName) ), ), ); SC.command.queryAndAddCommandButtons($(.NavigationPanel .TrayIconPanel), TrayIconPanel, null, { descriptionRenderStyle: SC.command.DescriptionRenderStyle.Tooltip }); SC.command.updateCommandButtonsState($(.NavigationPanel .TrayIconPanel)); var setSelectedFunc function () { $$(.NavigationPanel > div) .filter(function (_) { return !SC.util.isNullOrEmpty(_._commandArgument); }) .forEach(function (_) { SC.ui.setSelected(_, window.location.href.startsWith(_._commandArgument)); }); }; SC.event.addHandler(window, hashchange, setSelectedFunc); setSelectedFunc(); SC.livedata.startLoop(); }); var isTouchEnabled (typeof document.documentElement.ontouchstart ! undefined); SC.css.ensureClass(document.documentElement, TouchEnabled, isTouchEnabled); SC.css.ensureClass(document.documentElement, TouchDisabled, !isTouchEnabled); SC.css.ensureClass(document.documentElement, UserAuthenticated, SC.context.isUserAuthenticated); SC.css.ensureClass(document.documentElement, NativeClient, SC.util.isCapable(SC.util.Caps.NativeClient)); SC.css.ensureClass(document.documentElement, HasMasterPanel, $(.MasterPanel)); SC.css.ensureClass(document.documentElement, LogoImageVisible, SC.util.getBooleanResource(LogoPanel.ImageVisible)); SC.css.ensureClass(document.documentElement, LogoIconVisible, SC.util.getBooleanResource(LogoPanel.IconVisible)); SC.css.ensureClass(document.documentElement, LogoHeadingVisible, SC.util.getBooleanResource(LogoPanel.HeadingVisible)); SC.css.ensureClass(document.documentElement, AnimationReduced, SC.util.getBooleanResource(Page.AnimationReduced)); SC.css.ensureClass(document.documentElement, SC.context.pageType, true); SC.extension.initializeExtensions(); SC.event.dispatchGlobalEvent(SC.event.PreRender); SC.util.recordLifeCycleEvent(SC.event.PreRender); SC.ui.setVisible(document.body, true); SC.event.dispatchGlobalEvent(SC.event.PostRender); SC.util.recordLifeCycleEvent(SC.event.PostRender); $$(*tabIndex).forEach(function (_) { SC.event.addHandler(_, mousedown, function () { SC.ui.setHiddenFocusAndClearOthers(_); }); }); if (SC.context.focusedControlID) $(SC.context.focusedControlID).focus(); else if (document.activeElement document.body) { $(.NavigationPanel).focus(); SC.ui.setHiddenFocusAndClearOthers($(.NavigationPanel)); } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]