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()); }
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; } } }
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()); }