Beispiel #1
0
        public static DeploymentParametersResult GetGalleryApplicationParams(int packageId, string webAppId)
        {
            DeploymentParametersResult appParamsResult = GetGalleryApplicationParamsInternally(packageId, webAppId);

            //
            if (appParamsResult.IsSuccess)
            {
                List <DeploymentParameter> appParams = new List <DeploymentParameter>();
                //
                foreach (DeploymentParameter parameter in appParamsResult.Value)
                {
                    // Exclude non-public parameters
                    if (MatchNonPublicParamByTags(parameter))
                    {
                        continue;
                    }
                    if (MatchNonPublicParamByNames(parameter))
                    {
                        continue;
                    }
                    //
                    appParams.Add(parameter);
                }
                //
                appParamsResult.Value = appParams;
            }
            //
            return(appParamsResult);
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     try
     {
         webAppResult = ES.Services.WebApplicationGallery.GetGalleryApplicationDetails(PanelSecurity.PackageId, PanelRequest.ApplicationID);
         //
         if (!webAppResult.IsSuccess)
         {
             messageBox.ShowMessage(webAppResult, "WAG_NOT_AVAILABLE", "ModuleWAG");
             return;
         }
         //
         if (!IsPostBack)
         {
             DeploymentParametersResult appParamsResult =
                 ES.Services.WebApplicationGallery.GetGalleryApplicationParams(PanelSecurity.PackageId, PanelRequest.ApplicationID);
             //
             if (!appParamsResult.IsSuccess)
             {
                 messageBox.ShowMessage(appParamsResult, "WAG_NOT_AVAILABLE", "ModuleWAG");
                 return;
             }
             //
             BindWebSites();
             BindDatabaseVersions(appParamsResult.Value);
             BindParams(appParamsResult.Value);
             ToggleControls();
         }
     }
     catch (Exception ex)
     {
         ShowErrorMessage("WEB_GALLERY_INSTALLER_INIT_FORM", ex);
     }
 }
 public DeploymentParametersResult GetGalleryApplicationParameters(string id)
 {
     try
     {
         Log.WriteStart("'{0}' GetGalleryApplicationParameters", ProviderSettings.ProviderName);
         DeploymentParametersResult result = WebProvider.GetGalleryApplicationParameters(id);
         Log.WriteEnd("'{0}' GetGalleryApplicationParameters", ProviderSettings.ProviderName);
         return(result);
     }
     catch (Exception ex)
     {
         Log.WriteError(String.Format("'{0}' GetGalleryApplicationParameters", ProviderSettings.ProviderName), ex);
         throw;
     }
 }
Beispiel #4
0
        private List <DeploymentParameter> GetApplicationParameters()
        {
            DeploymentParametersResult result =
                ES.Services.WebApplicationGallery.GetGalleryApplicationParams(PanelSecurity.PackageId, PanelRequest.ApplicationID);

            // check results
            if (!result.IsSuccess)
            {
                messageBox.ShowMessage(result, "WAG_NOT_AVAILABLE", "WebAppGallery");
                DisableForm();
                return(null);
            }

            // return params
            return(result.Value);
        }
Beispiel #5
0
        public static DeploymentParametersResult GetGalleryApplicationParamsInternally(int packageId, string webAppId)
        {
            DeploymentParametersResult result = null;

            //
            try
            {
                //
                TaskManager.StartTask(TASK_MANAGER_SOURCE, GET_APP_PARAMS_TASK);
                //
                WebServer webServer = GetAssociatedWebServer(packageId);
                //
                if (!webServer.IsMsDeployInstalled())
                {
                    return(WAG_MODULE_NOT_AVAILABLE <DeploymentParametersResult>());
                }
                //
                result = webServer.GetGalleryApplicationParameters(webAppId);
                //
                if (!result.IsSuccess)
                {
                    //
                    foreach (string errorMessage in result.ErrorCodes)
                    {
                        TaskManager.WriteError(errorMessage);
                    }
                    //
                    return(WAG_GENERIC_MODULE_ERROR <DeploymentParametersResult>());
                }
            }
            catch (Exception ex)
            {
                TaskManager.WriteError(ex);
                //
                return(WAG_GENERIC_MODULE_ERROR <DeploymentParametersResult>());
            }
            finally
            {
                TaskManager.CompleteTask();
            }
            //
            return(result);
        }
        public static DeploymentParametersResult GetGalleryApplicationParams(int packageId, string webAppId)
        {
            DeploymentParametersResult result = null;

            //
            try
            {
                TaskManager.StartTask(TASK_MANAGER_SOURCE, GET_APP_PARAMS_TASK);

                // check if WAG is installed
                WebServer webServer = GetAssociatedWebServer(packageId);
                if (!webServer.IsMsDeployInstalled())
                {
                    return(Error <DeploymentParametersResult>(GalleryErrors.MsDeployIsNotInstalled));
                }

                // get parameters
                result = webServer.GetGalleryApplicationParameters(webAppId);

                if (!result.IsSuccess)
                {
                    return(Error <DeploymentParametersResult>(result, GalleryErrors.GetApplicationParametersError));
                }
            }
            catch (Exception ex)
            {
                TaskManager.WriteError(ex);
                return(Error <DeploymentParametersResult>(GalleryErrors.GeneralError, ex.Message));
            }
            finally
            {
                TaskManager.CompleteTask();
            }

            return(result);
        }
Beispiel #7
0
		public DeploymentParametersResult GetGalleryApplicationParameters(string id)
		{
			DeploymentParametersResult result = new DeploymentParametersResult();

			try
			{
				WebApplicationGallery module = new WebApplicationGallery(GalleryXmlFeedUrl);
				//
				result.Value = module.GetApplicationParameters(id);
				result.IsSuccess = true;
			}
			catch (Exception ex)
			{
				result.IsSuccess = false;
				result.AddError(GalleryErrors.ProcessingPackageError, ex);
			}
			//
			return result;
		}
Beispiel #8
0
        public static StringResultObject Install(int packageId, string webAppId, string siteName, string virtualDir, List <DeploymentParameter> updatedParameters)
        {
            StringResultObject result = new StringResultObject();
            //
            int                 dbItemResult = -1, dbUserResult = -1;
            WebSite             webSite       = default(WebSite);
            WebVirtualDirectory webVirtualDir = default(WebVirtualDirectory);
            WebVirtualDirectory iisAppNode    = default(WebVirtualDirectory);

            //
            try
            {
                SecurityContext.SetThreadSupervisorPrincipal();
                //
                TaskManager.StartTask(TASK_MANAGER_SOURCE, "INSTALL_WEB_APP");
                //
                TaskManager.WriteParameter("Package ID", packageId);
                TaskManager.WriteParameter("Site Name", siteName);

                //
                WebServer webServer = GetAssociatedWebServer(packageId);

                // ERROR: WAG is not available
                if (!webServer.IsMsDeployInstalled())
                {
                    return(WAG_MODULE_NOT_AVAILABLE <StringResultObject>());
                }

                //
                GalleryApplicationResult appResult = webServer.GetGalleryApplication(webAppId);

                #region Preparations and tracing
                // Trace at least Web Application Id for troubleshooting purposes
                if (!appResult.IsSuccess || appResult.Value == null)
                {
                    TaskManager.WriteError("Could not find an application to install with ID: {0}.", webAppId);
                    //
                    return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                }
                // Assign web app pack title to the currently running task
                TaskManager.ItemName = appResult.Value.Title;
                // Trace additional details from the feed
                TraceGalleryAppPackInfo(appResult.Value);

                // Trace out all deployment parameters
                Array.ForEach <DeploymentParameter>(updatedParameters.ToArray(), p => TaskManager.WriteParameter(p.Name, p.Value));
                // Check account
                int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
                if (accountCheck < 0)
                {
                    TaskManager.WriteError("Account check has been failed. Status: {0};", accountCheck.ToString());
                    //
                    return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                }
                // Check package
                int packageCheck = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive);
                if (packageCheck < 0)
                {
                    TaskManager.WriteError("Package check has been failed. Status: {0};", packageCheck.ToString());
                    //
                    return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                }
                // Check web site for existence
                webSite = WebServerController.GetWebSite(packageId, siteName);
                if (webSite == null)
                {
                    TaskManager.WriteError("Web site check has been failed. Status: {0};", BusinessErrorCodes.ERROR_WEB_INSTALLER_WEBSITE_NOT_EXISTS.ToString());
                    //
                    return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                }
                #endregion

                DeploymentParametersResult appParamsResult = GetGalleryApplicationParamsInternally(packageId, webAppId);

                //
                if (!appParamsResult.IsSuccess)
                {
                    foreach (string errorMessage in appParamsResult.ErrorCodes)
                    {
                        TaskManager.WriteError(errorMessage);
                    }
                    //
                    return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                }

                List <DeploymentParameter> origParams = appParamsResult.Value;
                //
                if (Array.Exists <DeploymentParameter>(origParams.ToArray(),
                                                       p => MatchParameterTag(p, DeploymentParameter.SQL_PARAM_TAG) ||
                                                       MatchParameterTag(p, DeploymentParameter.MYSQL_PARAM_TAG)))
                {
                    // Match input parameters from the client
                    DeploymentParameter dbNameParam = Array.Find <DeploymentParameter>(updatedParameters.ToArray(),
                                                                                       p => MatchParameterByNames(p, DeploymentParameter.DATABASE_NAME_PARAMS) ||
                                                                                       MatchParameterTag(p, DeploymentParameter.DB_NAME_PARAM_TAG));
                    //
                    DeploymentParameter dbUserParam = Array.Find <DeploymentParameter>(updatedParameters.ToArray(),
                                                                                       p => MatchParameterByNames(p, DeploymentParameter.DATABASE_USERNAME_PARAMS) ||
                                                                                       MatchParameterTag(p, DeploymentParameter.DB_USERNAME_PARAM_TAG));
                    //
                    DeploymentParameter dbUserPwParam = Array.Find <DeploymentParameter>(updatedParameters.ToArray(),
                                                                                         p => MatchParameterByNames(p, DeploymentParameter.DATABASE_USERPWD_PARAMS) ||
                                                                                         MatchParameterTag(p, DeploymentParameter.DB_PASSWORD_PARAM_TAG));

                    #region Pre-conditions verification...
                    //
                    if (dbNameParam == null)
                    {
                        //
                        TaskManager.WriteError(PARAMETER_IS_NULL_OR_EMPTY, DeploymentParameter.DATABASE_NAME_PARAM);
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    //
                    if (String.IsNullOrEmpty(dbNameParam.Tags))
                    {
                        //
                        TaskManager.WriteError("{0} parameter tags does not contain information about the database resource group should be used", DeploymentParameter.DATABASE_NAME_PARAM);
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    //
                    int dbServiceId = PackageController.GetPackageServiceId(packageId, dbNameParam.Tags);
                    //
                    if (dbServiceId <= 0)
                    {
                        //
                        TaskManager.WriteError("{0} parameter tags contains wrong information about the database resource group should be used. Resource group: " + dbNameParam.Tags, DeploymentParameter.DATABASE_NAME_PARAM);
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    #endregion
                    //
                    DeploymentParameter dbServerParam = Array.Find <DeploymentParameter>(origParams.ToArray(),
                                                                                         p => MatchParameterByNames(p, DeploymentParameter.DB_SERVER_PARAMS) ||
                                                                                         MatchParameterTag(p, DeploymentParameter.DB_SERVER_PARAM_TAG));
                    //
                    DeploymentParameter dbAdminParam = Array.Find <DeploymentParameter>(origParams.ToArray(),
                                                                                        p => MatchParameterByNames(p, DeploymentParameter.DB_ADMIN_PARAMS) ||
                                                                                        MatchParameterTag(p, DeploymentParameter.DB_ADMIN_USERNAME_PARAM_TAG));
                    //
                    DeploymentParameter dbAdminPwParam = Array.Find <DeploymentParameter>(origParams.ToArray(),
                                                                                          p => MatchParameterByNames(p, DeploymentParameter.DB_ADMINPWD_PARAMS) ||
                                                                                          MatchParameterTag(p, DeploymentParameter.DB_ADMIN_PASSWORD_PARAM_TAG));

                    #region Pre-conditions verification...
                    //
                    if (dbAdminParam == null)
                    {
                        //
                        TaskManager.WriteError(NO_DB_PARAMETER_MATCHES_MSG, NAMES_MATCH,
                                               String.Join(", ", DeploymentParameter.DB_ADMIN_PARAMS));
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    //
                    if (dbServerParam == null)
                    {
                        //
                        TaskManager.WriteError(NO_DB_PARAMETER_MATCHES_MSG, NAMES_MATCH,
                                               String.Join(", ", DeploymentParameter.DB_SERVER_PARAMS));
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    //
                    if (dbAdminPwParam == null)
                    {
                        //
                        TaskManager.WriteError(NO_DB_PARAMETER_MATCHES_MSG, NAMES_MATCH,
                                               String.Join(", ", DeploymentParameter.DB_ADMINPWD_PARAMS));
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    #endregion

                    #region Read & substitute database server settings
                    //
                    StringDictionary dbSettings = ServerController.GetServiceSettingsAdmin(dbServiceId);

                    // InternalAddress setting is common for all DB service providers
                    dbServerParam.Value = dbSettings["InternalAddress"];
                    // Set database administrator login
                    if (!String.IsNullOrEmpty(dbSettings["RootLogin"]))
                    {
                        dbAdminParam.Value = dbSettings["RootLogin"];
                    }
                    else if (!String.IsNullOrEmpty(dbSettings["SaLogin"]))
                    {
                        dbAdminParam.Value = dbSettings["SaLogin"];
                    }
                    else
                    {
                        //
                        TaskManager.WriteError(CANNOT_SET_PARAMETER_VALUE, dbAdminParam.Name);
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    // Set database administrator password
                    if (!String.IsNullOrEmpty(dbSettings["RootPassword"]))
                    {
                        dbAdminPwParam.Value = dbSettings["RootPassword"];
                    }
                    else if (!String.IsNullOrEmpty(dbSettings["SaPassword"]))
                    {
                        dbAdminPwParam.Value = dbSettings["SaPassword"];
                    }
                    else
                    {
                        //
                        TaskManager.WriteError(CANNOT_SET_PARAMETER_VALUE, dbAdminPwParam.Name);
                        //
                        return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                    }
                    #endregion

                    //
                    updatedParameters.AddRange(new List <DeploymentParameter> {
                        dbServerParam, dbAdminParam, dbAdminPwParam
                    });

                    #region Create database and db user account if new selected
                    //
                    SqlDatabase db = PackageController.GetPackageItemByName(packageId, dbNameParam.Value,
                                                                            typeof(SqlDatabase)) as SqlDatabase;
                    //
                    if (db == null)
                    {
                        db           = new SqlDatabase();
                        db.PackageId = packageId;
                        db.Name      = dbNameParam.Value;
                        //
                        dbItemResult = DatabaseServerController.AddSqlDatabase(db, dbNameParam.Tags);
                        //
                        if (dbItemResult < 0)
                        {
                            // Put specific error message into the trace log
                            TaskManager.WriteError("Could not create {0} database. Error code: {1}.", dbNameParam.Tags, dbItemResult.ToString());
                            // Return generic error
                            return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                        }
                    }

                    //
                    SqlUser user = PackageController.GetPackageItemByName(packageId, dbUserParam.Value,
                                                                          typeof(SqlUser)) as SqlUser;
                    //
                    if (user == null)
                    {
                        user           = new SqlUser();
                        user.PackageId = packageId;
                        user.Name      = dbUserParam.Value;
                        user.Databases = new string[] { dbNameParam.Value };
                        user.Password  = dbUserPwParam.Value;
                        //
                        dbUserResult = DatabaseServerController.AddSqlUser(user, dbNameParam.Tags);
                        //
                        if (dbUserResult < 0)
                        {
                            // Rollback and remove db if created
                            if (dbItemResult > 0)
                            {
                                DatabaseServerController.DeleteSqlDatabase(dbItemResult);
                            }
                            // Put specific error message into the trace log
                            TaskManager.WriteError("Could not create {0} user account. Error code: {1}.", dbNameParam.Tags, dbUserResult.ToString());
                            // Return generic error
                            return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
                        }
                    }
                    #endregion
                }

                //
                DeploymentParameter appPathParam = Array.Find <DeploymentParameter>(origParams.ToArray(),
                                                                                    p => MatchParameterName(p, DeploymentParameter.APPICATION_PATH_PARAM) ||
                                                                                    MatchParameterTag(p, DeploymentParameter.IISAPP_PARAM_TAG));
                //
                if (String.IsNullOrEmpty(virtualDir))
                {
                    appPathParam.Value = siteName;
                }
                else
                {
                    appPathParam.Value = String.Format("{0}/{1}", siteName, virtualDir);
                }
                //
                updatedParameters.Add(appPathParam);

                //
                result = webServer.InstallGalleryApplication(webAppId, updatedParameters.ToArray());
                //
                #region Rollback in case of failure
                // Rollback - remove resources have been created previously
                if (!result.IsSuccess)
                {
                    //
                    if (dbUserResult > 0)
                    {
                        DatabaseServerController.DeleteSqlUser(dbUserResult);
                    }
                    //
                    if (dbItemResult > 0)
                    {
                        DatabaseServerController.DeleteSqlDatabase(dbItemResult);
                    }
                    //
                    foreach (string errorCode in result.ErrorCodes)
                    {
                        TaskManager.WriteError(errorCode);
                    }
                    //
                    return(result);
                }
                #endregion

                // Reload web site details
                webSite = WebServerController.GetWebSite(packageId, siteName);
                // Reload virtual directory defaults
                if (!String.IsNullOrEmpty(virtualDir))
                {
                    webVirtualDir = WebServerController.GetVirtualDirectory(webSite.Id, virtualDir);
                }

                // We are going to install application on website or virtual directory
                iisAppNode = (webVirtualDir != null) ? webVirtualDir : webSite;
                // Put correct ASP.NET version depending on a web server's version
                iisAppNode.AspNetInstalled = (iisAppNode.IIs7) ? "2I" : "2";

                //
                if (MatchParticularAppDependency(appResult.Value.Dependency, SupportedAppDependencies.PHP_SCRIPTING))
                {
                    // Enable PHP 5 extensions for web site
                    iisAppNode.PhpInstalled = "5";
                    // Set the correct default document for PHP apps
                    if (iisAppNode.DefaultDocs.IndexOf("index.php", StringComparison.InvariantCultureIgnoreCase) == -1)
                    {
                        iisAppNode.DefaultDocs += ",index.php";
                    }
                    //
                    int docsResult = 0;
                    //
                    if (webVirtualDir == null)
                    {
                        docsResult = WebServerController.UpdateWebSite(webSite);
                    }
                    else
                    {
                        docsResult = WebServerController.UpdateVirtualDirectory(webSite.Id, webVirtualDir);
                    }
                    //
                    if (docsResult < 0)
                    {
                        TaskManager.WriteWarning("Could not update website/virtual directory default documents with the value of index.php. Result code: {0}", docsResult.ToString());
                    }
                }
                //
                if (MatchParticularAppDependency(appResult.Value.Dependency, SupportedAppDependencies.ASPNET_SCRIPTING))
                {
                    // Set the correct default document for ASP.NET apps
                    if (iisAppNode.DefaultDocs.IndexOf("Default.aspx", StringComparison.InvariantCultureIgnoreCase) == -1)
                    {
                        iisAppNode.DefaultDocs += ",Default.aspx";
                    }
                    //
                    int aspnetResult = 0;
                    //
                    if (webVirtualDir == null)
                    {
                        aspnetResult = WebServerController.UpdateWebSite(webSite);
                    }
                    else
                    {
                        aspnetResult = WebServerController.UpdateVirtualDirectory(webSite.Id, webVirtualDir);
                    }
                    //
                    if (aspnetResult < 0)
                    {
                        TaskManager.WriteWarning("Could not set default documents/enable ASP.NET 2.0 (Integrated Mode) for website/virtual directory. Result code: {0}", aspnetResult.ToString());
                    }
                }

                //
                return(result);
            }
            catch (Exception ex)
            {
                //
                TaskManager.WriteError(ex);
                //
                return(WAG_INSTALL_GENERIC_MODULE_ERROR <StringResultObject>());
            }
            finally
            {
                TaskManager.CompleteTask();
            }
        }