//[Authorize(Roles = "Admins")] //[MvcSiteMapNode(Title = "New User", ParentKey = "UserAdmin", Key = "UserEdit")] public async Task<ActionResult> UserEdit( Guid? siteGuid, int? userId) { ISiteSettings selectedSite; // only server admin site can edit other sites settings if ((siteGuid.HasValue) && (siteGuid.Value != Guid.Empty) && (siteGuid.Value != siteManager.CurrentSite.SiteGuid) && (siteManager.CurrentSite.IsServerAdminSite)) { selectedSite = await siteManager.Fetch(siteGuid.Value); ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, "{0} - New User", selectedSite.SiteName); } else { selectedSite = siteManager.CurrentSite; ViewData["Title"] = "New User"; } EditUserViewModel model = new EditUserViewModel(); model.SiteGuid = selectedSite.SiteGuid; if (userId.HasValue) { ISiteUser user = await UserManager.Fetch(selectedSite.SiteId, userId.Value); if (user != null) { model.UserId = user.UserId; model.Email = user.Email; model.FirstName = user.FirstName; model.LastName = user.LastName; model.LoginName = user.UserName; model.DisplayName = user.DisplayName; if (user.DateOfBirth > DateTime.MinValue) { model.DateOfBirth = user.DateOfBirth; } if ((siteGuid.HasValue) && (siteGuid.Value != Guid.Empty)) { ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, "{0} - Manage User", selectedSite.SiteName); } else { ViewBag.Title = "Manage User"; } //var node = SiteMaps.Current.FindSiteMapNodeFromKey("UserEdit"); //if (node != null) //{ // node.Title = "Manage User"; //} } } return View(model); }
public async Task<IActionResult> UserEdit(EditUserViewModel model) { ISiteSettings selectedSite; // only server admin site can edit other sites settings if ((model.SiteGuid != siteManager.CurrentSite.SiteGuid) && (model.SiteGuid != Guid.Empty) && (siteManager.CurrentSite.IsServerAdminSite)) { selectedSite = await siteManager.Fetch(model.SiteGuid); } else { selectedSite = siteManager.CurrentSite; } ViewData["Title"] = "New User"; if (ModelState.IsValid) { if (model.UserId > -1) { //editing an existing user ISiteUser user = await UserManager.Fetch(selectedSite.SiteId, model.UserId); if (user != null) { user.Email = model.Email; user.FirstName = model.FirstName; user.LastName = model.LastName; user.UserName = model.LoginName; user.DisplayName = model.DisplayName; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } else { user.DateOfBirth = DateTime.MinValue; } bool result = await UserManager.Save(user); if (result) { this.AlertSuccess(string.Format("user account for <b>{0}</b> was successfully updated.", user.DisplayName), true); } return RedirectToAction("Index", "UserAdmin"); } } else { var user = new SiteUser { SiteId = selectedSite.SiteId, SiteGuid = selectedSite.SiteGuid, UserName = model.LoginName, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, DisplayName = model.DisplayName }; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { this.AlertSuccess(string.Format("user account for <b>{0}</b> was successfully created.", user.DisplayName), true); return RedirectToAction("Index", "UserAdmin"); } AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
//[Authorize(Roles = "Admins")] public async Task<ActionResult> UserEdit( int userId, Guid? siteGuid ) { ISiteSettings selectedSite; // only server admin site can edit other sites settings if ((siteGuid.HasValue) && (siteGuid.Value != Guid.Empty) && (siteGuid.Value != siteManager.CurrentSite.SiteGuid) && (siteManager.CurrentSite.IsServerAdminSite)) { selectedSite = await siteManager.Fetch(siteGuid.Value); ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, "{0} - Manage User", selectedSite.SiteName); } else { selectedSite = siteManager.CurrentSite; ViewData["Title"] = "Manage User"; } EditUserViewModel model = new EditUserViewModel(); model.SiteGuid = selectedSite.SiteGuid; ISiteUser user = await UserManager.Fetch(selectedSite.SiteId, userId); if (user != null) { model.UserId = user.UserId; model.UserGuid = user.UserGuid; model.Email = user.Email; model.FirstName = user.FirstName; model.LastName = user.LastName; model.LoginName = user.UserName; model.DisplayName = user.DisplayName; model.AccountApproved = user.AccountApproved; model.Comment = user.Comment; model.EmailConfirmed = user.EmailConfirmed; model.IsLockedOut = user.IsLockedOut; model.LastLoginDate = user.LastLoginDate; model.TimeZoneId = user.TimeZoneId; if (user.DateOfBirth > DateTime.MinValue) { model.DateOfBirth = user.DateOfBirth; } NavigationNodeAdjuster currentCrumbAdjuster = new NavigationNodeAdjuster(Request.HttpContext); currentCrumbAdjuster.KeyToAdjust = "UserEdit"; currentCrumbAdjuster.AdjustedText = user.DisplayName; currentCrumbAdjuster.ViewFilterName = NamedNavigationFilters.Breadcrumbs; // this is default but showing here for readers of code currentCrumbAdjuster.AddToContext(); } return View(model); }
public async Task<IActionResult> UserEdit(EditUserViewModel model) { ISiteSettings selectedSite; // only server admin site can edit other sites settings if ((model.SiteGuid != siteManager.CurrentSite.SiteGuid) && (model.SiteGuid != Guid.Empty) && (siteManager.CurrentSite.IsServerAdminSite)) { selectedSite = await siteManager.Fetch(model.SiteGuid); } else { selectedSite = siteManager.CurrentSite; } ViewData["Title"] = "New User"; if (ModelState.IsValid) { if (model.UserId > -1) { //editing an existing user ISiteUser user = await UserManager.Fetch(selectedSite.SiteId, model.UserId); if (user != null) { user.Email = model.Email; user.FirstName = model.FirstName; user.LastName = model.LastName; user.UserName = model.LoginName; user.DisplayName = model.DisplayName; user.AccountApproved = model.AccountApproved; user.Comment = model.Comment; user.EmailConfirmed = model.EmailConfirmed; if((user.IsLockedOut)&&(!model.IsLockedOut)) { // TODO: notify user // think we need to change this so the admin controls whether // email is sent when approving an account } user.IsLockedOut = model.IsLockedOut; //user.TimeZoneId = model.TimeZoneId; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } else { user.DateOfBirth = DateTime.MinValue; } bool result = await UserManager.Save(user); if (result) { this.AlertSuccess(string.Format("user account for <b>{0}</b> was successfully updated.", user.DisplayName), true); } return RedirectToAction("Index", "UserAdmin", new { siteGuid = selectedSite.SiteGuid }); } } } // If we got this far, something failed, redisplay form return View(model); }
public async Task<IActionResult> Register(EditUserViewModel model) { ViewData["Title"] = "Register"; if ((Site.RequireCaptchaOnRegistration)&& (Site.RecaptchaPublicKey.Length > 0)) { model.RecaptchaSiteKey = Site.RecaptchaPublicKey; } model.RegistrationPreamble = Site.RegistrationPreamble; model.RegistrationAgreement = Site.RegistrationAgreement; bool isValid = ModelState.IsValid; if (isValid) { if ((Site.RequireCaptchaOnRegistration)&& (Site.RecaptchaPublicKey.Length > 0)) { string recpatchaSecretKey = Site.RecaptchaPrivateKey; var captchaResponse = await this.ValidateRecaptcha(Request, recpatchaSecretKey); if (!captchaResponse.Success) { //if (captchaResponse.ErrorCodes.Count <= 0) //{ // return View(model); //} ////TODO: log these errors rather than show them in the ui //var error = captchaResponse.ErrorCodes[0].ToLower(); //switch (error) //{ // case ("missing-input-secret"): // ModelState.AddModelError("recaptchaerror", "The secret parameter is missing."); // break; // case ("invalid-input-secret"): // ModelState.AddModelError("recaptchaerror", "The secret parameter is invalid or malformed."); // break; // case ("missing-input-response"): // ModelState.AddModelError("recaptchaerror", "The response parameter is missing."); // break; // case ("invalid-input-response"): // ModelState.AddModelError("recaptchaerror", "The response parameter is invalid or malformed."); // break; // default: // ModelState.AddModelError("recaptchaerror", "Error occured. Please try again"); // break; //} ModelState.AddModelError("recaptchaerror", "reCAPTCHA Error occured. Please try again"); isValid = false; } } //if (Site.RegistrationAgreement.Length > 0) //{ // if (!model.AgreeToTerms) // { // ModelState.AddModelError("agreementerror", "You must agree to the terms"); // isValid = false; // } //} if (!isValid) { return View(model); } var user = new SiteUser { UserName = model.LoginName.Length > 0? model.LoginName : model.Email.Replace("@",string.Empty).Replace(".",string.Empty), Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, DisplayName = model.DisplayName }; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } var result = await userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link //var code = await UserManager.GenerateEmailConfirmationTokenAsync(user); //var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Context.Request.Scheme); //await MessageServices.SendEmailAsync(model.Email, "Confirm your account", // "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>"); await signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } AddErrors(result); } //else //{ // this.AlertDanger("model was invalid", true); //} // If we got this far, something failed, redisplay form return View(model); }
public IActionResult Register() { ViewData["Title"] = "Register"; EditUserViewModel model = new EditUserViewModel(); model.SiteGuid = Site.SiteGuid; if ((Site.RequireCaptchaOnRegistration)&& (Site.RecaptchaPublicKey.Length > 0)) { model.RecaptchaSiteKey = Site.RecaptchaPublicKey; } model.RegistrationPreamble = Site.RegistrationPreamble; model.RegistrationAgreement = Site.RegistrationAgreement; return View(model); }
public async Task<IActionResult> Register(EditUserViewModel model) { ViewData["Title"] = "Register"; if ((Site.CaptchaOnRegistration)&& (Site.RecaptchaPublicKey.Length > 0)) { model.RecaptchaSiteKey = Site.RecaptchaPublicKey; } model.RegistrationPreamble = Site.RegistrationPreamble; model.RegistrationAgreement = Site.RegistrationAgreement; bool isValid = ModelState.IsValid; if (isValid) { if ((Site.CaptchaOnRegistration)&& (Site.RecaptchaPublicKey.Length > 0)) { string recpatchaSecretKey = Site.RecaptchaPrivateKey; var captchaResponse = await this.ValidateRecaptcha(Request, recpatchaSecretKey); if (!captchaResponse.Success) { //if (captchaResponse.ErrorCodes.Count <= 0) //{ // return View(model); //} ////TODO: log these errors rather than show them in the ui //var error = captchaResponse.ErrorCodes[0].ToLower(); //switch (error) //{ // case ("missing-input-secret"): // ModelState.AddModelError("recaptchaerror", "The secret parameter is missing."); // break; // case ("invalid-input-secret"): // ModelState.AddModelError("recaptchaerror", "The secret parameter is invalid or malformed."); // break; // case ("missing-input-response"): // ModelState.AddModelError("recaptchaerror", "The response parameter is missing."); // break; // case ("invalid-input-response"): // ModelState.AddModelError("recaptchaerror", "The response parameter is invalid or malformed."); // break; // default: // ModelState.AddModelError("recaptchaerror", "Error occured. Please try again"); // break; //} ModelState.AddModelError("recaptchaerror", "reCAPTCHA Error occured. Please try again"); isValid = false; } } //if (Site.RegistrationAgreement.Length > 0) //{ // if (!model.AgreeToTerms) // { // ModelState.AddModelError("agreementerror", "You must agree to the terms"); // isValid = false; // } //} if (!isValid) { return View(model); } var user = new SiteUser { UserName = model.LoginName.Length > 0? model.LoginName : model.Email.Replace("@",string.Empty).Replace(".",string.Empty), Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, DisplayName = model.DisplayName }; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } var result = await userManager.CreateAsync(user, model.Password); if (result.Succeeded) { if(Site.UseSecureRegistration) // require email confirmation { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link var code = await userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); await emailSender.SendAccountConfirmationEmailAsync( Site, model.Email, "Confirm your account", callbackUrl); this.AlertSuccess("Please check your email inbox, we just sent you a link that you need to click to confirm your account", true); // TODO: we should have a specific view for this instead of redirecting home // the alert currently only works if session is enabled so it would be better to // redirect to a message page return RedirectToAction("Index", "Home"); } else { if(Site.RequireApprovalBeforeLogin) { //TODO: send notification to admins about request for approval } else { await signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } } } AddErrors(result); } //else //{ // this.AlertDanger("model was invalid", true); //} // If we got this far, something failed, redisplay form return View(model); }
public async Task<IActionResult> UserEdit(EditUserViewModel model) { var selectedSite = await siteManager.GetSiteForDataOperations(model.SiteId); // only server admin site can edit other sites settings if (selectedSite.Id != siteManager.CurrentSite.Id) { ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, sr["{0} - Manage User"], selectedSite.SiteName); } else { ViewData["Title"] = sr["Manage User"]; } if (ModelState.IsValid) { if (model.UserId != Guid.Empty) { //editing an existing user var user = await UserManager.Fetch(selectedSite.Id, model.UserId); if (user != null) { user.Email = model.Email; user.FirstName = model.FirstName; user.LastName = model.LastName; user.UserName = model.Username; user.DisplayName = model.DisplayName; //user.AccountApproved = model.AccountApproved; user.Comment = model.Comment; user.EmailConfirmed = model.EmailConfirmed; if((user.IsLockedOut)&&(!model.IsLockedOut)) { // TODO: notify user // think we need to change this so the admin controls whether // email is sent when approving an account } user.IsLockedOut = model.IsLockedOut; user.TimeZoneId = model.TimeZoneId; if (model.DateOfBirth.HasValue) { user.DateOfBirth = model.DateOfBirth.Value; } else { user.DateOfBirth = DateTime.MinValue; } await UserManager.UpdateAsync((SiteUser)user); this.AlertSuccess(string.Format(sr["user account for {0} was successfully updated."], user.DisplayName), true); return RedirectToAction("Index", "UserAdmin", new { siteId = selectedSite.Id }); } } } // If we got this far, something failed, redisplay form return View(model); }
public async Task<ActionResult> UserEdit( Guid userId, Guid? siteId ) { if(userId == Guid.Empty) { return RedirectToAction("Index"); } ViewData["ReturnUrl"] = Request.Path + Request.QueryString; var selectedSite = await siteManager.GetSiteForDataOperations(siteId); // only server admin site can edit other sites settings if (selectedSite.Id != siteManager.CurrentSite.Id) { ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, sr["{0} - Manage User"], selectedSite.SiteName); } else { ViewData["Title"] = sr["Manage User"]; } var model = new EditUserViewModel(); model.SiteId = selectedSite.Id; var user = await UserManager.Fetch(selectedSite.Id, userId); if (user != null) { model.UserId = user.Id; model.Email = user.Email; model.FirstName = user.FirstName; model.LastName = user.LastName; model.Username = user.UserName; model.DisplayName = user.DisplayName; model.AccountApproved = user.AccountApproved; model.Comment = user.Comment; model.EmailConfirmed = user.EmailConfirmed; model.IsLockedOut = user.IsLockedOut; model.LastLoginDate = user.LastLoginUtc; model.TimeZoneId = user.TimeZoneId; if(string.IsNullOrEmpty(model.TimeZoneId)) { model.TimeZoneId = await timeZoneIdResolver.GetSiteTimeZoneId(); } model.AllTimeZones = tzHelper.GetTimeZoneList().Select(x => new SelectListItem { Text = x, Value = x, Selected = model.TimeZoneId == x }); if (user.DateOfBirth > DateTime.MinValue) { model.DateOfBirth = user.DateOfBirth; } model.UserClaims = await UserManager.GetClaimsAsync((SiteUser)user); var currentCrumbAdjuster = new NavigationNodeAdjuster(Request.HttpContext); currentCrumbAdjuster.KeyToAdjust = "UserEdit"; currentCrumbAdjuster.AdjustedText = user.DisplayName; currentCrumbAdjuster.ViewFilterName = NamedNavigationFilters.Breadcrumbs; // this is default but showing here for readers of code currentCrumbAdjuster.AddToContext(); } return View(model); }