예제 #1
0
        public async Task <ServiceResponse <LoginResponse> > LoginAsync(LoginRequest request)
        {
            var user = await UserManager.FindByEmailAsync(request.Email);

            if (user == null)
            {
                throw new RestException(HttpStatusCode.Unauthorized);
            }

            if (user.IsDeleted)
            {
                ErrorResultToReturn = new ErrorResult(Errors.AuthErrors.YourAccountWasDeleted);
                throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn);
            }

            var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);

            if (!result.Succeeded)
            {
                throw new RestException(HttpStatusCode.Unauthorized);
            }

            var generatedToken = await _jwtGenerator.CreateTokenAsync(user);

            var responseDto = new LoginResponse()
            {
                Token        = generatedToken.Token,
                RefreshToken = generatedToken.RefreshToken,
            };

            return(new ServiceResponse <LoginResponse>(HttpStatusCode.OK, responseDto));
        }
예제 #2
0
        public async Task <LoginUserResponse> LoginAsync(LoginUserRequest request)
        {
            var user = await _context.ApplicationUsers.SingleOrDefaultAsync(u => u.Email == request.Email);

            if (user == null)
            {
                return(null);
            }


            var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);

            if (!result.Succeeded)
            {
                return(null);
            }

            var generatedToken = await _jwtGenerator.CreateTokenAsync(user);

            var responseDto = new LoginUserResponse()
            {
                Token        = generatedToken.Token,
                RefreshToken = generatedToken.RefreshToken,
            };

            return(responseDto);
        }
예제 #3
0
            public async Task <UserDto> Handle(Command request, CancellationToken cancellationToken)
            {
                if (await _userManager.Users.AnyAsync(x => x.Email == request.Email,
                                                      cancellationToken: cancellationToken))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Email = "Email already exists" });
                }

                var user = new AppUser
                {
                    Email    = request.Email,
                    UserName = request.Email,
                };

                var result = await _userManager.CreateAsync(user, request.Password);

                if (result.Succeeded)
                {
                    await _userManager.AddToRoleAsync(user, "Student");

                    return(new UserDto
                    {
                        Email = user.Email,
                        Token = await _jwtGenerator.CreateTokenAsync(user)
                    });
                }

                throw new Exception("Problem creating user");
            }
예제 #4
0
            public async Task <UserDto> Handle(Query request, CancellationToken cancellationToken)
            {
                var site = await _context.Sites.FirstOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog);

                var user = await _userManager.FindByEmailAsync(request.Email);

                if (user == null)
                {
                    await _logger.LogActivity(
                        site.Id,
                        ActivityCodeEnum.UserLogin,
                        ActivitySeverityEnum.Medium,
                        ActivityObjectEnum.User,
                        "Login failed. The requested email address or username does not exist.");

                    throw new RestException(HttpStatusCode.Unauthorized);
                }
                user.LastLoginDate = DateTime.UtcNow;

                var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);

                if (result.Succeeded)
                {
                    user.LastLoginDate = DateTime.UtcNow;
                    await _context.SaveChangesAsync();

                    await _logger.LogActivity(
                        site.Id,
                        ActivityCodeEnum.UserLogin,
                        ActivitySeverityEnum.Low,
                        ActivityObjectEnum.User,
                        $"A user with the username \"{user.UserName}\" has been logged in successfully.");

                    var claims = await _userManager.GetClaimsAsync(user);

                    return(new UserDto
                    {
                        DisplayName = user.DisplayName,
                        Token = await _jwtGenerator.CreateTokenAsync(user, claims.ToList()),
                        UserName = user.UserName,
                        Role = user.Role,
                        //ProfilePhotoName = user.CreatedAttachments?.FirstOrDefault(x => x.Type == AttachmentTypeEnum.Photo && x.IsMain)?.FileName
                    });
                }

                await _logger.LogActivity(
                    site.Id,
                    ActivityCodeEnum.UserLogin,
                    ActivitySeverityEnum.Medium,
                    ActivityObjectEnum.User,
                    "Login faild. Password is incorrect!");

                throw new RestException(HttpStatusCode.Unauthorized);
            }
예제 #5
0
        public async Task <Response <LoginDto> > Handle(LoginQuery request, CancellationToken cancellationToken)
        {
            var(user, result) = await _identityService.SignInAsync(request.Email, request.Password);

            if (result.Succeeded)
            {
                //generate Token
                return(new Response <LoginDto>(new LoginDto
                {
                    DisplayName = user.DisplayName,
                    Token = await _jwtGenerator.CreateTokenAsync(user),
                    UserName = user.UserName,
                }));
            }

            throw new RestException(HttpStatusCode.Unauthorized);
        }
예제 #6
0
            public async Task <UserDto> Handle(Command request, CancellationToken cancellationToken)
            {
                var site = await _context.Sites.SingleOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog);

                if (await _context.Users.Where(x => x.Email == request.Email).AnyAsync())
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Email = "already exists!" });
                }

                if (await _context.Users.Where(x => x.UserName == request.UserName).AnyAsync())
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Username = "******" });
                }

                var user = new User
                {
                    DisplayName = request.DisplayName,
                    Email       = request.Email,
                    UserName    = request.UserName,
                    Role        = AspianCoreClaimValue.Member,
                    CreatedAt   = DateTime.UtcNow
                };

                var createUserResult = await _userManager.CreateAsync(user, request.Password);

                if (createUserResult.Succeeded)
                {
                    await _logger.LogActivity(
                        site.Id,
                        ActivityCodeEnum.UserRegister,
                        ActivitySeverityEnum.Low,
                        ActivityObjectEnum.User,
                        $"A user with the username \"{user.UserName}\" has been registered successfully.");

                    return(new UserDto
                    {
                        DisplayName = user.DisplayName,
                        Token = await _jwtGenerator.CreateTokenAsync(user, claim : null),
                        UserName = user.UserName,
                        Role = user.Role
                    });
                }

                throw new Exception("Problem creating user!");
            }
예제 #7
0
            public async Task <UserDto> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _userManager.FindByEmailAsync(request.Email);

                if (user == null)
                {
                    throw new RestException(HttpStatusCode.Unauthorized);
                }

                var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);

                if (result.Succeeded)
                {
                    return(new UserDto
                    {
                        Email = user.Email,
                        Token = await _jwtGenerator.CreateTokenAsync(user)
                    });
                }

                throw new RestException(HttpStatusCode.Unauthorized);
            }
예제 #8
0
        public async Task <Response <RegisterCommandDto> > Handle(RegisterCommand request, CancellationToken cancellationToken)
        {
            var user = new User
            {
                DisplayName = request.DisplayName,
                UserName    = request.UserName,
                Email       = request.Email,
            };

            var(result, _) = await _identityService.CreateUserAsync(user, request.Password);

            if (result.Succeeded.IsNotTrue())
            {
                throw new RestException(HttpStatusCode.BadRequest, "RegisterErrors", result.Errors);
            }

            return(new Response <RegisterCommandDto>(new RegisterCommandDto
            {
                DisplayName = request.DisplayName,
                UserName = request.UserName,
                Token = await _jwt.CreateTokenAsync(user)
            }));
        }