Example #1
0
        public void DoWork(InstallModel model)
        {
            var traceListener = new SignalRTraceListener();
            Trace.Listeners.Add(traceListener);

            try
            {
                SetupDb(ConnectionHelper.SqlConnectionString, model.SetupSampleData);
                SendFriendlyMessage("Database successfully created.");
                UpdateIndex(model);
            }
            catch (Exception ex)
            {
                TraceMessageLine(ex.Message);
                Clients.All.failure(ex.Message);
                return;
            }
            finally
            {
                Trace.Listeners.Remove(traceListener);
            }

            Clients.All.success("Database created.");

        }
Example #2
0
        public ActionResult Index()
        {
            if (AppConfigConfiguration.Instance.Setup.IsCompleted)
            {
                return Success();
            }
            var model = new InstallModel();
            var csBuilder = new SqlConnectionStringBuilder(ConnectionHelper.SqlConnectionString);
            model.DataSource = csBuilder.DataSource;
            model.InitialCatalog = csBuilder.InitialCatalog;
            model.DbUserName = csBuilder.UserID;
            model.DbUserPassword = csBuilder.Password;
            model.SetupSampleData = true;

            return View(model);
        }
Example #3
0
        public JsonResult Index(InstallModel model)
        {
            CustomValidateModel(model);

            if (!ModelState.IsValid)
            {
                var errorModel =
                       from x in ModelState.Keys
                       where ModelState[x].Errors.Count > 0
                       select new
                       {
                           key = x,
                           errors = ModelState[x].Errors.
                                                  Select(y => y.ErrorMessage).
                                                  ToArray()
                       };

                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return Json(errorModel);
            }

            var traceListener = new SignalRTraceListener();
            Trace.Listeners.Add(traceListener);

            try
            {
                var connectionString = PrepareDb(model);
                SetupWorker.SendFriendlyMessage("Saving database connection string to web.config.");
                //After saving connection string signalR needs some time to recycle iis
                ConnectionHelper.SqlConnectionString = connectionString;

            }
            catch (Exception ex)
            {
                SetupWorker.TraceMessageLine(ex.Message);
                return Json(new { Success = false, ex.Message });
            }
            finally
            {
                Trace.Listeners.Remove(traceListener);
            }

            return Json(new { Success = true });

        }
Example #4
0
        private void UpdateIndex(InstallModel model)
        {
            var searchConnection = new SearchConnection(ConnectionHelper.GetConnectionString("SearchConnectionString"));
            if (searchConnection.Provider.Equals(
                    SearchProviders.Lucene.ToString(), StringComparison.OrdinalIgnoreCase) && searchConnection.DataSource.StartsWith("~/"))
            {
                var dataSource = searchConnection.DataSource.Replace(
                    "~/", HttpRuntime.AppDomainAppPath + "\\");

                searchConnection = new SearchConnection(dataSource, searchConnection.Scope, searchConnection.Provider);
            }

            SendFriendlyMessage("Updating search index...");
            new UpdateSearchIndex().Index(searchConnection, model.ConnectionStringBuilder.ConnectionString, null, true);
        }
Example #5
0
        private string PrepareDb(InstallModel model)
        {
            var csBuilder = model.ConnectionStringBuilder;
            SetupWorker.SendFriendlyMessage("Checking connection availability. Connection string: {0}", csBuilder.ConnectionString);

            var success = CheckDb(csBuilder.ConnectionString);

            if (success)
            {
                return csBuilder.ConnectionString;
            }

            if (!string.IsNullOrEmpty(model.DbAdminUser))
            {
                SetupWorker.SendFriendlyMessage("Trying to connect with administrator user {0}.", model.DbAdminUser);
                // let's try with admin user
                csBuilder.UserID = model.DbAdminUser;
                csBuilder.Password = model.DbAdminPassword;
                success = CheckDb(csBuilder.ConnectionString);

            }

            if (!success)
            {
                SetupWorker.SendFriendlyMessage("Trying to connect with integrated user.");
                // let's try with integrated user
                csBuilder.IntegratedSecurity = true;
                success = CheckDb(csBuilder.ConnectionString);
            }
            if (success)
            {
                AddUserToDatabase(csBuilder.ConnectionString, model.DbUserName, model.DbUserPassword);
            }
            else
            {
                model.DbAdminUser = "******";
                model.DbAdminRequired = true;
                CustomValidateModel(model);
                throw new Exception(Resource.DbServerAdminRequiredException);
            }


            if (csBuilder.InitialCatalog.ToLower() == "master")
            {
                throw new Exception("'Master' is reserved for system database, please provide other database name.");
            }

            return csBuilder.ConnectionString;
        }
Example #6
0
 private void CustomValidateModel(InstallModel model)
 {
     if (model.DbAdminRequired)
     {
         if (string.IsNullOrWhiteSpace(model.DbAdminPassword))
         {
             ModelState.AddModelError("DbAdminPassword", Resource.DbAdminPasswordRequiredError);
         }
         if (string.IsNullOrWhiteSpace(model.DbAdminUser))
         {
             ModelState.AddModelError("DbAdminUser", Resource.DbAdminUserRequiredError);
         }
     }
 }