public ActionResult GetSubscribersHead([FromBody] string accessToken)
        {
            JWT token;

            try
            {
                token = new JWT(accessToken);
            }
            catch (Exception ex)
            {
                _logger.LogError($"[GET]api/auth/get-subscribers" + ex.Message);
                return(BadRequest());
            }

            var user = _db.Users.FirstOrDefault(p => p.Id == token.PAYLOAD.Sub);

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


            _db.Entry(user).Collection(p => p.Subscribers).Load();
            //выбірает всех, кто есть в бд
            var subscribers = user.Subscribers
                              .Where(p => _db.Users.FirstOrDefault(i => i.Id == p.WhoSubscribeId) != null)
                              .Select(p => _db.Users.FirstOrDefault(i => i.Id == p.WhoSubscribeId))
                              .ToList();

            return(Ok());
        }
Example #2
0
        public void UpdateTokens()
        {
            //подгружается User от нужного Refresh (нужно для обновленія токенов)
            //лібо для удаления из БД при expire Refresh-а
            using (var _db = new BelTwitContext(Helper.BelTwitDbOptions))
            {
                var refreshFromDb = _db.RefreshTokens.
                                    FirstOrDefault(p => p.TokenValue == RefreshToken.TokenValue);
                if (refreshFromDb == null)
                {
                    throw new Exception("Refresh token doesn't exist in database anymore");
                }
                RefreshToken = refreshFromDb;

                _db.Entry(RefreshToken).Reference(p => p.User).Load();
                if (RefreshToken.User == null)
                {
                    throw new Exception("User of this token doesn't exist in database anymore");
                }
            }


            if (RefreshToken.ExpiresAt < DateTime.Now)
            {
                //удаляем із бд его
                using (var _db = new BelTwitContext(Helper.BelTwitDbOptions))
                {
                    _db.RefreshTokens.Remove(RefreshToken);
                    _db.SaveChanges();
                }
                throw new Exception("Refresh token expired. Authentificate again!");
            }


            //при обновлении Access обновляется і Refresh
            //expiration у Refresh нужен только лішь для случаю отсутсвія в сеті 60 дней (тогда нужно вводіть пароль)
            if (AccessToken.IsTokenExpired())
            {
                AccessToken = new JWT(RefreshToken.User);


                using (var _db = new BelTwitContext(Helper.BelTwitDbOptions))
                {
                    _db.RefreshTokens.Remove(RefreshToken);
                    var refreshToken = new RefreshToken
                    {
                        TokenValue = new Guid(),
                        ExpiresAt  = DateTime.Now.AddDays(60),
                        UserId     = RefreshToken.UserId,
                        User       = RefreshToken.User
                    };
                    _db.RefreshTokens.Add(refreshToken);
                    _db.SaveChanges();

                    RefreshToken = refreshToken;
                }
            }
        }
Example #3
0
        public ActionResult GetMySubscriptionsTweetsHead([FromBody] string accessToken)
        {
            JWT token;

            try
            {
                token = new JWT(accessToken);
            }
            catch (Exception ex)
            {
                _logger.LogError($"[GET]api/twitter;" + ex.Message);
                return(BadRequest());
            }
            var user = _db.Users
                       .FirstOrDefault(p => p.Id == token.PAYLOAD.Sub);

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


            _db.Entry(user).Collection(p => p.Subscriptions).Load();
            var subscriptions = user.Subscriptions
                                .Where(p => _db.Users.FirstOrDefault(i => i.Id == p.OnWhomSubscribeId) != null)
                                .Select(p => _db.Users.FirstOrDefault(i => i.Id == p.OnWhomSubscribeId))
                                .ToList();

            var alltweets = new List <Tweet>();

            foreach (var sub in subscriptions)
            {
                _db.Entry(sub).Collection(p => p.Tweets).Load();
                var subTweets = sub.Tweets;
                alltweets.AddRange(subTweets);
            }

            return(Ok());
        }