public async Task <ActionResult <UserDto> > Login(UserLoginDto userLoginDto) { try { //get user by email var user = await _userRepository.GetUserByEmail(userLoginDto.Email); if (user == null) { return(Unauthorized(new RestError(HttpStatusCode.Unauthorized, new { Unauthorized = "Invalid email or password" }))); } //confirm password var passwordConfirmed = await _userRepository.ConfirmPassword(user, userLoginDto.Password); //Return a token if password confirmed if (passwordConfirmed) { var userDto = new UserDto { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), Username = user.UserName, Manager = user.Manager, Admin = user.Admin }; //get last timestamp for LastJobsiteVisited var lastJobsiteVisited = await _timestampRepository.GetUsersLastTimestamp(user); if (lastJobsiteVisited != null) { userDto.LastJobsiteVisited = _mapper.Map <TimestampWithBasicJobsiteInfoDto>(lastJobsiteVisited); } //check to see if currently clocked in at a jobsite var currentlyClockedin = await _timestampRepository.GetClockedInTimestamp(user); if (currentlyClockedin != null) { userDto.CurrentlyClockedIn = true; userDto.ClockedInTimestamp = _mapper.Map <TimestampClockedInBasicDto>(currentlyClockedin); } return(userDto); } } catch (Exception) { return(this.StatusCode(StatusCodes.Status500InternalServerError, "Server Error: Failed to communicate with database.")); } //else return(Unauthorized(new RestError(HttpStatusCode.Unauthorized, new { Unauthorized = "Invalid email or password" }))); }