public InstallationManager(string userId, ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents = null)
 {
     UserId = userId;
     ConnectionInfo = GetConnectionInfo(connectionSettings);
     InstallationProgress = CacheHelper.GetInstallationProgress(userId) ?? new InstallationProgressModel();
     InstallationComponents = installationComponents;
 }
        public JsonResult Connect(ConnectionSettingsModel connectionSettings)
        {
            try
            {
                InstallationComponentsModel installedComponents = null;
                InstallationComponentsModel selectedComponents = null;
                InstallationProgressModel installationProgress = null;

                if (connectionSettings != null)
                {
                    installedComponents = SshHelper.Connect(UserId, connectionSettings);
                    installationProgress = CacheHelper.GetInstallationProgress(UserId);
                    selectedComponents = CacheHelper.GetSelectedComponents(UserId);

                    CacheHelper.SetConnectionSettings(UserId, connectionSettings);
                    CacheHelper.SetInstalledComponents(UserId, installedComponents);
                }
                else
                {
                    CookieHelper.ClearCookie();
                    CacheHelper.ClearCache(UserId);
                }

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

                return Json(new
                    {
                        success = false,
                        message = ex.Message,
                        errorCode = GetErrorCode(ex.Message)
                    });
            }
        }
        private static ConnectionInfo GetConnectionInfo(ConnectionSettingsModel connectionSettings)
        {
            var authenticationMethods = new List<AuthenticationMethod>();

            if (!string.IsNullOrEmpty(connectionSettings.Password))
            {
                authenticationMethods.Add(new PasswordAuthenticationMethod(connectionSettings.UserName, connectionSettings.Password));
            }

            if (!string.IsNullOrEmpty(connectionSettings.SshKey))
            {
                var keyFiles = new[] { new PrivateKeyFile(FileHelper.GetFile(connectionSettings.SshKey)) };
                authenticationMethods.Add(new PrivateKeyAuthenticationMethod(connectionSettings.UserName, keyFiles));
            }

            return new ConnectionInfo(connectionSettings.Host, connectionSettings.UserName, authenticationMethods.ToArray());
        }
        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
                    });
            }
        }