Esempio n. 1
0
        public async Task <IActionResult> UpdateCookie(Guid cookieId, UpdateCookieDto cookieDto)
        {
            var emailClaim = User.Claims.Where(t => t.Type == ClaimsIdentity.DefaultNameClaimType).Single();
            var user       = await _userRepo.GetAsync(emailClaim.Value);

            if (user == null)
            {
                return(BadRequest("Пользователь не найден"));
            }

            var cookie = await _cookieRepo.GetByCookieIdAsync(cookieId);

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

            if (cookie.Value == cookieDto.Value && cookie.ExpirationDate == cookieDto.ExpirationDate)
            {
                return(BadRequest(new {
                    cookieId = cookieId,
                    value = cookieDto.Value,
                    expirationDate = cookieDto.ExpirationDate,
                    errorMessage = "Дублируемое значение"
                }));
            }

            cookie.Value          = cookieDto.Value;
            cookie.ExpirationDate = cookieDto.ExpirationDate;

            _cookieRepo.UpdateCookie(cookie);
            await _cookieRepo.SaveChangesAsync();

            var template = await _cookieTemplateRepo.GetByTemplateAsync(cookie.CookieTemplateId);

            var resource = await _resourceRepo.GetAsync(template.ResourceId);

            var channels = await _clientRepo.GetChannelsAsync(cookie.ClientId);

            var userIds = channels.Select(t => t.UserId);
            var users   = await _userRepo.GetByUserIdsAsync(userIds);

            var emails = users.Where(t => t.Email != user.Email).Select(t => t.Email);
            //var connection = _connectionMapping.GetConnections(user.Email);
            // получаем список всех пользователей текущего client и кроме текущего пользователя
            var connectionIds = _connectionMapping.GetConnectionsByKeys(emails);
            // TODO: а вот и ошибка - отправить всем кроме себя, а нужно отправить только своей подгруппе
            await _cookieHub.Clients.Clients(connectionIds.ToList()).SendAsync("NewCookie", new
            {
                id    = cookie.Id,
                value = cookie.Value,
                //expirationDate = cookie.ExpirationDate,
                name = template.Name,
                url  = resource.Url
            });

            return(Ok("Куки обновлены"));
        }
        public async Task <IActionResult> Create(NewClientDto contract)
        {
            var resource = await _resourceRepo.GetAsync(contract.ResourceId, include : true);

            if (resource == null)
            {
                return(NotFound("Не найден"));
            }

            var cookieName = resource.Clients.SingleOrDefault(t => t.Name == contract.Name);

            if (cookieName != null)
            {
                return(BadRequest("Такое наименование уже существует"));
            }

            var client = new Client
            {
                Name       = contract.Name,
                ResourceId = contract.ResourceId
            };

            await _clientRepo.CreateClientAsync(client);

            await _clientRepo.SaveChangesAsync();

            // Из шаблонов берем список куков и заполняем.
            var cookies = resource.CookieTemplates.Select(t => new Cookie
            {
                ClientId         = client.Id,
                CookieTemplateId = t.Id
            }).ToArray();

            await _cookieRepo.CreateRangeCookieAsync(cookies);

            await _cookieRepo.SaveChangesAsync();

            return(Ok(new ClientDto
            {
                Id = client.Id,
                Name = client.Name,
                Cookies = cookies.Select(async t =>
                {
                    var cookieTemplate = await _cookieTemplateRepo.GetByTemplateAsync(t.CookieTemplateId);
                    return new CookieDto
                    {
                        Value = t.Value,
                        Id = t.Id,
                    };
                }).Select(t => t.Result).ToArray()
            }));
        }
Esempio n. 3
0
        public async Task <IActionResult> CreateAsync(NewCookieTemplateDto newCookieTemplateDto)
        {
            var cookieTemplate = new CookieTemplate
            {
                Domain     = newCookieTemplateDto.Domain,
                Name       = newCookieTemplateDto.Name,
                ResourceId = newCookieTemplateDto.ResourceId
            };

            await _cookieTemplateRepo.CreateAsync(cookieTemplate);

            await _cookieTemplateRepo.SaveChangesAsync();

            // Добавляем новые шаблоны в куки
            var clients = await _clientRepo.GetByResourceAsync(newCookieTemplateDto.ResourceId);

            var cookies = clients.Data.Select(t => new Cookie
            {
                ClientId         = t.Id,
                CookieTemplateId = cookieTemplate.Id
            }).ToArray();

            await _cookieRepo.CreateRangeCookieAsync(cookies);

            await _cookieRepo.SaveChangesAsync();

            // TODO: Уведомлять всех пользователей что теперь по такому что куку нужно отправлять значение
            //var users =

            //var connection = _connectionMapping.GetConnections(user.Email);
            //await _cookieHub.Clients.AllExcept(new string[] { connection.SingleOrDefault() }).SendAsync("NewCookie", new
            //{
            //    id = cookie.Id,
            //    value = cookie.Value,
            //    name = template.Name,
            //    url = resource.Url
            //});

            return(Ok(cookieTemplate));
        }