From c37e857e4a3a45c6f807dc4f05d76871d850dd3b Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Wed, 10 Feb 2010 11:30:44 -0800 Subject: [PATCH] Wrapping user and content creation during setup in try/catch to cancel the transaction if something esplodes --HG-- branch : dev --- .../Controllers/SetupController.cs | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs index c3d2aa30f..621cba3d0 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs @@ -4,6 +4,7 @@ using Orchard.Comments.Models; using Orchard.ContentManagement; using Orchard.Core.Common.Models; using Orchard.Core.Settings.Models; +using Orchard.Data; using Orchard.Data.Migrations; using Orchard.Environment; using Orchard.Environment.Configuration; @@ -61,31 +62,40 @@ namespace Orchard.Setup.Controllers { // in theory this environment can be used to resolve any normal components by interface, and those // components will exist entirely in isolation - no crossover between the safemode container currently in effect using (var finiteEnvironment = _orchardHost.CreateStandaloneEnvironment(shellSettings)) { - var contentManager = finiteEnvironment.Resolve(); + try { + var contentManager = finiteEnvironment.Resolve(); - // create superuser - var membershipService = finiteEnvironment.Resolve(); - var user = membershipService.CreateUser(new CreateUserParams(model.AdminUsername, model.AdminPassword, String.Empty, String.Empty, String.Empty, true)); + // create superuser + var membershipService = finiteEnvironment.Resolve(); + var user = + membershipService.CreateUser(new CreateUserParams(model.AdminUsername, model.AdminPassword, + String.Empty, String.Empty, String.Empty, + true)); - // set site name and settings - var siteService = finiteEnvironment.Resolve(); - var siteSettings = siteService.GetSiteSettings().As(); - siteSettings.Record.SiteSalt = Guid.NewGuid().ToString("N"); - siteSettings.Record.SiteName = model.SiteName; - siteSettings.Record.SuperUser = model.AdminUsername; - siteSettings.Record.PageTitleSeparator = " - "; + // set site name and settings + var siteService = finiteEnvironment.Resolve(); + var siteSettings = siteService.GetSiteSettings().As(); + siteSettings.Record.SiteSalt = Guid.NewGuid().ToString("N"); + siteSettings.Record.SiteName = model.SiteName; + siteSettings.Record.SuperUser = model.AdminUsername; + siteSettings.Record.PageTitleSeparator = " - "; - // create home page as a CMS page - var page = contentManager.Create("page"); - page.As().Text = "Welcome to Orchard"; - page.As().Slug = ""; - page.As().Title = model.SiteName; - page.As().CommentsShown = false; - page.As().Owner = user; - contentManager.Publish(page); + // create home page as a CMS page + var page = contentManager.Create("page"); + page.As().Text = "Welcome to Orchard"; + page.As().Slug = ""; + page.As().Title = model.SiteName; + page.As().CommentsShown = false; + page.As().Owner = user; + contentManager.Publish(page); - var authenticationService = finiteEnvironment.Resolve(); - authenticationService.SignIn(user, true); + var authenticationService = finiteEnvironment.Resolve(); + authenticationService.SignIn(user, true); + } + catch { + finiteEnvironment.Resolve().Cancel(); + throw; + } } _shellSettingsLoader.SaveSettings(shellSettings);