/// <summary> /// Returns the user information, or null, for a user with the given name /// </summary> /// <returns>The login entries.</returns> /// <param name="username">The username to get the login tokens for.</param> public virtual async Task <IEnumerable <LoginEntry> > GetLoginEntriesAsync(string username) { var lst = new List <LoginEntry>(); using (await m_lock.LockAsync()) { EnsureConnected(); m_getLoginEntriesCommand.SetParameterValues(username); using (var rd = m_getLoginEntriesCommand.ExecuteReader()) { while (rd.Read()) { lst.Add(new LoginEntry() { UserID = rd.GetAsString(0), Username = rd.GetAsString(1), Token = rd.GetAsString(2) }); } } } // Not using enumerable, because it messes with the lock if the caller does not exhaust the enumerable return(lst); }
/// <summary> /// Gets a long-term login entry /// </summary> /// <returns>The long term login entry.</returns> /// <param name="series">The series identifier to use for lookup.</param> public virtual async Task <LongTermToken> GetLongTermLoginAsync(string series) { using (await m_lock.LockAsync()) { EnsureConnected(); m_getLongTermLoginCommand.SetParameterValues(series); using (var rd = m_getLongTermLoginCommand.ExecuteReader()) { if (!rd.Read()) { return(null); } else { return new LongTermToken() { UserID = rd.GetAsString(0), Series = rd.GetAsString(1), Token = rd.GetAsString(2), Expires = rd.GetDateTime(3) } }; } } }
/// <summary> /// Gets a session record from an XSRF token /// </summary> /// <returns>The session record.</returns> /// <param name="xsrf">The XSRF token.</param> public virtual async Task <SessionRecord> GetSessionFromXSRFAsync(string xsrf) { using (await m_lock.LockAsync()) { EnsureConnected(); m_getSessionFromXSRFCommand.SetParameterValues(xsrf); using (var rd = m_getSessionFromXSRFCommand.ExecuteReader()) { if (!rd.Read()) { return(null); } else { return new SessionRecord() { UserID = rd.GetAsString(0), Cookie = rd.GetAsString(1), XSRFToken = rd.GetAsString(2), Expires = rd.GetDateTime(3) } }; } } }
/// <summary> /// Called periodically to expire old items /// </summary> /// <returns>An awaitable task.</returns> public virtual Task ExpireOldItemsAsync() { return(m_lock.LockedAsync(() => { m_dropExpiredSessionsCommand.SetParameterValues(DateTime.Now); m_dropExpiredSessionsCommand.ExecuteNonQuery(); m_dropExpiredLongTermCommand.SetParameterValues(DateTime.Now); m_dropExpiredLongTermCommand.ExecuteNonQuery(); })); }