コード例 #1
0
        /// <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);
        }
コード例 #2
0
 /// <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)
                        }
             };
         }
     }
 }
コード例 #3
0
 /// <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)
                        }
             };
         }
     }
 }
コード例 #4
0
        /// <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();
            }));
        }