Exemple #1
0
        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));
        }
Exemple #2
0
        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)));
        }