public InstallationManager(string userId, ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents = null)
 {
     UserId = userId;
     ConnectionInfo = GetConnectionInfo(connectionSettings);
     InstallationProgress = CacheHelper.GetInstallationProgress(userId) ?? new InstallationProgressModel();
     InstallationComponents = installationComponents;
 }
        private void CheckPreviousVersion(FileMap script)
        {
            using (var stream = SshClient.CreateShellStream("terminal", 150, 24, 800, 600, 1024))
            {
                stream.WriteLine(string.Format("bash {0}", script.RemotePath));

                var output = stream.Expect(Settings.InstallationStopPattern);

                if (output.Contains(Settings.InstallationSuccessPattern))
                {
                    InstallationComponents = new InstallationComponentsModel
                    {
                        MailServer = !string.IsNullOrEmpty(GetTerminalParam(output, "MAIL_SERVER_ID")),
                        DocumentServer = !string.IsNullOrEmpty(GetTerminalParam(output, "DOCUMENT_SERVER_ID")),
                        CommunityServer = !string.IsNullOrEmpty(GetTerminalParam(output, "COMMUNITY_SERVER_ID"))
                    };

                    InstallationProgress.ProgressText += output;
                }

                if (output.Contains(Settings.InstallationErrorPattern))
                    throw new Exception(output);
            }

            CacheHelper.SetInstalledComponents(UserId, InstallationComponents.IsEmpty ? null : InstallationComponents);
        }
        public JsonResult StartInstall(ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents)
        {
            try
            {
                var installedComponents = CacheHelper.GetInstalledComponents(UserId);

                if (installedComponents != null)
                    return Json(new
                        {
                            success = false,
                            message = OneClickHomePageResource.ExistVersionErrorText
                        });

                if (!installationComponents.CommunityServer || !installationComponents.DocumentServer)
                    return Json(new
                        {
                            success = false,
                            message = OneClickCommonResource.ErrorRequiredComponents
                        });

                if (installationComponents.MailServer && !ValidateDomainName(installationComponents.MailDomain))
                    return Json(new
                        {
                            success = false,
                            message = OneClickJsResource.ErrorInvalidDomainName
                        });

                CacheHelper.SetSelectedComponents(UserId, installationComponents);
                CacheHelper.SetInstallationProgress(UserId, new InstallationProgressModel());

                SshHelper.StartInstallation(UserId, connectionSettings, installationComponents);

                return Json(new
                    {
                        success = true,
                        message = string.Empty,
                        selectedComponents = GetJsonString(CacheHelper.GetSelectedComponents(UserId)),
                        installationProgress = GetJsonString(CacheHelper.GetInstallationProgress(UserId))
                    });
            }
            catch (Exception ex)
            {
                LogManager.GetLogger("ASC").Error(ex.Message, ex);

                CacheHelper.SetSelectedComponents(UserId, null);
                CacheHelper.SetInstallationProgress(UserId, null);

                return Json(new
                    {
                        success = false,
                        message = ex.Message
                    });
            }
        }