/// <summary> /// This is used to verify if the user that has logged in /// is the same that before, if not this will Reject every query in the Queue /// and clear all subscriptions, otherwise this will replay the Queue if it is waiting. /// </summary> internal override void OnUserLoggedIn(object sender, UserLoggedInEvent e) { if (previousKUID != e.Kuid) { if (AutoRecover && QueryReplayer.WaitLoginToReplay) { QueryReplayer.RejectAllQueries(new UnauthorizeException("Request submitted by another user")); QueryReplayer.Lock = false; QueryReplayer.WaitLoginToReplay = false; } SubscriptionRecoverer.Clear(); } else { if (AutoRecover && QueryReplayer.WaitLoginToReplay) { QueryReplayer.ReplayQueries(); QueryReplayer.Lock = false; QueryReplayer.WaitLoginToReplay = false; } SubscriptionRecoverer.RenewSubscriptions(); } previousKUID = e.Kuid; }
/// <summary> /// This will check the token validity, /// and chose what to do before replaying the Queue /// </summary> internal override async Task Recover() { if (!AutoRecover) { return; } if (await TokenVerifier.IsTokenValid()) { QueryReplayer.ReplayQueries(); SubscriptionRecoverer.RenewSubscriptions(); return; } if (QueryReplayer.Lock) { QueryReplayer.ReplayQueries((obj) => obj["controller"]?.ToString() == "auth" && (obj["action"].ToString() == "login" || obj["action"].ToString() == "logout"), false); } }