Пример #1
0
        public async Task EnsureSeedDataAsync()
        {
            var userFound = await m_userManager.FindByEmailAsync("*****@*****.**");

            if (userFound == null)
            {
                var newUser = new ChirpUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };

                var userRes = await m_userManager.CreateAsync(newUser, "qwertyui");
            }

            m_context.SaveChanges();

            if (!m_context.ChirpPosts.Any())
            {
                //Add new data
                var chirpPost = new ChirpPost()
                {
                    Message  = "First message! ChirpChirp!",
                    PostTime = DateTimeOffset.UtcNow,
                    User     = await m_userManager.FindByEmailAsync("*****@*****.**")
                };

                m_context.ChirpPosts.Add(chirpPost);

                m_context.SaveChanges();
            }
        }
Пример #2
0
        public IActionResult Post(DtoUserRegister dto)
        {
            if (_db.Users.UserExists(dto.Username))
            {
                ModelState.AddModelError("Username", "This username is already taken");
            }

            if (dto.Password != dto.PasswordConfirm)
            {
                ModelState.AddModelError("PasswordConfirm", "The password and the confirmation password do not match");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = new ChirpUser
            {
                Username = dto.Username,
                Password = _passwordHasher.HashPassword(dto.Password)
            };

            _db.Users.Add(user);

            _db.SaveChanges();

            return(Ok(user.Id));
        }
Пример #3
0
        public async Task SendConfirmationEmail(ChirpUser a_user)
        {
            var code = await m_userManager.GenerateEmailConfirmationTokenAsync(a_user);

            var callbackUrl = Url.Action("EmailConfirmed", "Auth", new { userId = a_user.Id, code = code }, protocol: HttpContext.Request.Scheme);
            var emailBody   = $"Please confirm your account by clicking this link: <br/> <a href=\"{callbackUrl}\"> {callbackUrl} </a>";
            await m_emailSender.SendEmailAsync(a_user.Email, "Confirm your account", emailBody);
        }
Пример #4
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new ChirpUser {
                    Username = Input.Username
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    /*
                     * var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                     * code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                     * var callbackUrl = Url.Page(
                     *  "/Account/ConfirmEmail",
                     *  pageHandler: null,
                     *  values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                     *  protocol: Request.Scheme);
                     *
                     * await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                     *  $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
                     *
                     * if (_userManager.Options.SignIn.RequireConfirmedAccount)
                     * {
                     *  return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
                     * }
                     * else
                     * {
                     *  await _signInManager.SignInAsync(user, isPersistent: false);
                     *  return LocalRedirect(returnUrl);
                     * }
                     */

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }

                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Пример #5
0
        public async Task <JsonResult> Post([FromBody] SignupViewModel vm, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { error = "Unknown sign up error." }));
            }

            if (vm.Password != vm.ConfirmPassword)
            {
                return(Json(new { error = "The passwords you entered did not match." }));
            }

            var userFound = await m_userManager.FindByNameAsync(vm.Username);

            if (userFound != null)
            {
                return(Json(new { error = "This username is already in use." }));
            }

            userFound = await m_userManager.FindByEmailAsync(vm.Email);

            if (userFound != null)
            {
                return(Json(new { error = "This email address is already in use." }));
            }

            var newUser = new ChirpUser()
            {
                UserName = vm.Username,
                Email    = vm.Email
            };

            var signUpResult = await m_userManager.CreateAsync(newUser, vm.Password);

            if (!signUpResult.Succeeded)
            {
                if (signUpResult.Errors.Any())
                {
                    if (signUpResult.Errors.First().Code == "InvalidUserName")
                    {
                        return(Json(new { error = "Invalid username. Usernames can only contain letters, numbers, and .-_" }));
                    }
                }
                return(Json(new { error = "Unknown sign up error." }));
            }

            await SendConfirmationEmail(newUser);

            return(Json(new { url = "confirmemailsent" }));
        }
Пример #6
0
        public async Task <IActionResult> UploadProfilePicture(ICollection <IFormFile> files)
        {
            ChirpUser user = await m_userManager.FindByNameAsync(User.Identity.Name);

            var file = files.First();

            var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

            Stream stream = file.OpenReadStream();
            string key    = user.Id + ".jpg";

            m_profilePictureService.UploadProfilePicture(key, stream);

            user.HasProfilePicture = true;
            await m_userManager.UpdateAsync(user);

            return(RedirectToAction("ChangeProfilePicture", "Auth"));
        }