public ActionResult AddPOST(TenantAddViewModel viewModel) {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't create tenant")))
                return new HttpUnauthorizedResult();

            if (!EnsureDefaultTenant())
                return new HttpUnauthorizedResult();

            // ensure tenants name are valid
            if (!String.IsNullOrEmpty(viewModel.Name) && !Regex.IsMatch(viewModel.Name, @"^\w+$")) {
                ModelState.AddModelError("Name", T("Invalid tenant name. Must contain characters only and no spaces.").Text);
            }

            if (!ModelState.IsValid) {
                return View(viewModel);
            }

            try {
                _tenantService.CreateTenant(
                    new ShellSettings {
                        Name = viewModel.Name,
                        RequestUrlHost = viewModel.RequestUrlHost,
                        RequestUrlPrefix = viewModel.RequestUrlPrefix,
                        DataProvider = viewModel.DataProvider,
                        DataConnectionString = viewModel.DatabaseConnectionString,
                        DataTablePrefix = viewModel.DatabaseTablePrefix,
                        State = new TenantState("Uninitialized")
                    });

                return RedirectToAction("Index");
            }
            catch (Exception exception) {
                this.Error(exception, T("Creating Tenant failed: {0}", exception.Message), Logger, Services.Notifier);
                return View(viewModel);
            }
        }
示例#2
0
        public ActionResult Add() {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Cannot create tenant")))
                return new HttpUnauthorizedResult();

            if ( !EnsureDefaultTenant() )
                return new HttpUnauthorizedResult();

            var model = new TenantAddViewModel();

            // fetches all available themes
            model.Themes = _tenantService.GetInstalledThemes().Select(x => new ThemeEntry { ThemeId = x.Id, ThemeName = x.Name }).ToList();

            return View(model);
        }
示例#3
0
        public ActionResult AddPost(TenantAddViewModel viewModel) {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("You don't have permission to create tenants."))) {
                return new HttpUnauthorizedResult();
            }

            if (!IsExecutingInDefaultTenant()) {
                return new HttpUnauthorizedResult();
            }

            if (_tenantService.GetTenants().Any(tenant => string.Equals(tenant.Name, viewModel.Name, StringComparison.OrdinalIgnoreCase))) {
                ModelState.AddModelError("Name", T("A tenant with the same name already exists.", viewModel.Name).Text);
            }

            // Ensure tenants name are valid.
            if (!String.IsNullOrEmpty(viewModel.Name) && !Regex.IsMatch(viewModel.Name, @"^\w+$")) {
                ModelState.AddModelError("Name", T("Invalid tenant name. Must contain characters only and no spaces.").Text);
            }

            if (!string.Equals(viewModel.Name, "default", StringComparison.OrdinalIgnoreCase) && string.IsNullOrWhiteSpace( viewModel.RequestUrlHost) && string.IsNullOrWhiteSpace(viewModel.RequestUrlPrefix)) {
                ModelState.AddModelError("RequestUrlHostRequestUrlPrefix", T("RequestUrlHost and RequestUrlPrefix can not be empty at the same time.").Text);
            }

            if (!ModelState.IsValid) {
                return View(viewModel);
            }

            try {
                _tenantService.CreateTenant(
                    new ShellSettings {
                        Name = viewModel.Name,
                        RequestUrlHost = viewModel.RequestUrlHost,
                        RequestUrlPrefix = viewModel.RequestUrlPrefix,
                        DataProvider = viewModel.DataProvider,
                        DataConnectionString = viewModel.DatabaseConnectionString,
                        DataTablePrefix = viewModel.DatabaseTablePrefix,
                        State = TenantState.Uninitialized,
                        Themes = viewModel.Themes.Where(x => x.Checked).Select(x => x.ThemeId).ToArray(),
                        Modules = viewModel.Modules.Where(x => x.Checked).Select(x => x.ModuleId).ToArray()
                    });

                Services.Notifier.Information(T("Tenant '{0}' was created successfully.", viewModel.Name));
                return RedirectToAction("Index");
            }
            catch (ArgumentException ex) {
                Logger.Error(ex, "Error while creating tenant.");
                Services.Notifier.Error(T("Tenant creation failed with error: {0}.", ex.Message));
                return View(viewModel);
            }
        }
示例#4
0
        public ActionResult Add() {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("You don't have permission to create tenants.")))
                return new HttpUnauthorizedResult();

            if (!IsExecutingInDefaultTenant())
                return new HttpUnauthorizedResult();

            var viewModel = new TenantAddViewModel();

            // Fetches all available themes and modules.
            viewModel.Themes = _tenantService.GetInstalledThemes().Select(x => new ThemeEntry { ThemeId = x.Id, ThemeName = x.Name }).ToList();
            viewModel.Modules = _tenantService.GetInstalledModules().Select(x => new ModuleEntry { ModuleId = x.Id, ModuleName = x.Name }).ToList();

            return View(viewModel);
        }
        public ActionResult AddPOST(TenantAddViewModel viewModel) {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't create tenant"))) {
                return new HttpUnauthorizedResult();
            }

            if (!EnsureDefaultTenant()) {
                return new HttpUnauthorizedResult();
            }

            if (_tenantService.GetTenants().Any(tenant => string.Equals(tenant.Name, viewModel.Name, StringComparison.OrdinalIgnoreCase))) {
                ModelState.AddModelError("Name", T("A tenant with the same name already exists.", viewModel.Name).Text);
            }

            // ensure tenants name are valid
            if (!String.IsNullOrEmpty(viewModel.Name) && !Regex.IsMatch(viewModel.Name, @"^\w+$")) {
                ModelState.AddModelError("Name", T("Invalid tenant name. Must contain characters only and no spaces.").Text);
            }

            if (!ModelState.IsValid) {
                return View(viewModel);
            }

            try {
                _tenantService.CreateTenant(
                    new ShellSettings {
                        Name = viewModel.Name,
                        RequestUrlHost = viewModel.RequestUrlHost,
                        RequestUrlPrefix = viewModel.RequestUrlPrefix,
                        DataProvider = viewModel.DataProvider,
                        DataConnectionString = viewModel.DatabaseConnectionString,
                        DataTablePrefix = viewModel.DatabaseTablePrefix,
                        State = TenantState.Uninitialized,
                        Themes = viewModel.Themes.Where(x => x.Checked).Select(x => x.ThemeId).ToArray(),
                        Modules = viewModel.Modules.Where(x => x.Checked).Select(x => x.ModuleId).ToArray()
                    });

                return RedirectToAction("Index");
            }
            catch (ArgumentException exception) {
                Services.Notifier.Error(T("Creating Tenant failed: {0}", exception.Message));
                return View(viewModel);
            }
        }
示例#6
0
        public ActionResult AddPOST(TenantAddViewModel viewModel) {
            try {
                if (!Services.Authorizer.Authorize(Permissions.ManageTenants, T("Couldn't create tenant")))
                    return new HttpUnauthorizedResult();
                
                _tenantService.CreateTenant(
                    new ShellSettings {
                        Name = viewModel.Name,
                        RequestUrlHost = viewModel.RequestUrlHost,
                        RequestUrlPrefix = viewModel.RequestUrlPrefix,
                        DataProvider = viewModel.DataProvider,
                        DataConnectionString = viewModel.DatabaseConnectionString,
                        DataTablePrefix = viewModel.DatabaseTablePrefix,
                        State = new TenantState("Uninitialized")
                    });

                return RedirectToAction("Index");
            }
            catch (Exception exception) {
                Services.Notifier.Error(T("Creating Tenant failed: ") + exception.Message);
                return View(viewModel);
            }
        }