public async Task <IActionResult> CreateStudentAccount(CreateStudentAccountViewModel model)
        {
            if (context.Students.Any(x => x.NumberOfStudentBook == model.NumberOfStudentBook))
            {
                ModelState.AddModelError("", $"Student with number {model.NumberOfStudentBook} is alredy exist.");
            }

            if (ModelState.IsValid)
            {
                StudentUser student = new StudentUser()
                {
                    UserName            = model.FirstName + "_" + model.SecondName + "_" + model.NumberOfStudentBook,
                    Email               = model.Email,
                    GroupID             = model.GroupID,
                    FirstName           = model.FirstName,
                    LastName            = model.SecondName,
                    NumberOfStudentBook = model.NumberOfStudentBook
                };


                var result = await Manager.CreateAsync(student);

                if (result.Succeeded)
                {
                    var user = await Manager.FindByEmailAsync(student.Email) as StudentUser;

                    try
                    {
                        var token = await Manager.GenerateEmailConfirmationTokenAsync(user);

                        string link      = $@"{(HttpContext.Request.IsHttps?"https":"http")}://{HttpContext.Request.Host}{Url.Action("Registration", "Account", new { area = "Student", Token = token, Magic = student.Id })}";
                        var    mailmodel = new StRgsMailModel {
                            user = user, link = link
                        };
                        var msg = MailSender.HtmlEmailMesage("EmailRegistration", mailmodel);

                        await MailSender.SendEmailAsync(student.Email, "Registration", msg);


                        await Manager.AddToRoleAsync(student, "Student");

                        return(Redirect(model.returnUrl));
                    }
                    catch (Exception e)
                    {
                        await Manager.DeleteAsync(user);

                        ModelState.AddModelError("", e.Message);
                    }
                }
                else
                {
                    foreach (var item in result.Errors)
                    {
                        ModelState.AddModelError("", item.Description);
                    }
                }
            }
            return(View(model));
        }
Esempio n. 2
0
        public async Task <IActionResult> ResetPassword(string Email)
        {
            var user = await Manager.FindByEmailAsync(Email);

            if (user == null)
            {
                return(StatusCode(404));
            }
            var token = await Manager.GeneratePasswordResetTokenAsync(user);

            string link      = $@"{(HttpContext.Request.IsHttps ? "https" : "http")}://{HttpContext.Request.Host}{Url.Action("ChangePassword", "Account", new {  Token = token, Magic = user.Id })}";
            var    mailmodel = new PasswordResetMailModel {
                user = user, link = link
            };
            var msg = EmailSender.HtmlEmailMesage("ResetPassword", mailmodel);
            await EmailSender.SendEmailAsync(user.Email, "Reset password", msg);

            return(Ok());
        }