public ActionResult Index()
        {
            ConnectionSettingsModel     connectionSettings   = null;
            InstallationComponentsModel installedComponents  = null;
            InstallationComponentsModel selectedComponents   = null;
            InstallationProgressModel   installationProgress = null;

            if (!string.IsNullOrEmpty(UserId))
            {
                connectionSettings = CacheHelper.GetConnectionSettings(UserId);

                if (connectionSettings != null)
                {
                    installedComponents  = CacheHelper.GetInstalledComponents(UserId);
                    selectedComponents   = CacheHelper.GetSelectedComponents(UserId);
                    installationProgress = CacheHelper.GetInstallationProgress(UserId);
                }
                else
                {
                    CookieHelper.ClearCookie();
                    CacheHelper.ClearCache(UserId);
                }
            }

            ViewBag.ConnectionSettings   = GetJsonString(connectionSettings);
            ViewBag.InstalledComponents  = GetJsonString(installedComponents);
            ViewBag.SelectedComponents   = GetJsonString(selectedComponents);
            ViewBag.InstallationProgress = GetJsonString(installationProgress);

            return(View());
        }
        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
                }));
            }
        }
 public InstallationManager(string userId, ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents = null)
 {
     UserId                 = userId;
     ConnectionInfo         = GetConnectionInfo(connectionSettings);
     InstallationProgress   = CacheHelper.GetInstallationProgress(userId) ?? new InstallationProgressModel();
     InstallationComponents = installationComponents;
 }
Example #5
0
 public InstallationManager(string userId, ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents = null)
 {
     UserId                 = userId;
     LicenseKey             = connectionSettings.LicenseKey;
     Enterprise             = connectionSettings.Enterprise;
     ConnectionInfo         = GetConnectionInfo(connectionSettings);
     InstallationProgress   = CacheHelper.GetInstallationProgress(userId) ?? new InstallationProgressModel();
     InstallationComponents = installationComponents;
     InstalledComponents    = CacheHelper.GetInstalledComponents(userId) ?? new InstallationComponentsModel();
 }
Example #6
0
        public static void SetSelectedComponents(string userId, InstallationComponentsModel value)
        {
            if (string.IsNullOrEmpty(userId))
            {
                return;
            }

            var key = "selectedComponents" + userId;

            CacheSet(key, value, TimeSpan.FromDays(1));
        }
Example #7
0
        public static InstallationComponentsModel InitializeAvailableTags(bool enterprise)
        {
            var available = new InstallationComponentsModel
            {
                CommunityServerVersion = GetLatestTagName(GetImageTags(enterprise ? Settings.DockerEnterpriseCommunityImageName : Settings.DockerCommunityImageName)),
                DocumentServerVersion  = GetLatestTagName(GetImageTags(enterprise ? Settings.DockerEnterpriseDocumentImageName : Settings.DockerDocumentImageName)),
                MailServerVersion      = GetLatestTagName(GetImageTags(enterprise ? Settings.DockerEnterpriseMailImageName : Settings.DockerMailImageName)),
                ControlPanelVersion    = GetLatestTagName(GetImageTags(enterprise ? Settings.DockerEnterpriseControlPanelImageName : Settings.DockerControlPanelImageName)),
            };

            CacheHelper.SetAvailableComponents(enterprise, available);

            return(available);
        }
        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)
                }));
            }
        }
Example #9
0
        public ActionResult Index(string id)
        {
            var enterprise = !string.IsNullOrEmpty(id) && id.ToLowerInvariant() == "enterprise";

            ConnectionSettingsModel     connectionSettings   = null;
            InstallationComponentsModel availableComponents  = CacheHelper.GetAvailableComponents(enterprise);
            InstallationComponentsModel installedComponents  = null;
            InstallationComponentsModel selectedComponents   = null;
            InstallationProgressModel   installationProgress = null;
            OsInfo osInfo = null;

            if (!string.IsNullOrEmpty(UserId))
            {
                connectionSettings = CacheHelper.GetConnectionSettings(UserId);

                if (connectionSettings != null)
                {
                    installedComponents  = CacheHelper.GetInstalledComponents(UserId);
                    selectedComponents   = CacheHelper.GetSelectedComponents(UserId);
                    installationProgress = CacheHelper.GetInstallationProgress(UserId);
                    osInfo = CacheHelper.GetOsInfo(UserId);
                }
                else
                {
                    CookieHelper.ClearCookie();
                    CacheHelper.ClearUserCache(UserId);
                }
            }

            ViewBag.ConnectionSettings   = GetJsonString(connectionSettings);
            ViewBag.AvailableComponents  = GetJsonString(availableComponents);
            ViewBag.InstalledComponents  = GetJsonString(installedComponents);
            ViewBag.SelectedComponents   = GetJsonString(selectedComponents);
            ViewBag.InstallationProgress = GetJsonString(installationProgress);
            ViewBag.OsInfo     = GetJsonString(osInfo);
            ViewBag.Enterprise = enterprise;

            if (!string.IsNullOrEmpty(Settings.CacheKey) && Request.Params["cache"] == Settings.CacheKey)
            {
                CacheHelper.ClearCache();
            }

            return(View());
        }
Example #10
0
        private void CheckPreviousVersion(FileMap script, bool useSudo)
        {
            var output = RunScript(null,
                                   script,
                                   useSudo,
                                   "-cc " + Settings.DockerCommunityContainerName,
                                   "-dc " + Settings.DockerDocumentContainerName,
                                   "-mc " + Settings.DockerMailContainerName,
                                   "-cpc " + Settings.DockerControlPanelContainerName);

            InstallationComponents = new InstallationComponentsModel
            {
                MailServerVersion      = GetTerminalParam(output, "MAIL_SERVER_VERSION"),
                DocumentServerVersion  = GetTerminalParam(output, "DOCUMENT_SERVER_VERSION"),
                CommunityServerVersion = GetTerminalParam(output, "COMMUNITY_SERVER_VERSION"),
                ControlPanelVersion    = GetTerminalParam(output, "CONTROL_PANEL_VERSION"),
                LicenseFileExist       = bool.Parse(GetTerminalParam(output, "LICENSE_FILE_EXIST"))
            };

            CacheHelper.SetInstalledComponents(UserId, InstallationComponents.IsEmpty ? null : InstallationComponents);
        }
Example #11
0
 public static void SetAvailableComponents(bool enterprise, InstallationComponentsModel value)
 {
     CacheSet(enterprise ? "availableEnterpriseComponents" : "availableComponents", value, TimeSpan.FromDays(1));
 }
Example #12
0
        public JsonResult StartInstall(InstallationComponentsModel installationComponents)
        {
            try
            {
                var connectionSettings  = CacheHelper.GetConnectionSettings(UserId);
                var installedComponents = CacheHelper.GetInstalledComponents(UserId);

                if (connectionSettings.Enterprise && connectionSettings.LicenseKey == Settings.TrialFileName && !string.IsNullOrEmpty(Settings.LicenseUrl))
                {
                    if (installedComponents != null && installedComponents.LicenseFileExist)
                    {
                        throw new Exception(OneClickCommonResource.ErrorLicenseFileExist);
                    }

                    connectionSettings = RequestLicenseFile(connectionSettings, CacheHelper.GetRequestInfo(UserId));
                }

                var mailServerAlreadyInstalled = installedComponents != null &&
                                                 !string.IsNullOrEmpty(installedComponents.MailServerVersion);

                if (!mailServerAlreadyInstalled && !string.IsNullOrEmpty(installationComponents.MailServerVersion) &&
                    !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);

                var code = 0;

                if (ex is ExternalException)
                {
                    Int32.TryParse(Regex.Match(ex.Message, @"[\d+]").Value, out code);
                }

                return(Json(new
                {
                    success = false,
                    message = ex.Message,
                    errorCode = code > 0 ? "External" + code : "unknown"
                }));
            }
        }
Example #13
0
        public JsonResult Connect(ConnectionSettingsModel connectionSettings, RequestInfoModel requestInfo)
        {
            try
            {
                InstallationComponentsModel installedComponents  = null;
                InstallationComponentsModel selectedComponents   = null;
                InstallationProgressModel   installationProgress = null;
                OsInfo osInfo = null;

                if (connectionSettings != null)
                {
                    if (connectionSettings.Enterprise)
                    {
                        if (string.IsNullOrEmpty(connectionSettings.LicenseKey))
                        {
                            throw new ArgumentException("connectionSettings.licenseKey");
                        }

                        if (connectionSettings.LicenseKey == Settings.TrialFileName && requestInfo == null)
                        {
                            throw new ArgumentNullException("requestInfo");
                        }
                    }

                    var data = SshHelper.Connect(UserId, connectionSettings);

                    osInfo = data.Item1;
                    installedComponents  = data.Item2;
                    installationProgress = CacheHelper.GetInstallationProgress(UserId);
                    selectedComponents   = CacheHelper.GetSelectedComponents(UserId);

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

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

                return(Json(new
                {
                    success = false,
                    message = ex.Message,
                    errorCode = GetErrorCode(ex.Message)
                }));
            }
        }
Example #14
0
        public static void StartInstallation(string userId, ConnectionSettingsModel connectionSettings, InstallationComponentsModel installationComponents)
        {
            ThreadPool.QueueUserWorkItem(delegate(object state)
            {
                var workerState = state as WorkerState;

                if (workerState == null)
                {
                    return;
                }

                HttpContext.Current = workerState.Context;

                using (var installationManager = new InstallationManager(workerState.UserId, workerState.ConnectionSettings, workerState.InstallationComponents))
                {
                    installationManager.StartInstallation();
                }
            }, new WorkerState
            {
                Context                = HttpContext.Current,
                ConnectionSettings     = connectionSettings,
                InstallationComponents = installationComponents,
                UserId = userId
            });
        }