public async Task <IActionResult> LogOut([FromHeader(Name = "User-Agent")] string userAgent, [FromHeader(Name = "Authorization")] string token) { if (userAgent is null) { return(Json("Incorrect user-agent info")); } var principal = _accountHelper.GetPrincipal(token); if (principal is null) { return(Json("Incorrect token")); } var login = principal?.Identity?.Name; var userLogin = await _userLoginRepository.Query() .Where(s => s.User.Login.Equals(login) && s.UserAgent.Equals(userAgent)) .SingleOrDefaultAsync(); if (userLogin is null) { return(Json("Incorrect authorization data", HttpStatusCode.Unauthorized)); } await _userLoginRepository.DeleteAsync(userLogin); return(Json(true)); }
public async Task <IActionResult> Post([FromBody] ToDoItemNewDto dto, [FromHeader(Name = "Authorization")] string token) { if (dto is null) { return(Json("To-do item is empty")); } // It's better to do validation separately if (string.IsNullOrEmpty(dto.Title) || string.IsNullOrWhiteSpace(dto.Title)) { return(Json("Title is empty")); } // Get user login var principal = _accountHelper.GetPrincipal(token, false); if (principal is null) { return(Json("Incorrect token")); } var login = principal?.Identity?.Name; var existUserId = await _repositoryUser.QueryNoTracking() .Where(s => s.Login.Equals(login)) .Select(s => s.Id) .SingleOrDefaultAsync(); if (existUserId <= 0) { return(Json("Incorrect user")); } // It's better to use custom Equals with validation on: '', "" and another symbols. var existingToDoItem = await _repositoryToDoItem.QueryNoTracking() .Where(s => s.Title.Equals(dto.Title)) .SingleOrDefaultAsync(); if (!(existingToDoItem is null)) { return(Json("There is another duplicate of the to-do item")); } var toDoItem = _mapper.Map <ToDoItemModel>(dto); toDoItem.UserId = existUserId; await _repositoryToDoItem.SaveAsync(toDoItem); return(Json(_mapper, toDoItem, typeof(ToDoItemDto))); }