public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { NameValueCollection content = HttpUtility.ParseQueryString(actionContext.Request.Content.ReadAsStringAsync().Result); var model = new Mailgun(); content.ToDictionary().ForEach(i => model.Add(i.Key.ToLower(), i.Value)); bindingContext.Model = model; return true; }
public async Task <IActionResult> RegisterPost([FromServices] Mailgun mailgun) { var request = HttpContext.Request; var formData = await request.ReadFormAsync(); var user = new DejarixUser { Id = Guid.NewGuid(), UserName = formData["register-username"], Email = formData["register-email"], RegistrationDate = DateTimeOffset.Now }; var model = new RegisterViewModel { PreviousUserName = user.UserName, PreviousEmail = user.Email }; var errors = new List <string>(); if (user.UserName.Length < 3) { errors.Add("Username must be at least 3 characters."); } var password = formData["register-password"]; var passwordConfirm = formData["register-password-confirm"]; if (password != passwordConfirm) { errors.Add("Passwords do not match."); } if (errors.Count > 0) { model.Errors = errors.ToArray(); return(View(nameof(Register), model)); } var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); var bytes = Encoding.UTF8.GetBytes(token); var hexToken = bytes.ToHex(); // https://stackoverflow.com/a/38311283 var path = Url.Action(nameof(Confirm), new { userId = user.Id, token = hexToken }); var host = request.Scheme + "://" + request.Host; var url = host + path; var email = new Email { From = mailgun.DefaultSender, To = ImmutableArray.Create(user.Email), Bcc = mailgun.DefaultBcc, Subject = $"Confirm {user.Email} on DEJARIX", TextBody = "Visit this URL to confirm your email address at DEJARIX: " + url, HtmlBody = $"<h2>DEJARIX Registration</h2><p>Click <a href='{url}'>here</a> to confirm your email address.</p>" }; var response = await mailgun.SendEmailAsync(email); model.Success = $"Registration successful! Check {user.Email} for your confirmation link! (Remember to check your spam folder.)"; return(View(nameof(Register), model)); } else { model.Errors = result.Errors .Select(e => e.Description) .ToArray(); return(View(nameof(Register), model)); } }