Esempio n. 1
0
        public async Task <IActionResult> GetUser()
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.GetUserAsync(User);

                if (user == null)
                {
                    return(BadRequest("User does not exist"));
                }

                // Reshape the users details to the DTO model
                var userReturned = new UserReadDTO
                {
                    FirstName   = user.FirstName,
                    LastName    = user.LastName,
                    Email       = user.Email,
                    Photo       = user.Photo,
                    DateCreated = user.DateCreated
                };

                // Return to http response
                return(Ok(userReturned));
            }
            return(BadRequest("Invalid Request"));
        }
        public dynamic Registry([FromBody] UserRegistryModel userRegistry)
        {
            if (ModelState.IsValid)
            {
                UserWriteDTO user = new UserWriteDTO();

                user.UserID   = Guid.NewGuid();
                user.UserName = userRegistry.UserName;
                user.Email    = userRegistry.Email;
                user.Password = BCryptUtil.HashPassword(userRegistry.Password);

                Task <Services.Entities.CustomResponse> task = _userService.RegistryAsync(user);

                if (task.Result.status)
                {
                    UserReadDTO user_return = new UserReadDTO(user.UserID.ToString(), user.UserName, user.Email);

                    return(new
                    {
                        status = true,
                        code = ReturnCodes.DataCreateFailed,
                        message = "Đăng Ký Thành Công",
                        data = user_return
                    });
                }
            }

            return(new
            {
                status = false,
                code = ReturnCodes.DataCreateFailed,
                message = "Đăng Ký Không Thành Công"
            });
        }
Esempio n. 3
0
        public void UpdateToken_UserIDValueLengthEqual0_ActualFalse()
        {
            //Arrange
            string      UserID      = "";
            UserReadDTO userReadDTO = new UserReadDTO
            {
                UserID   = UserID,
                Email    = "*****@*****.**",
                UserName = "******"
            };

            Utilities.JWT.TokenResponse tokens = TokenUtil.GenerateTokens(userReadDTO, tokenProviderOption);

            DTO.ReadDTO.TokenReadDTO tokenReadDTO = new DTO.ReadDTO.TokenReadDTO
            {
                AccessToken           = tokens.AccessToken,
                AccessTokenExpriesIn  = tokens.AccessTokenExpiresIn,
                RefreshToken          = tokens.RefreshToken,
                RefreshTokenExpriesIn = tokens.RefreshTokenExpiresIn,
            };

            //Act
            var status = userService.UpdateToken(UserID, tokenReadDTO).Result.status;

            //Assert
            Assert.AreEqual(false, status);
        }
Esempio n. 4
0
        public void UpdateUserInfor_UserIsNotExist_ActualFalse()
        {
            //Arrange
            UserReadDTO userReadDTO = new UserReadDTO
            {
                UserID   = Guid.NewGuid().ToString(),
                Email    = "*****@*****.**",
                UserName = "******"
            };

            Utilities.JWT.TokenResponse tokens = TokenUtil.GenerateTokens(userReadDTO, tokenProviderOption);

            DTO.ReadDTO.TokenReadDTO tokenReadDTO = new DTO.ReadDTO.TokenReadDTO
            {
                AccessToken           = tokens.AccessToken,
                AccessTokenExpriesIn  = tokens.AccessTokenExpiresIn,
                RefreshToken          = tokens.RefreshToken,
                RefreshTokenExpriesIn = tokens.RefreshTokenExpiresIn,
            };

            //Act
            var status = userService.UpdateUserInfor(userReadDTO).Result.status;

            //Assert
            Assert.AreEqual(status, false);
        }
Esempio n. 5
0
        public async Task <ActionResult <UserReadDTO> > CreateUser([FromBody] UserCreateDTO userCreateDto)
        {
            if (userCreateDto == null)
            {
                return(BadRequest());
            }

            var model = new User
                        (
                userCreateDto.Email,
                userCreateDto.Firstname,
                userCreateDto.Lastname,
                userCreateDto.Username,
                userCreateDto.Role,
                userCreateDto.Password,
                userCreateDto.Salt
                        );
            await _userService.AddUser(model);

            var userReadDto = new UserReadDTO
            {
                UserId    = model.UserId,
                Email     = model.Email,
                Role      = model.Role,
                Username  = model.Username,
                Firstname = model.Firstname,
                Lastname  = model.Lastname,
            };

            return(CreatedAtRoute(nameof(GetUser), new { Id = userReadDto.UserId }, userReadDto));
        }
Esempio n. 6
0
        public void UpdateUserInfor_NullUserID_ActualFalse()
        {
            //Arrange
            UserReadDTO userReadDTO = new UserReadDTO {
                UserID   = null,
                Email    = "*****@*****.**",
                UserName = "******"
            };

            Utilities.JWT.TokenResponse tokens = TokenUtil.GenerateTokens(userReadDTO, tokenProviderOption);

            DTO.ReadDTO.TokenReadDTO tokenReadDTO = new DTO.ReadDTO.TokenReadDTO
            {
                AccessToken           = tokens.AccessToken,
                AccessTokenExpriesIn  = tokens.AccessTokenExpiresIn,
                RefreshToken          = tokens.RefreshToken,
                RefreshTokenExpriesIn = tokens.RefreshTokenExpiresIn,
            };

            //Act
            var status = userService.UpdateUserInfor(userReadDTO).Result.status;

            //Assert
            Assert.AreEqual(status, false);
        }
        public async Task <dynamic> Update([FromBody] UserUpdateModel userUpdateModel)
        {
            string      accessToken = Request.Headers[HeaderNames.Authorization];
            string      token       = accessToken.Split("Bearer ")[1];
            UserReadDTO userRead    = TokenUtil.GetSubFromToken(token);

            if (ModelState.IsValid)
            {
                userRead.UserName = userUpdateModel.UserName;
                Services.Entities.CustomResponse updateUserInforTask = await _userService.UpdateUserInfor(userRead);

                if (updateUserInforTask.status)
                {
                    return(new
                    {
                        status = true,
                        code = ReturnCodes.DataUpdateSucceeded,
                        message = updateUserInforTask.message,
                        data = updateUserInforTask.userReadDTO
                    });
                }
            }

            return(new
            {
                status = false,
                code = ReturnCodes.DataUpdateFailed,
                message = "Có Lỗi Xảy Ra Khi Cố Gắng Cập Nhật Dữ Liệu"
            });
        }
Esempio n. 8
0
        private string GenerateJSONWebToken(UserReadDTO userInfo)
        {
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, userInfo.id.ToString()),
                new Claim(JwtRegisteredClaimNames.Email, userInfo.email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(JwtRegisteredClaimNames.Exp, DateTime.Now.AddMinutes(60).ToString())
            };

            var token = new JwtSecurityToken(
                issuer: _config["Jwt:Issuer"],
                audience: _config["Jwt:Issuer"],
                claims,
                expires: DateTime.Now.AddMinutes(60),
                signingCredentials: credentials
                );

            var encodedToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(encodedToken);
        }
        public async Task <dynamic> ChangePassword([FromBody] UserChangePasswordModel userChangePasswordModel)
        {
            string      accessToken = Request.Headers[HeaderNames.Authorization];
            string      token       = accessToken.Split("Bearer ")[1];
            UserReadDTO userRead    = TokenUtil.GetSubFromToken(token);

            if (ModelState.IsValid)
            {
                Services.Entities.CustomResponse UpdatePassword_Task = await _userService.UpdatePassword(userRead.UserID, userChangePasswordModel.OldPassword, userChangePasswordModel.NewPassword);

                return(new
                {
                    status = UpdatePassword_Task.status,
                    code = 200,
                    message = UpdatePassword_Task.message
                });
            }

            return(new
            {
                status = false,
                code = ReturnCodes.DataUpdateFailed,
                message = "Có Lỗi Xảy Ra Khi Cố Gắng Thay Đổi Mật Khẩu"
            });
        }
        public dynamic Create(PostModel postModel)
        {
            string      accessToken = Request.Headers[HeaderNames.Authorization];
            string      token       = accessToken.Split("Bearer ")[1];
            UserReadDTO userRead    = TokenUtil.GetSubFromToken(token);

            if (ModelState.IsValid)
            {
                PostWriteDTO postWrite = new PostWriteDTO
                {
                    TitlePost   = postModel.Title,
                    SummaryPost = postModel.Summary,
                    ContentPost = postModel.Content,
                    EncodeImage = postModel.EncodeImage,
                    UserID      = userRead.UserID
                };

                if (_postService.Create(postWrite).Result.status)
                {
                    return(new
                    {
                        status = true,
                        code = ReturnCodes.DataCreateSucceeded,
                        message = "Thêm Post Thành Công"
                    });
                }
            }

            return(new
            {
                status = false,
                code = ReturnCodes.DataCreateFailed,
                message = "Có Lỗi Xảy Ra"
            });
        }
Esempio n. 11
0
        public IActionResult Create(UserReadDTO userReadDTO)
        {
            var userModel = _mapper.Map <User>(userReadDTO);

            if (_libreria.ValidUser(userModel))
            {
                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.Name, userModel.Email),
                    new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds().ToString()),
                    new Claim(JwtRegisteredClaimNames.Exp, new DateTimeOffset(DateTime.Now.AddDays(1)).ToUnixTimeSeconds().ToString()),
                };

                var token = new JwtSecurityToken(
                    new JwtHeader(
                        new SigningCredentials(
                            new SymmetricSecurityKey(Encoding.UTF8.GetBytes("PalabraSecretaMuyLarga")),
                            SecurityAlgorithms.HmacSha256
                            )
                        ),
                    new JwtPayload(claims)
                    );

                var output = new {
                    Access_Token = new JwtSecurityTokenHandler().WriteToken(token),
                    Email        = userModel.Email
                };

                return(Ok(output));
            }
            else
            {
                return(BadRequest());
            }
        }
Esempio n. 12
0
        public static string GenerateRegisterPage(UserReadDTO user = null)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("<h2>Sign Up</h2>");
            sb = addNotifications(sb);
            sb.Append(@"<form method=post action=sign_up>
          <dl>
      <dt>Username:
      <dd><input type=text name=Username size=30>
      <dt>E-Mail:
      <dd><input type=text name=Email size=30>
      <dt>Password:
      <dd><input type=password name=Password1 size=30>
      <dt>Password <small>(repeat)</small>:
      <dd><input type=password name=Password2 size=30>
    </dl>
    <div class=actions><input type=submit value=""Sign Up""></div>
                    </form>");

            string toReturn = Layout(
                title: "Sign Up",
                body: sb.ToString(),
                user
                );

            clearNotifications();
            return(toReturn);
        }
        /*Update User Infor*/
        public async Task <CustomResponse> UpdateUserInfor(UserReadDTO userReadDTO)
        {
            if (userReadDTO == null)
            {
                return(new CustomResponse(false, "User Read DTO is null"));
            }

            if (userReadDTO.isValueNull())
            {
                return(new CustomResponse(false, "User Read DTO value is null"));
            }

            try
            {
                User userWillUpdate = db.Users.Where(u => u.UserID.Equals(new Guid(userReadDTO.UserID))).FirstOrDefault();

                if (userWillUpdate != null)
                {
                    userWillUpdate.UserName = userReadDTO.UserName;

                    await db.SaveChangesAsync();
                }
                else
                {
                    return(new CustomResponse(false, "User is not exist"));
                }
            }
            catch (Exception e)
            {
                return(new CustomResponse(false, e.Message));
            }

            return(new CustomResponse(userReadDTO, true, "Update Thành Công"));
        }
Esempio n. 14
0
        public IEnumerable <UserReadDTO> GetAllUser(int page)
        {
            // Get the users details from the database
            var model = _userManager.Users.Skip(5 * (page - 1)).Take(5);

            // Declare a list to be returned
            var users = new List <UserReadDTO>();

            // Reshape the users details to the DTO model
            foreach (var item in model)
            {
                // Construct the DTO values here
                var user = new UserReadDTO
                {
                    FirstName   = item.FirstName,
                    LastName    = item.LastName,
                    Email       = item.Email,
                    Photo       = item.Photo,
                    DateCreated = item.DateCreated
                };

                // Add to the list to return
                users.Add(user);
            }

            return(users);
        }
Esempio n. 15
0
        internal static string Generate404Page(UserReadDTO user)
        {
            return(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2 Final//EN"">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
      ");
        }
        public static string GenerateResetToken(UserReadDTO user, TokenProviderOption UserTokenOption)
        {
            DateTime now             = DateTime.Now;
            var      resetJwt        = new JwtSecurityToken(UserTokenOption.Issuer, UserTokenOption.Audience, claims: GetTokenClaims(user, now), notBefore: now, expires: now.Add(UserTokenOption.ResetExpiration), signingCredentials: UserTokenOption.SigningCredentials);
            var      encodedResetJwt = new JwtSecurityTokenHandler().WriteToken(resetJwt);

            return(encodedResetJwt);
        }
Esempio n. 17
0
        public static string Layout(
            string title     = "Welcome",
            string body      = "",
            UserReadDTO user = null,
            string[] flashes = default
            )
        {
            StringBuilder sb = new StringBuilder();

            sb.Append($@"<!doctype html>
<head>
<title>{title} | MiniTwit</title>
<link rel=stylesheet type=text/css href=""/static/css/style.css"">
<meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
</head>
<body>
<div class=page>
  <h1>MiniTwit</h1>
  <div class=navigation>");

            if (user is null)
            {
                sb.Append(@"
    <a href=""public"">public timeline meme</a> |
    <a href=""sign_up"">sign up</a> |
    <a href=""login"">sign in</a>");
            }
            else
            {
                sb.Append($@"
    <a href=""/"">my timeline</a> |
    <a href=""/public"">public timeline</a> |
    <form method=post action=/logout  style=""display: inline-block""><button class=nav_a type=submit>sign out [{user.username}]</button></form>");
            }

            sb.Append(@"</div>");

            if (flashes != null && flashes.Length > 0)
            {
                sb.Append("<ul class=flashes>");
                foreach (var message in flashes)
                {
                    sb.Append($"<li>{message}</li>");
                }
                sb.Append("</ul>");
            }
            sb.Append($@"
  <div class=body>
  {body}
  </div>
  <div class=footer>
    MiniTwit &mdash; Not A Flask Application
  </div>
</div>
</body>
");
            return(sb.ToString());
        }
 public static Claim[] GetTokenClaims(UserReadDTO user, DateTime dateTime)
 {
     return(new Claim[]
     {
         new Claim(JwtRegisteredClaimNames.Sub, JsonConvert.SerializeObject(user)),
         new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
         new Claim(JwtRegisteredClaimNames.Iat, DateTimeUtil.ToUnixEpochDate(dateTime).ToString(), ClaimValueTypes.Integer64)
     });
 }
Esempio n. 19
0
        public void UpdateToken_TokenNotExist_ActualFalse()
        {
            //Arrange
            db.Users.RemoveRange(db.Users);
            db.Tokens.RemoveRange(db.Tokens);

            string      UserID      = Guid.NewGuid().ToString();
            UserReadDTO userReadDTO = new UserReadDTO
            {
                UserID   = UserID,
                Email    = "*****@*****.**",
                UserName = "******"
            };

            Utilities.JWT.TokenResponse tokens = TokenUtil.GenerateTokens(userReadDTO, tokenProviderOption);

            DTO.ReadDTO.TokenReadDTO tokenReadDTO = new DTO.ReadDTO.TokenReadDTO
            {
                AccessToken           = tokens.AccessToken,
                AccessTokenExpriesIn  = tokens.AccessTokenExpiresIn,
                RefreshToken          = tokens.RefreshToken,
                RefreshTokenExpriesIn = tokens.RefreshTokenExpiresIn,
            };

            User user = new User
            {
                UserID          = new Guid(UserID),
                Email           = "*****@*****.**",
                UserName        = "******",
                HashPassword    = BCryptUtil.HashPassword("123456"),
                isAuthenticated = false
            };

            db.Users.Add(user);
            db.SaveChanges();

            Token token = new Token
            {
                AccessToken           = tokenReadDTO.AccessToken,
                AccessTokenExpriesIn  = tokenReadDTO.AccessTokenExpriesIn,
                RefreshToken          = tokenReadDTO.RefreshToken,
                RefreshTokenExpriesIn = tokenReadDTO.RefreshTokenExpriesIn,
                UserID = user.UserID
            };

            db.Tokens.Add(token);
            db.SaveChanges();

            //Act
            var status = userService.UpdateToken(Guid.NewGuid().ToString(), tokenReadDTO).Result.status;

            //Assert
            Assert.AreEqual(false, status);
        }
Esempio n. 20
0
        private async Task <UserReadDTO> AuthenticateUser(UserLoginDTO userLoginDTO)
        {
            UserReadDTO userReadDTO = null;
            var         userFromDB  = await _repository.GetUserByEmail(userLoginDTO.email);

            if (userFromDB != null && BCrypt.Net.BCrypt.Verify(userLoginDTO.password, userFromDB.password))
            {
                userReadDTO = _mapper.Map <UserReadDTO>(userFromDB);
            }

            return(userReadDTO);
        }
        private Claim[] GetClaims(UserReadDTO User)
        {
            Claim[] Claims = new Claim[1 + User.Roles.Count];
            Claims[0] = new Claim(JwtRegisteredClaimNames.Sub, User.Id.ToString());
            int Count = 1;

            foreach (var Role in User.Roles)
            {
                Claims[Count++] = new Claim(ClaimTypes.Role, Role);
            }

            return(Claims);
        }
        public dynamic GetPosts()
        {
            string      accessToken = Request.Headers[HeaderNames.Authorization];
            string      token       = accessToken.Split("Bearer ")[1];
            UserReadDTO userRead    = TokenUtil.GetSubFromToken(token);

            return(new
            {
                status = true,
                code = ReturnCodes.DataGetSucceeded,
                blogs = _postService.GetPosts(userRead.UserID).Result
            });
        }
Esempio n. 23
0
   public static string GenerateLoginPage(UserReadDTO user = null)
   {
       return(Layout(
                  title: "Sign In | MiniTwit",
                  body: @"<h2>Sign In</h2>
 <form method=post action=login>
 <dl>
 <dt>Username:
 <dd><input type=text name=Username size=30>
 <dt>Password:
 <dd><input type=password name=Password size=30>
 </dl>
 <div class=actions><input type=submit value=""Sign In""></div>
               </form>", user: user));
   }
        public dynamic Remove([FromRoute] int PostID)
        {
            string      accessToken = Request.Headers[HeaderNames.Authorization];
            string      token       = accessToken.Split("Bearer ")[1];
            UserReadDTO userRead    = TokenUtil.GetSubFromToken(token);

            Task <CustomResponse> remove_task = _postService.Remove(PostID, userRead.UserID);

            return(new
            {
                status = remove_task.Result.status,
                code = (remove_task.Result.status ? ReturnCodes.DataRemoveSucceeded : ReturnCodes.DataRemoveFailed),
                message = remove_task.Result.message
            });
        }
Esempio n. 25
0
        private async Task CheckSessionForUser()
        {
            if (int.TryParse(sessionHelper.GetString("user_id"), out var userid))
            {
                var user = await UserRepo.ReadAsync(userid);

                if (user is null)
                {
                    PostLogout();
                }
                else
                {
                    this.user = user;
                }
            }
        }
        public static TokenResponse GenerateTokens(UserReadDTO user, TokenProviderOption UserTokenOption)
        {
            DateTime now              = DateTime.Now;
            var      accessJwt        = new JwtSecurityToken(UserTokenOption.Issuer, UserTokenOption.Audience, claims: GetTokenClaims(user, DateTime.Now), notBefore: DateTime.Now, expires: DateTime.Now.Add(UserTokenOption.AccessExpiration), signingCredentials: UserTokenOption.SigningCredentials);
            var      encodedAccessJwt = new JwtSecurityTokenHandler().WriteToken(accessJwt);

            var refreshJwt        = new JwtSecurityToken(UserTokenOption.Issuer, UserTokenOption.Audience, claims: GetTokenClaims(user, now), notBefore: now, expires: now.Add(UserTokenOption.RefreshExpiration), signingCredentials: UserTokenOption.SigningCredentials);
            var encodedRefreshJwt = new JwtSecurityTokenHandler().WriteToken(refreshJwt);

            return(new TokenResponse
            {
                AccessToken = encodedAccessJwt,
                AccessTokenExpiresIn = (int)UserTokenOption.AccessExpiration.TotalSeconds,
                RefreshToken = encodedRefreshJwt,
                RefreshTokenExpiresIn = (int)UserTokenOption.RefreshExpiration.TotalSeconds
            });
        }
Esempio n. 27
0
        public static string GenerateLoginPage(UserReadDTO user = null)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("<h2>Sign In</h2>");
            sb = addNotifications(sb);
            sb.Append(@"<form method=post action=login><dl><dt>Username:<dd><input type=text name=Username size=30><dt>Password:<dd><input type=password name=Password size=30></dl>
      <div class=actions><input type=submit value=""Sign In""></div>
                    </form>");

            string toReturn = Layout(
                title: "Sign In",
                body: sb.ToString()
                , user: user);

            clearNotifications();
            return(toReturn);
        }
Esempio n. 28
0
        public async Task <ActionResult <UserReadDTO> > Login(UserLoginDTO userLoginDTO)
        {
            try
            {
                UserReadDTO authenticatedUser = await AuthenticateUser(userLoginDTO);

                if (authenticatedUser != null)
                {
                    var tokenString = GenerateJSONWebToken(authenticatedUser);
                    return(Ok(new { token = tokenString }));
                }

                return(Unauthorized());
            }
            catch (Exception)
            {
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }
Esempio n. 29
0
        public async Task <ActionResult <User> > GetUser(int id)
        {
            var user = await _userService.GetUser(id);

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

            var model = new UserReadDTO()
            {
                UserId    = user.UserId,
                Firstname = user.Firstname,
                Lastname  = user.Lastname,
                Email     = user.Email
            };

            return(Ok(model));
        }
        public async Task <ActionResult <UserReadDTO> > GetUserByEmail(string email)
        {
            var user = await _userRepo.GetOneUserByEmail(email);

            if (user != null)
            {
                //var userReadDTO = _mapper.Map<UserReadDTO>(user);
                var userReadDTO = new UserReadDTO
                {
                    UserId            = user.UserId,
                    First             = user.First,
                    Last              = user.Last,
                    Email             = user.Email,
                    NumPacksPurchased = user.NumPacksPurchased,
                    CurrencyAmount    = user.CurrencyAmount,
                };
                return(Ok(userReadDTO));
            }
            return(NotFound());
        }